From: Pierre Joye Date: Fri, 10 Sep 2010 14:17:40 +0000 (+0000) Subject: - Implement bug #51804, splFileInfo::getLinkTarget() on Windows X-Git-Tag: php-5.3.4RC1~254 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2b04364852bbb21cd0a1cd3b1221f1d9291725d6;p=php - Implement bug #51804, splFileInfo::getLinkTarget() on Windows --- diff --git a/NEWS b/NEWS index e52246a6f1..124d1ec0fa 100644 --- a/NEWS +++ b/NEWS @@ -10,6 +10,8 @@ (Andrey) - Improved support for is_link and related functions on Windows. (Pierre) +- Implemented FR #51804, SplFileInfo::getLinkTarget on Windows. (Pierre) + - Fixed symbolic resolution support when the target is a DFS share. (Pierre) - Fixed MOPS-2010-24, fix string validation. (CVE-2010-2950). (Pierre) - Changed deprecated ini options on startup from E_WARNING to E_DEPRECATED. diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c index 5a3bd48ea5..98e810ab04 100755 --- a/ext/spl/spl_directory.c +++ b/ext/spl/spl_directory.c @@ -1050,8 +1050,21 @@ SPL_METHOD(SplFileInfo, getLinkTarget) zend_replace_error_handling(EH_THROW, spl_ce_RuntimeException, &error_handling TSRMLS_CC); -#ifdef HAVE_SYMLINK - ret = readlink(intern->file_name, buff, MAXPATHLEN-1); +#if defined(PHP_WIN32) || HAVE_SYMLINK + if (!IS_ABSOLUTE_PATH(intern->file_name, intern->file_name_len)) { + char expanded_path[MAXPATHLEN]; + + /* TODO: Fix expand_filepath to do not resolve links but only expand the path + avoiding double two resolution attempts + (Pierre) */ + if (!expand_filepath(intern->file_name, expanded_path TSRMLS_CC)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "No such file or directory"); + RETURN_FALSE; + } + ret = php_sys_readlink(expanded_path, buff, MAXPATHLEN - 1); + } else { + ret = php_sys_readlink(intern->file_name, buff, MAXPATHLEN-1); + } #else ret = -1; /* always fail if not implemented */ #endif