compat: some mkdir() do not like a slash at the end
authorJoachim Schmitz <jojo@schmitz-digital.de>
Fri, 24 Aug 2012 10:31:03 +0000 (12:31 +0200)
committerJunio C Hamano <gitster@pobox.com>
Fri, 24 Aug 2012 16:48:51 +0000 (09:48 -0700)
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>
compat/mkdir.c [new file with mode: 0644]
git-compat-util.h

diff --git a/compat/mkdir.c b/compat/mkdir.c
new file mode 100644 (file)
index 0000000..9e253fb
--- /dev/null
@@ -0,0 +1,24 @@
+#include "../git-compat-util.h"
+#undef mkdir
+
+/* for platforms that can't deal with a trailing '/' */
+int compat_mkdir_wo_trailing_slash(const char *dir, mode_t mode)
+{
+       int retval;
+       char *tmp_dir = NULL;
+       size_t len = strlen(dir);
+
+       if (len && dir[len-1] == '/') {
+               if ((tmp_dir = strdup(dir)) == NULL)
+                       return -1;
+               tmp_dir[len-1] = '\0';
+       }
+       else
+               tmp_dir = (char *)dir;
+
+       retval = mkdir(tmp_dir, mode);
+       if (tmp_dir != dir)
+               free(tmp_dir);
+
+       return retval;
+}
index 35b095e8ae989ae02228f814528b43d5bd026aab..34f040f59551c13b5e7c72bab12b8082b37a03ab 100644 (file)
 #define probe_utf8_pathname_composition(a,b)
 #endif
 
+#ifdef MKDIR_WO_TRAILING_SLASH
+#define mkdir(a,b) compat_mkdir_wo_trailing_slash((a),(b))
+extern int compat_mkdir_wo_trailing_slash(const char*, mode_t);
+#endif
+
 #ifndef NO_LIBGEN_H
 #include <libgen.h>
 #else