Skip to content

Commit bef0413

Browse files
ttaylorrgitster
authored andcommitted
tempfile.c: introduce 'create_tempfile_mode'
In the next patch, 'hold_lock_file_for_update' will gain an additional 'mode' parameter to specify permissions for the associated temporary file. Since the lockfile.c machinery uses 'create_tempfile' which always creates a temporary file with global read-write permissions, introduce a variant here that allows specifying the mode. Note that the mode given to 'create_tempfile_mode' is not guaranteed to be written to disk, since it is subject to both the umask and 'core.sharedRepository'. Arguably, all temporary files should have permission 0444, since they are likely to be renamed into place and then not written to again. This is a much larger change than we may want to take on in this otherwise small patch, so for the time being, make 'create_tempfile' behave as it has always done by inlining it to 'create_tempfile_mode' with mode set to '0666'. Signed-off-by: Taylor Blau <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent e870325 commit bef0413

File tree

2 files changed

+12
-4
lines changed

2 files changed

+12
-4
lines changed

tempfile.c

+3-3
Original file line numberDiff line numberDiff line change
@@ -130,17 +130,17 @@ static void deactivate_tempfile(struct tempfile *tempfile)
130130
}
131131

132132
/* Make sure errno contains a meaningful value on error */
133-
struct tempfile *create_tempfile(const char *path)
133+
struct tempfile *create_tempfile_mode(const char *path, int mode)
134134
{
135135
struct tempfile *tempfile = new_tempfile();
136136

137137
strbuf_add_absolute_path(&tempfile->filename, path);
138138
tempfile->fd = open(tempfile->filename.buf,
139-
O_RDWR | O_CREAT | O_EXCL | O_CLOEXEC, 0666);
139+
O_RDWR | O_CREAT | O_EXCL | O_CLOEXEC, mode);
140140
if (O_CLOEXEC && tempfile->fd < 0 && errno == EINVAL)
141141
/* Try again w/o O_CLOEXEC: the kernel might not support it */
142142
tempfile->fd = open(tempfile->filename.buf,
143-
O_RDWR | O_CREAT | O_EXCL, 0666);
143+
O_RDWR | O_CREAT | O_EXCL, mode);
144144
if (tempfile->fd < 0) {
145145
deactivate_tempfile(tempfile);
146146
return NULL;

tempfile.h

+9-1
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,16 @@ struct tempfile {
8888
* Attempt to create a temporary file at the specified `path`. Return
8989
* a tempfile (whose "fd" member can be used for writing to it), or
9090
* NULL on error. It is an error if a file already exists at that path.
91+
* Note that `mode` will be further modified by the umask, and possibly
92+
* `core.sharedRepository`, so it is not guaranteed to have the given
93+
* mode.
9194
*/
92-
struct tempfile *create_tempfile(const char *path);
95+
struct tempfile *create_tempfile_mode(const char *path, int mode);
96+
97+
static inline struct tempfile *create_tempfile(const char *path)
98+
{
99+
return create_tempfile_mode(path, 0666);
100+
}
93101

94102
/*
95103
* Register an existing file as a tempfile, meaning that it will be

0 commit comments

Comments
 (0)