Merge branch 'jk/write-file'
General code clean-up around a helper function to write a single-liner to a file. * jk/write-file: branch: use write_file_buf instead of write_file use write_file_buf where applicable write_file: add format attribute write_file: add pointer+len variant write_file: use xopen write_file: drop "gently" form branch: use non-gentle write_file for branch description am: ignore return value of write_file() config: fix bogus fd check when setting up default config
This commit is contained in:
62
wrapper.c
62
wrapper.c
@ -651,56 +651,28 @@ int xsnprintf(char *dst, size_t max, const char *fmt, ...)
|
||||
return len;
|
||||
}
|
||||
|
||||
static int write_file_v(const char *path, int fatal,
|
||||
const char *fmt, va_list params)
|
||||
void write_file_buf(const char *path, const char *buf, size_t len)
|
||||
{
|
||||
int fd = xopen(path, O_WRONLY | O_CREAT | O_TRUNC, 0666);
|
||||
if (write_in_full(fd, buf, len) != len)
|
||||
die_errno(_("could not write to %s"), path);
|
||||
if (close(fd))
|
||||
die_errno(_("could not close %s"), path);
|
||||
}
|
||||
|
||||
void write_file(const char *path, const char *fmt, ...)
|
||||
{
|
||||
va_list params;
|
||||
struct strbuf sb = STRBUF_INIT;
|
||||
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);
|
||||
|
||||
strbuf_complete_line(&sb);
|
||||
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;
|
||||
}
|
||||
|
||||
write_file_buf(path, sb.buf, sb.len);
|
||||
strbuf_release(&sb);
|
||||
if (close(fd)) {
|
||||
if (fatal)
|
||||
die_errno(_("could not close %s"), path);
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int write_file(const char *path, const char *fmt, ...)
|
||||
{
|
||||
int status;
|
||||
va_list params;
|
||||
|
||||
va_start(params, fmt);
|
||||
status = write_file_v(path, 1, fmt, params);
|
||||
va_end(params);
|
||||
return status;
|
||||
}
|
||||
|
||||
int write_file_gently(const char *path, const char *fmt, ...)
|
||||
{
|
||||
int status;
|
||||
va_list params;
|
||||
|
||||
va_start(params, fmt);
|
||||
status = write_file_v(path, 0, fmt, params);
|
||||
va_end(params);
|
||||
return status;
|
||||
}
|
||||
|
||||
void sleep_millisec(int millisec)
|
||||
|
Reference in New Issue
Block a user