Skip to content

Commit

Permalink
git_mkstemp_mode, xmkstemp_mode: variants of gitmkstemps with mode ar…
Browse files Browse the repository at this point in the history
…gument.

gitmkstemps emulates the behavior of mkstemps, which is usually used
to create files in a shared directory like /tmp/, hence, it creates
files with permission 0600.

Add git_mkstemps_mode() that allows us to specify the desired mode, and
make git_mkstemps() a wrapper that always uses 0600 to call it. Later we
will use git_mkstemps_mode() when creating pack files.

Signed-off-by: Matthieu Moy <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
moy authored and gitster committed Feb 22, 2010
1 parent 00787ed commit b862b61
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 2 deletions.
4 changes: 4 additions & 0 deletions cache.h
Original file line number Diff line number Diff line change
Expand Up @@ -641,6 +641,10 @@ int git_mkstemp(char *path, size_t n, const char *template);

int git_mkstemps(char *path, size_t n, const char *template, int suffix_len);

/* set default permissions by passing mode arguments to open(2) */
int git_mkstemps_mode(char *pattern, int suffix_len, int mode);
int git_mkstemp_mode(char *pattern, int mode);

/*
* NOTE NOTE NOTE!!
*
Expand Down
15 changes: 13 additions & 2 deletions path.c
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ int git_mkstemps(char *path, size_t len, const char *template, int suffix_len)
#undef TMP_MAX
#define TMP_MAX 16384

int gitmkstemps(char *pattern, int suffix_len)
int git_mkstemps_mode(char *pattern, int suffix_len, int mode)
{
static const char letters[] =
"abcdefghijklmnopqrstuvwxyz"
Expand Down Expand Up @@ -204,7 +204,7 @@ int gitmkstemps(char *pattern, int suffix_len)
template[4] = letters[v % num_letters]; v /= num_letters;
template[5] = letters[v % num_letters]; v /= num_letters;

fd = open(pattern, O_CREAT | O_EXCL | O_RDWR, 0600);
fd = open(pattern, O_CREAT | O_EXCL | O_RDWR, mode);
if (fd > 0)
return fd;
/*
Expand All @@ -226,6 +226,17 @@ int gitmkstemps(char *pattern, int suffix_len)
return -1;
}

int git_mkstemp_mode(char *pattern, int mode)
{
/* mkstemp is just mkstemps with no suffix */
return git_mkstemps_mode(pattern, 0, mode);
}

int gitmkstemps(char *pattern, int suffix_len)
{
return git_mkstemps_mode(pattern, suffix_len, 0600);
}

int validate_headref(const char *path)
{
struct stat st;
Expand Down
10 changes: 10 additions & 0 deletions wrapper.c
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,16 @@ int xmkstemp(char *template)
return fd;
}

int xmkstemp_mode(char *template, int mode)
{
int fd;

fd = git_mkstemp_mode(template, mode);
if (fd < 0)
die_errno("Unable to create temporary file");
return fd;
}

/*
* zlib wrappers to make sure we don't silently miss errors
* at init time.
Expand Down

0 comments on commit b862b61

Please sign in to comment.