Imported Upstream version 2.30.0
[platform/upstream/git.git] / tempfile.c
index 139ecd9..94aa18f 100644 (file)
@@ -130,17 +130,17 @@ static void deactivate_tempfile(struct tempfile *tempfile)
 }
 
 /* Make sure errno contains a meaningful value on error */
-struct tempfile *create_tempfile(const char *path)
+struct tempfile *create_tempfile_mode(const char *path, int mode)
 {
        struct tempfile *tempfile = new_tempfile();
 
        strbuf_add_absolute_path(&tempfile->filename, path);
        tempfile->fd = open(tempfile->filename.buf,
-                           O_RDWR | O_CREAT | O_EXCL | O_CLOEXEC, 0666);
+                           O_RDWR | O_CREAT | O_EXCL | O_CLOEXEC, mode);
        if (O_CLOEXEC && tempfile->fd < 0 && errno == EINVAL)
                /* Try again w/o O_CLOEXEC: the kernel might not support it */
                tempfile->fd = open(tempfile->filename.buf,
-                                   O_RDWR | O_CREAT | O_EXCL, 0666);
+                                   O_RDWR | O_CREAT | O_EXCL, mode);
        if (tempfile->fd < 0) {
                deactivate_tempfile(tempfile);
                return NULL;
@@ -279,7 +279,7 @@ int reopen_tempfile(struct tempfile *tempfile)
                BUG("reopen_tempfile called for an inactive object");
        if (0 <= tempfile->fd)
                BUG("reopen_tempfile called for an open object");
-       tempfile->fd = open(tempfile->filename.buf, O_WRONLY);
+       tempfile->fd = open(tempfile->filename.buf, O_WRONLY|O_TRUNC);
        return tempfile->fd;
 }