[PATCH 1/4] wrapper: add git_mkdtemp()
- From
René Scharfe <l.s.r@web.de>
- Date
- Dec 3, 2025, 10:51 UTC
- Message-ID
- <65c997a7-e480-4617-a761-fc9dc8a7b20d@web.de>
- In-Reply-To
- <784f495a-4b1a-4acf-96cd-599243ef9e27@web.de>
Extend git_mkstemps_mode() to optionally call mkdir(2) instead of open(2), then use that ability to create a mkdtemp(3) replacement, git_mkdtemp(). We'll start using it in the next commit.
Signed-off-by: René Scharfe <l.s.r@web.de> --- wrapper.c | 17 +++++++++++++++-- wrapper.h | 2 ++ 2 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/wrapper.c b/wrapper.c index d5976b3e7e..6ddf4eb66b 100644 --- a/wrapper.c +++ b/wrapper.c @@ -429,7 +429,7 @@ int xmkstemp(char *filename_template) #undef TMP_MAX #define TMP_MAX 16384 -int git_mkstemps_mode(char *pattern, int suffix_len, int mode) +static int git_mkdstemps_mode(char *pattern, int suffix_len, int mode, bool dir) { static const char letters[] = "abcdefghijklmnopqrstuvwxyz" @@ -471,7 +471,10 @@ int git_mkstemps_mode(char *pattern, int suffix_len, int mode) v /= num_letters; } - fd = open(pattern, O_CREAT | O_EXCL | O_RDWR, mode); + if (dir) + fd = mkdir(pattern, mode); + else + fd = open(pattern, O_CREAT | O_EXCL | O_RDWR, mode); if (fd >= 0) return fd; /* @@ -486,6 +489,16 @@ int git_mkstemps_mode(char *pattern, int suffix_len, int mode) return -1; } +char *git_mkdtemp(char *pattern) +{ + return git_mkdstemps_mode(pattern, 0, 0700, true) ? NULL : pattern; +} + +int git_mkstemps_mode(char *pattern, int suffix_len, int mode) +{ + return git_mkdstemps_mode(pattern, suffix_len, mode, false); +} + int git_mkstemp_mode(char *pattern, int mode) { /* mkstemp is just mkstemps with no suffix */ diff --git a/wrapper.h b/wrapper.h index 44a8597ac3..15ac3bab6e 100644 --- a/wrapper.h +++ b/wrapper.h @@ -37,6 +37,8 @@ int xsnprintf(char *dst, size_t max, const char *fmt, ...); int xgethostname(char *buf, size_t len); +char *git_mkdtemp(char *pattern); + /* 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);
-- 2.52.0