compat: some mkdir() do not like a slash at the end

Introduce a compatibility helper for platforms with such a mkdir(). Signed-off-by: Joachim Schmitz <jojo@schmitz-digital.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Joachim Schmitz committed Aug 24, 2012 at 12:31 UTC 0539ecfdfce677b05992af5e9899a9e974130400
2 files changed +29
compat/mkdir.c new
+24
@@ -0,0 +1,24 @@
1 +#include "../git-compat-util.h"
2 +#undef mkdir
3 +
4 +/* for platforms that can't deal with a trailing '/' */
5 +int compat_mkdir_wo_trailing_slash(const char *dir, mode_t mode)
6 +{
7 + int retval;
8 + char *tmp_dir = NULL;
9 + size_t len = strlen(dir);
10 +
11 + if (len && dir[len-1] == '/') {
12 + if ((tmp_dir = strdup(dir)) == NULL)
13 + return -1;
14 + tmp_dir[len-1] = '\0';
15 + }
16 + else
17 + tmp_dir = (char *)dir;
18 +
19 + retval = mkdir(tmp_dir, mode);
20 + if (tmp_dir != dir)
21 + free(tmp_dir);
22 +
23 + return retval;
24 +}
git-compat-util.h
+5
@@ -162,6 +162,11 @@
162 #define probe_utf8_pathname_composition(a,b)
163 #endif
164
165 +#ifdef MKDIR_WO_TRAILING_SLASH
166 +#define mkdir(a,b) compat_mkdir_wo_trailing_slash((a),(b))
167 +extern int compat_mkdir_wo_trailing_slash(const char*, mode_t);
168 +#endif
169 +
170 #ifndef NO_LIBGEN_H
171 #include <libgen.h>
172 #else