diff options
author | Johannes Sixt <johannes.sixt@telecom.at> | 2007-11-30 21:36:00 +0100 |
---|---|---|
committer | Johannes Sixt <johannes.sixt@telecom.at> | 2008-06-23 13:30:27 +0200 |
commit | 8385abfda533819be9fbec436230ccd7be4bcda8 (patch) | |
tree | be7b242dd2be63a086930cbb428c08d56d84a8a6 /sha1_file.c | |
parent | Windows: Treat Windows style path names. (diff) | |
download | tgif-8385abfda533819be9fbec436230ccd7be4bcda8.tar.xz |
Windows: Handle absolute paths in safe_create_leading_directories().
In this function we must be careful to handle drive-local paths else there
is a danger that it runs into an infinite loop.
Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Diffstat (limited to 'sha1_file.c')
-rw-r--r-- | sha1_file.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/sha1_file.c b/sha1_file.c index 6f004ffd09..0a54eed761 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -83,14 +83,18 @@ int get_sha1_hex(const char *hex, unsigned char *sha1) return 0; } +static inline int offset_1st_component(const char *path) +{ + if (has_dos_drive_prefix(path)) + return 2 + (path[2] == '/'); + return *path == '/'; +} + int safe_create_leading_directories(char *path) { - char *pos = path; + char *pos = path + offset_1st_component(path); struct stat st; - if (is_absolute_path(path)) - pos++; - while (pos) { pos = strchr(pos, '/'); if (!pos) |