summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre Joye <pajoye@php.net>2009-08-25 23:51:04 +0000
committerPierre Joye <pajoye@php.net>2009-08-25 23:51:04 +0000
commitbea1685a2100183441e36d7c2d0adcedc6988eb9 (patch)
tree5fac03bb9b9eb9588abd6bd5bd2799a3b2dc82a1
parentef582b5397f4e515c5769ec8b30251571b3aaf46 (diff)
downloadphp-git-bea1685a2100183441e36d7c2d0adcedc6988eb9.tar.gz
Improved readlink, supress \??\ and use the drive syntax only
-rw-r--r--NEWS5
-rw-r--r--ext/standard/link_win32.c11
2 files changed, 13 insertions, 3 deletions
diff --git a/NEWS b/NEWS
index fdf4856189..40c6c58724 100644
--- a/NEWS
+++ b/NEWS
@@ -7,6 +7,9 @@ PHP NEWS
- Added error constant when json_encode() detects an invalid UTF-8 sequence.
(Scott)
+
+- Improved readlink on Windows, supress \??\ and use the drive syntax only.
+ (Pierre)
- Improved dns_get_record AAAA support on windows. Always available when IPv6
is support is installed, format is now the same than on unix. (Pierre)
- Improved the DNS functions on OSX to use newer APIs, also use Bind 9 API
@@ -14,7 +17,7 @@ PHP NEWS
- Improved shared extension loading on OSX to use the standard Unix dlopen()
API. (Scott)
-- Fixed possilbe bad caching of symlinked directories in the realpath cache
+- Fixed possible bad caching of symlinked directories in the realpath cache
on Windows. (Pierre)
- Fixed atime and mtime in stat related functions on Windows. (Pierre)
- Fixed spl_autoload_unregister/spl_autoload_functions wrt. Closures and
diff --git a/ext/standard/link_win32.c b/ext/standard/link_win32.c
index 078b7d18a3..0a837a5608 100644
--- a/ext/standard/link_win32.c
+++ b/ext/standard/link_win32.c
@@ -107,7 +107,7 @@ PHP_FUNCTION(readlink)
RETURN_FALSE;
}
- dwRet = pGetFinalPathNameByHandle(hFile, Path, MAXPATHLEN, VOLUME_NAME_NT);
+ dwRet = pGetFinalPathNameByHandle(hFile, Path, MAXPATHLEN, VOLUME_NAME_DOS);
if(dwRet >= MAXPATHLEN) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't resolve the full path, the path exceeds the MAX_PATH_LEN (%d) limit", MAXPATHLEN);
RETURN_FALSE;
@@ -118,7 +118,14 @@ PHP_FUNCTION(readlink)
/* Append NULL to the end of the string */
Path[dwRet] = '\0';
- RETURN_STRING(Path, 1);
+ if(dwRet > 4) {
+ /* Skip first 4 characters if they are "\??\" */
+ if(Path[0] == '\\' && Path[0] == '\\' && Path[1] == '?' && Path[2] == '?' && Path[3] == '\\') {
+ RETURN_STRING(Path + 4, 1);
+ }
+ } else {
+ RETURN_STRING(Path, 1);
+ }
}
/* }}} */