Signed-off-by: Geert Bosch <bosch@xxxxxxxx> --- I needed to change the logic of this function a bit for doing some local hacks^Wmodifications and thought it might be a slight improvement/simplification. No change in functionality and passed 'make test'. entry.c | 23 +++++++++-------------- 1 files changed, 9 insertions(+), 14 deletions(-) diff --git a/entry.c b/entry.c index d72f811..f966c59 100644 --- a/entry.c +++ b/entry.c @@ -3,24 +3,19 @@ static void create_directories(const char *path, struct checkout *state) { - int len = strlen(path); - char *buf = xmalloc(len + 1); - const char *slash = path; + char *buf = xstrdup(path); + char *slash = buf; while ((slash = strchr(slash+1, '/')) != NULL) { - len = slash - path; - memcpy(buf, path, len); - buf[len] = 0; + *slash = 0; if (mkdir(buf, 0777)) { - if (errno == EEXIST) { - struct stat st; - if (len > state->base_dir_len && state->force && !unlink(buf) && !mkdir(buf, 0777)) - continue; - if (!stat(buf, &st) && S_ISDIR(st.st_mode)) - continue; /* ok */ - } - die("cannot create directory at %s", buf); + struct stat st; + int force = (slash - buf) > state->base_dir_len && state->force; + if (errno != EEXIST || ((!force || unlink(buf) || mkdir(buf, 0777)) && + (stat(buf, &st) || !S_ISDIR(st.st_mode)))) + die("cannot create directory at %s", buf); } + *slash='/'; } free(buf); } -- 1.5.1 - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html