Skip to content

Commit

Permalink
compat: some mkdir() do not like a slash at the end
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jojo-Schmitz authored and gitster committed Aug 24, 2012
1 parent fab4b04 commit 0539ecf
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 0 deletions.
24 changes: 24 additions & 0 deletions compat/mkdir.c
Original file line number Original file line Diff line number Diff line change
@@ -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;
}
5 changes: 5 additions & 0 deletions git-compat-util.h
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -162,6 +162,11 @@
#define probe_utf8_pathname_composition(a,b) #define probe_utf8_pathname_composition(a,b)
#endif #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 #ifndef NO_LIBGEN_H
#include <libgen.h> #include <libgen.h>
#else #else
Expand Down

0 comments on commit 0539ecf

Please sign in to comment.