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>maint
parent
31e26ebcb5
commit
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));
|
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 */
|
/* pager.c */
|
||||||
extern void setup_pager(void);
|
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"));
|
die_errno(_("unable to get current working directory"));
|
||||||
return strbuf_detach(&sb, NULL);
|
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;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue