diff options
author | Ron Yorston <rmy@pobox.com> | 2015-11-13 08:51:45 +0000 |
---|---|---|
committer | Ron Yorston <rmy@pobox.com> | 2015-11-13 08:51:45 +0000 |
commit | ab879a41ab674129ef1593cda181cc8b64d0dadf (patch) | |
tree | 7ddf182a2c74121ae7d3076928b6c2be6f9cb129 /libbb | |
parent | d6c9296168ad0a770967714515ffa1fca5e60145 (diff) | |
download | busybox-w32-ab879a41ab674129ef1593cda181cc8b64d0dadf.tar.gz busybox-w32-ab879a41ab674129ef1593cda181cc8b64d0dadf.tar.bz2 busybox-w32-ab879a41ab674129ef1593cda181cc8b64d0dadf.zip |
libbb: additional support for backslashes in paths
Diffstat (limited to 'libbb')
-rw-r--r-- | libbb/get_last_path_component.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/libbb/get_last_path_component.c b/libbb/get_last_path_component.c index db4be68ad..15eb85ca8 100644 --- a/libbb/get_last_path_component.c +++ b/libbb/get_last_path_component.c | |||
@@ -31,8 +31,18 @@ char* FAST_FUNC bb_get_last_path_component_nostrip(const char *path) | |||
31 | { | 31 | { |
32 | char *slash = strrchr(path, '/'); | 32 | char *slash = strrchr(path, '/'); |
33 | 33 | ||
34 | #if ENABLE_PLATFORM_MINGW32 | ||
35 | const char *start = has_dos_drive_prefix(path) ? path+2 : path; | ||
36 | |||
37 | if (!slash) | ||
38 | slash = strrchr(path, '\\'); | ||
39 | |||
40 | if (!slash || (slash == start && !slash[1])) | ||
41 | return (char*)path; | ||
42 | #else | ||
34 | if (!slash || (slash == path && !slash[1])) | 43 | if (!slash || (slash == path && !slash[1])) |
35 | return (char*)path; | 44 | return (char*)path; |
45 | #endif | ||
36 | 46 | ||
37 | return slash + 1; | 47 | return slash + 1; |
38 | } | 48 | } |
@@ -47,9 +57,20 @@ char* FAST_FUNC bb_get_last_path_component_strip(char *path) | |||
47 | { | 57 | { |
48 | char *slash = last_char_is(path, '/'); | 58 | char *slash = last_char_is(path, '/'); |
49 | 59 | ||
60 | #if ENABLE_PLATFORM_MINGW32 | ||
61 | const char *start = has_dos_drive_prefix(path) ? path+2 : path; | ||
62 | |||
63 | if (!slash) | ||
64 | slash = last_char_is(path, '\\'); | ||
65 | |||
66 | if (slash) | ||
67 | while ((*slash == '/' || *slash == '\\') && slash != start) | ||
68 | *slash-- = '\0'; | ||
69 | #else | ||
50 | if (slash) | 70 | if (slash) |
51 | while (*slash == '/' && slash != path) | 71 | while (*slash == '/' && slash != path) |
52 | *slash-- = '\0'; | 72 | *slash-- = '\0'; |
73 | #endif | ||
53 | 74 | ||
54 | return bb_get_last_path_component_nostrip(path); | 75 | return bb_get_last_path_component_nostrip(path); |
55 | } | 76 | } |