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