pajoye Tue, 25 Aug 2009 09:16:53 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=287673
Log: - fix #49047, touch may fail on directory Bug: http://bugs.php.net/49047 (Assigned) The function touch() fails on directories. Changed paths: U php/php-src/branches/PHP_5_3/TSRM/tsrm_virtual_cwd.c U php/php-src/branches/PHP_5_3/TSRM/tsrm_virtual_cwd.h U php/php-src/branches/PHP_5_3/TSRM/tsrm_win32.c U php/php-src/branches/PHP_5_3/TSRM/tsrm_win32.h A php/php-src/branches/PHP_5_3/ext/standard/tests/file/bug49047.phpt U php/php-src/trunk/TSRM/tsrm_virtual_cwd.c U php/php-src/trunk/TSRM/tsrm_virtual_cwd.h U php/php-src/trunk/TSRM/tsrm_win32.c U php/php-src/trunk/TSRM/tsrm_win32.h A php/php-src/trunk/ext/standard/tests/file/bug49047.phpt Modified: php/php-src/branches/PHP_5_3/TSRM/tsrm_virtual_cwd.c =================================================================== --- php/php-src/branches/PHP_5_3/TSRM/tsrm_virtual_cwd.c 2009-08-25 09:15:47 UTC (rev 287672) +++ php/php-src/branches/PHP_5_3/TSRM/tsrm_virtual_cwd.c 2009-08-25 09:16:53 UTC (rev 287673) @@ -1193,7 +1193,7 @@ } /* }}} */ -static int win32_utime(const char *filename, struct utimbuf *buf) /* {{{ */ +TSRM_API int win32_utime(const char *filename, struct utimbuf *buf) /* {{{ */ { FILETIME mtime, atime; HANDLE hFile; Modified: php/php-src/branches/PHP_5_3/TSRM/tsrm_virtual_cwd.h =================================================================== --- php/php-src/branches/PHP_5_3/TSRM/tsrm_virtual_cwd.h 2009-08-25 09:15:47 UTC (rev 287672) +++ php/php-src/branches/PHP_5_3/TSRM/tsrm_virtual_cwd.h 2009-08-25 09:16:53 UTC (rev 287673) @@ -311,8 +311,13 @@ #define VCWD_REALPATH(path, real_path) tsrm_realpath(path, real_path TSRMLS_CC) #if HAVE_UTIME -#define VCWD_UTIME(path, time) utime(path, time) +# ifdef TSRM_WIN32 +# define VCWD_UTIME(path, time) win32_utime(path, time) +# else +# define VCWD_UTIME(path, time) utime(path, time) +# endif #endif + #define VCWD_CHMOD(path, mode) chmod(path, mode) #if !defined(TSRM_WIN32) && !defined(NETWARE) #define VCWD_CHOWN(path, owner, group) chown(path, owner, group) Modified: php/php-src/branches/PHP_5_3/TSRM/tsrm_win32.c =================================================================== --- php/php-src/branches/PHP_5_3/TSRM/tsrm_win32.c 2009-08-25 09:15:47 UTC (rev 287672) +++ php/php-src/branches/PHP_5_3/TSRM/tsrm_win32.c 2009-08-25 09:16:53 UTC (rev 287673) @@ -170,7 +170,7 @@ fAccess = bucket->is_readable; goto Finished; } - desired_access = FILE_GENERIC_READ; + desired_access = FILE_GENERIC_READ|FILE_FLAG_BACKUP_SEMANTICS; } else { // if(mode <= 6) if(bucket != NULL && bucket->is_rvalid && bucket->is_wvalid) { fAccess = bucket->is_readable & bucket->is_writable; Modified: php/php-src/branches/PHP_5_3/TSRM/tsrm_win32.h =================================================================== --- php/php-src/branches/PHP_5_3/TSRM/tsrm_win32.h 2009-08-25 09:15:47 UTC (rev 287672) +++ php/php-src/branches/PHP_5_3/TSRM/tsrm_win32.h 2009-08-25 09:16:53 UTC (rev 287673) @@ -97,6 +97,7 @@ TSRM_API FILE *popen(const char *command, const char *type); TSRM_API int pclose(FILE *stream); TSRM_API int tsrm_win32_access(const char *pathname, int mode); +TSRM_API int win32_utime(const char *filename, struct utimbuf *buf); TSRM_API int shmget(int key, int size, int flags); TSRM_API void *shmat(int key, const void *shmaddr, int flags); Added: php/php-src/branches/PHP_5_3/ext/standard/tests/file/bug49047.phpt =================================================================== --- php/php-src/branches/PHP_5_3/ext/standard/tests/file/bug49047.phpt (rev 0) +++ php/php-src/branches/PHP_5_3/ext/standard/tests/file/bug49047.phpt 2009-08-25 09:16:53 UTC (rev 287673) @@ -0,0 +1,17 @@ +--TEST-- +Test fopen() function : variation: interesting paths, no use include path +--FILE-- +<?php +// fopen with interesting windows paths. +$testdir = __DIR__ . '/bug47177.tmpdir'; +mkdir($testdir); +$t = time() - 3600; +touch($testdir, $t); +clearstatcache(); +$t2 = filemtime($testdir); +if ($t2 != $t) echo "failed (got $t2, expecting $t)\n"; +rmdir($testdir); +echo "Ok."; +?> +--EXPECTF-- +Ok. Modified: php/php-src/trunk/TSRM/tsrm_virtual_cwd.c =================================================================== --- php/php-src/trunk/TSRM/tsrm_virtual_cwd.c 2009-08-25 09:15:47 UTC (rev 287672) +++ php/php-src/trunk/TSRM/tsrm_virtual_cwd.c 2009-08-25 09:16:53 UTC (rev 287673) @@ -1192,7 +1192,7 @@ } /* }}} */ -static int win32_utime(const char *filename, struct utimbuf *buf) /* {{{ */ +TSRM_API int win32_utime(const char *filename, struct utimbuf *buf) /* {{{ */ { FILETIME mtime, atime; HANDLE hFile; Modified: php/php-src/trunk/TSRM/tsrm_virtual_cwd.h =================================================================== --- php/php-src/trunk/TSRM/tsrm_virtual_cwd.h 2009-08-25 09:15:47 UTC (rev 287672) +++ php/php-src/trunk/TSRM/tsrm_virtual_cwd.h 2009-08-25 09:16:53 UTC (rev 287673) @@ -328,8 +328,13 @@ #define VCWD_REALPATH(path, real_path) tsrm_realpath(path, real_path TSRMLS_CC) #if HAVE_UTIME -#define VCWD_UTIME(path, time) utime(path, time) +# ifdef TSRM_WIN32 +# define VCWD_UTIME(path, time) win32_utime(path, time) +# else +# define VCWD_UTIME(path, time) utime(path, time) +# endif #endif + #define VCWD_CHMOD(path, mode) chmod(path, mode) #if !defined(TSRM_WIN32) && !defined(NETWARE) #define VCWD_CHOWN(path, owner, group) chown(path, owner, group) Modified: php/php-src/trunk/TSRM/tsrm_win32.c =================================================================== --- php/php-src/trunk/TSRM/tsrm_win32.c 2009-08-25 09:15:47 UTC (rev 287672) +++ php/php-src/trunk/TSRM/tsrm_win32.c 2009-08-25 09:16:53 UTC (rev 287673) @@ -171,7 +171,7 @@ fAccess = bucket->is_readable; goto Finished; } - desired_access = FILE_GENERIC_READ; + desired_access = FILE_GENERIC_READ|FILE_FLAG_BACKUP_SEMANTICS; } else { // if(mode <= 6) if(bucket != NULL && bucket->is_rvalid && bucket->is_wvalid) { fAccess = bucket->is_readable & bucket->is_writable; Modified: php/php-src/trunk/TSRM/tsrm_win32.h =================================================================== --- php/php-src/trunk/TSRM/tsrm_win32.h 2009-08-25 09:15:47 UTC (rev 287672) +++ php/php-src/trunk/TSRM/tsrm_win32.h 2009-08-25 09:16:53 UTC (rev 287673) @@ -97,6 +97,7 @@ TSRM_API FILE *popen(const char *command, const char *type); TSRM_API int pclose(FILE *stream); TSRM_API int tsrm_win32_access(const char *pathname, int mode); +TSRM_API int win32_utime(const char *filename, struct utimbuf *buf); TSRM_API int shmget(int key, int size, int flags); TSRM_API void *shmat(int key, const void *shmaddr, int flags); Added: php/php-src/trunk/ext/standard/tests/file/bug49047.phpt =================================================================== --- php/php-src/trunk/ext/standard/tests/file/bug49047.phpt (rev 0) +++ php/php-src/trunk/ext/standard/tests/file/bug49047.phpt 2009-08-25 09:16:53 UTC (rev 287673) @@ -0,0 +1,17 @@ +--TEST-- +Test fopen() function : variation: interesting paths, no use include path +--FILE-- +<?php +// fopen with interesting windows paths. +$testdir = __DIR__ . '/bug47177.tmpdir'; +mkdir($testdir); +$t = time() - 3600; +touch($testdir, $t); +clearstatcache(); +$t2 = filemtime($testdir); +if ($t2 != $t) echo "failed (got $t2, expecting $t)\n"; +rmdir($testdir); +echo "Ok."; +?> +--EXPECTF-- +Ok.
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php