path: implement common_dir handling in git_pathdup_submodule()
[gitweb.git] / wrapper.c
index e4514634313c44354190e0c7e08a2b501aa0b098..0e22d4381438b2c262e1cd5ee0cc4effc2fb3c3d 100644 (file)
--- a/wrapper.c
+++ b/wrapper.c
@@ -621,19 +621,18 @@ char *xgetcwd(void)
        return strbuf_detach(&sb, NULL);
 }
 
-int write_file(const char *path, int fatal, const char *fmt, ...)
+static int write_file_v(const char *path, int fatal,
+                       const char *fmt, va_list params)
 {
        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);
+       strbuf_complete_line(&sb);
        if (write_in_full(fd, sb.buf, sb.len) != sb.len) {
                int err = errno;
                close(fd);
@@ -652,6 +651,28 @@ int write_file(const char *path, int fatal, const char *fmt, ...)
        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)
 {
        poll(NULL, 0, millisec);