diff options
author | Michael Haggerty <mhagger@alum.mit.edu> | 2014-01-06 14:45:21 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2014-01-06 09:34:19 -0800 |
commit | 831651fde8f8a8d90543917a8783962aa1a534bf (patch) | |
tree | c6b4bc426a06327a9b18076c00bf1c52b6f462ac /sha1_file.c | |
parent | f05023324c74bd12e66ac1dd04bbe2692c31dbfb (diff) | |
download | git-831651fde8f8a8d90543917a8783962aa1a534bf.tar.gz |
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>
Diffstat (limited to 'sha1_file.c')
-rw-r--r-- | sha1_file.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/sha1_file.c b/sha1_file.c index e52a0032e5..a2b9e3c502 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -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) !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; } |