зеркало из https://github.com/microsoft/git.git
wrapper.c: wrapper to open a file, fprintf then close
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
31e26ebcb5
Коммит
316e53e68c
2
cache.h
2
cache.h
|
@ -1499,6 +1499,8 @@ static inline ssize_t write_str_in_full(int fd, const char *str)
|
|||
{
|
||||
return write_in_full(fd, str, strlen(str));
|
||||
}
|
||||
__attribute__((format (printf, 3, 4)))
|
||||
extern int write_file(const char *path, int fatal, const char *fmt, ...);
|
||||
|
||||
/* pager.c */
|
||||
extern void setup_pager(void);
|
||||
|
|
31
wrapper.c
31
wrapper.c
|
@ -550,3 +550,34 @@ char *xgetcwd(void)
|
|||
die_errno(_("unable to get current working directory"));
|
||||
return strbuf_detach(&sb, NULL);
|
||||
}
|
||||
|
||||
int write_file(const char *path, int fatal, const char *fmt, ...)
|
||||
{
|
||||
struct strbuf sb = STRBUF_INIT;
|
||||
va_list params;
|
||||
int fd = open(path, O_RDWR | O_CREAT | O_TRUNC, 0666);
|
||||
if (fd < 0) {
|
||||
if (fatal)
|
||||
die_errno(_("could not open %s for writing"), path);
|
||||
return -1;
|
||||
}
|
||||
va_start(params, fmt);
|
||||
strbuf_vaddf(&sb, fmt, params);
|
||||
va_end(params);
|
||||
if (write_in_full(fd, sb.buf, sb.len) != sb.len) {
|
||||
int err = errno;
|
||||
close(fd);
|
||||
strbuf_release(&sb);
|
||||
errno = err;
|
||||
if (fatal)
|
||||
die_errno(_("could not write to %s"), path);
|
||||
return -1;
|
||||
}
|
||||
strbuf_release(&sb);
|
||||
if (close(fd)) {
|
||||
if (fatal)
|
||||
die_errno(_("could not close %s"), path);
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче