If the input path has multiple slashes between path components (e.g., "foo//bar"), then the old code was breaking the path at the last slash, not the first one. So in the above example, the second slash was overwritten with NUL, resulting in the parent directory being sought as "foo/". When stat() is called on "foo/", it fails with ENOTDIR if "foo" exists but is not a directory. This caused the wrong path to be taken in the subsequent logic. So instead, split path components at the first intercomponent slash rather than the last one. Signed-off-by: Michael Haggerty <mhagger@xxxxxxxxxxxx> --- sha1_file.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sha1_file.c b/sha1_file.c index 1e1510d..9d4459f 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -115,9 +115,10 @@ int safe_create_leading_directories(char *path) if (!slash) break; - while (*(slash + 1) == '/') - slash++; + next_component = slash + 1; + while (*next_component == '/') + next_component++; if (!*next_component) break; -- 1.8.5.2 -- 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