diff options
| author | Matthieu Moy <Matthieu.Moy@imag.fr> | 2010-02-22 23:32:13 +0100 | 
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2010-02-22 15:24:45 -0800 | 
| commit | b862b61c03797fd00490bb8caf05be840b79c6cb (patch) | |
| tree | 1e5db77e33a91fbe6f14245dfcd9c68d4c6f5976 | |
| parent | 00787ed55adbc2350efa911bf0bdebf6ca08c095 (diff) | |
| download | git-b862b61c03797fd00490bb8caf05be840b79c6cb.tar.gz | |
git_mkstemp_mode, xmkstemp_mode: variants of gitmkstemps with mode argument.
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 <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
| -rw-r--r-- | cache.h | 4 | ||||
| -rw-r--r-- | path.c | 15 | ||||
| -rw-r--r-- | wrapper.c | 10 | 
3 files changed, 27 insertions, 2 deletions
@@ -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!!   * @@ -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" @@ -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;  		/* @@ -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; @@ -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.  | 
