summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoachim Schmitz <jojo@schmitz-digital.de>2012-08-24 12:31:03 +0200
committerJunio C Hamano <gitster@pobox.com>2012-08-24 09:48:51 -0700
commit0539ecfdfce677b05992af5e9899a9e974130400 (patch)
tree81649716a1979403fe216ab1d9b31ec062a8c413
parentfab4b04e4be5ccfdf93e21e7260040bd9e7faedd (diff)
downloadgit-0539ecfdfce677b05992af5e9899a9e974130400.tar.gz
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>
-rw-r--r--compat/mkdir.c24
-rw-r--r--git-compat-util.h5
2 files changed, 29 insertions, 0 deletions
diff --git a/compat/mkdir.c b/compat/mkdir.c
new file mode 100644
index 0000000000..9e253fb72f
--- /dev/null
+++ b/compat/mkdir.c
@@ -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;
+}
diff --git a/git-compat-util.h b/git-compat-util.h
index 35b095e8ae..34f040f595 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -162,6 +162,11 @@
#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