Browse Source

safe_create_leading_directories(): add explicit "slash" pointer

Keep track of the position of the slash character independently of
"pos", thereby making the purpose of each variable clearer and
working towards other upcoming changes.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Michael Haggerty 11 years ago committed by Junio C Hamano
parent
commit
831651fde8
  1. 20
      sha1_file.c

20
sha1_file.c

@ -111,19 +111,21 @@ int safe_create_leading_directories(char *path) @@ -111,19 +111,21 @@ int safe_create_leading_directories(char *path)

while (pos) {
struct stat st;
char *slash = strchr(pos, '/');

pos = strchr(pos, '/');
if (!pos)
if (!slash)
break;
while (*++pos == '/')
;
while (*(slash + 1) == '/')
slash++;
pos = slash + 1;
if (!*pos)
break;
*--pos = '\0';

*slash = '\0';
if (!stat(path, &st)) {
/* path exists */
if (!S_ISDIR(st.st_mode)) {
*pos = '/';
*slash = '/';
return -3;
}
} else if (mkdir(path, 0777)) {
@ -131,14 +133,14 @@ int safe_create_leading_directories(char *path) @@ -131,14 +133,14 @@ int safe_create_leading_directories(char *path)
!stat(path, &st) && S_ISDIR(st.st_mode)) {
; /* somebody created it since we checked */
} else {
*pos = '/';
*slash = '/';
return -1;
}
} else if (adjust_shared_perm(path)) {
*pos = '/';
*slash = '/';
return -2;
}
*pos++ = '/';
*slash = '/';
}
return 0;
}

Loading…
Cancel
Save