diff options
author | Wez Furlong <wez@php.net> | 2003-04-29 13:35:48 +0000 |
---|---|---|
committer | Wez Furlong <wez@php.net> | 2003-04-29 13:35:48 +0000 |
commit | 89503b163e3114c9fa592b2006188ad6da14d5f5 (patch) | |
tree | 4a0942445daf82905690671235453c826f3876cc | |
parent | 180806f9e6fae07905b5239ef7d3e15f503072f8 (diff) | |
download | php-git-89503b163e3114c9fa592b2006188ad6da14d5f5.tar.gz |
Fix dirname() under win32.
The calculated length would be off-by-two under windows, which resulted in bogus dirnames.
-rw-r--r-- | ext/standard/string.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/ext/standard/string.c b/ext/standard/string.c index 0f1780a3cf..89e4fff459 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -1145,6 +1145,7 @@ PHP_FUNCTION(basename) PHPAPI size_t php_dirname(char *path, size_t len) { register char *end = path + len - 1; + unsigned int len_adjust = 0; #ifdef PHP_WIN32 /* Note that on Win32 CWD is per drive (heritage from CP/M). @@ -1153,6 +1154,7 @@ PHPAPI size_t php_dirname(char *path, size_t len) if ((2 <= len) && isalpha((int)((unsigned char *)path)[0]) && (':' == path[1])) { /* Skip over the drive spec (if any) so as not to change */ path += 2; + len_adjust += 2; if (2 == len) { /* Return "c:" on Win32 for dirname("c:"). * It would be more consistent to return "c:." @@ -1176,7 +1178,7 @@ PHPAPI size_t php_dirname(char *path, size_t len) /* The path only contained slashes */ path[0] = DEFAULT_SLASH; path[1] = '\0'; - return 1; + return 1 + len_adjust; } /* Strip filename */ @@ -1187,7 +1189,7 @@ PHPAPI size_t php_dirname(char *path, size_t len) /* No slash found, therefore return '.' */ path[0] = '.'; path[1] = '\0'; - return 1; + return 1 + len_adjust; } /* Strip slashes which came before the file name */ @@ -1197,11 +1199,11 @@ PHPAPI size_t php_dirname(char *path, size_t len) if (end < path) { path[0] = DEFAULT_SLASH; path[1] = '\0'; - return 1; + return 1 + len_adjust; } *(end+1) = '\0'; - return (size_t)(end + 1 - path); + return (size_t)(end + 1 - path) + len_adjust; } /* }}} */ |