mirror of
https://github.com/php/php-src.git
synced 2026-04-28 02:33:17 +02:00
MFH: - Fixed Bug #43137 (rmdir() and rename() do not clear statcache)
This commit is contained in:
@@ -3,6 +3,7 @@ PHP NEWS
|
||||
?? ??? 2007, PHP 5.2.5RC2
|
||||
- Added ability to control memory consumption between request using
|
||||
ZEND_MM_COMPACT environment variable. (Dmitry)
|
||||
- Fixed bug #43137 (rmdir() and rename() do not clear statcache). (Jani)
|
||||
|
||||
18 Oct 2007, PHP 5.2.5RC1
|
||||
- Upgraded PCRE to version 7.3 (Nuno)
|
||||
|
||||
@@ -46,6 +46,9 @@
|
||||
#include <openssl/ssl.h>
|
||||
#include <openssl/pkcs12.h>
|
||||
|
||||
/* Common */
|
||||
#include <time.h>
|
||||
|
||||
#define DEFAULT_KEY_LENGTH 512
|
||||
#define MIN_KEY_LENGTH 384
|
||||
|
||||
|
||||
+14
-7
@@ -698,14 +698,10 @@ PHP_FUNCTION(touch)
|
||||
/* }}} */
|
||||
#endif
|
||||
|
||||
/* {{{ proto void clearstatcache(void)
|
||||
Clear file stat cache */
|
||||
PHP_FUNCTION(clearstatcache)
|
||||
/* {{{ php_clear_stat_cache()
|
||||
*/
|
||||
PHPAPI void php_clear_stat_cache(TSRMLS_D)
|
||||
{
|
||||
if (ZEND_NUM_ARGS()) {
|
||||
WRONG_PARAM_COUNT;
|
||||
}
|
||||
|
||||
if (BG(CurrentStatFile)) {
|
||||
efree(BG(CurrentStatFile));
|
||||
BG(CurrentStatFile) = NULL;
|
||||
@@ -718,6 +714,17 @@ PHP_FUNCTION(clearstatcache)
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto void clearstatcache(void)
|
||||
Clear file stat cache */
|
||||
PHP_FUNCTION(clearstatcache)
|
||||
{
|
||||
if (ZEND_NUM_ARGS()) {
|
||||
WRONG_PARAM_COUNT;
|
||||
}
|
||||
php_clear_stat_cache(TSRMLS_C);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
#define IS_LINK_OPERATION(__t) ((__t) == FS_TYPE || (__t) == FS_IS_LINK || (__t) == FS_LSTAT)
|
||||
#define IS_EXISTS_CHECK(__t) ((__t) == FS_EXISTS || (__t) == FS_IS_W || (__t) == FS_IS_R || (__t) == FS_IS_X || (__t) == FS_IS_FILE || (__t) == FS_IS_DIR || (__t) == FS_IS_LINK)
|
||||
#define IS_ABLE_CHECK(__t) ((__t) == FS_IS_R || (__t) == FS_IS_W || (__t) == FS_IS_X)
|
||||
|
||||
@@ -87,6 +87,7 @@ typedef unsigned int php_stat_len;
|
||||
typedef int php_stat_len;
|
||||
#endif
|
||||
|
||||
PHPAPI void php_clear_stat_cache(TSRMLS_D);
|
||||
PHPAPI void php_stat(const char *filename, php_stat_len filename_length, int type, zval *return_value TSRMLS_DC);
|
||||
|
||||
/* Switches for various filestat functions: */
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
--TEST--
|
||||
Test fileatime(),filemtime(),filectime() & touch() functions : basic functionality
|
||||
Test fileatime(), filemtime(), filectime() & touch() functions : basic functionality
|
||||
--FILE--
|
||||
<?php
|
||||
/*
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
--TEST--
|
||||
Test fileatime(), filemtime(), filectime() & touch() functions: error conditions
|
||||
Test fileatime(), filemtime(), filectime() & touch() functions : error conditions
|
||||
--FILE--
|
||||
<?php
|
||||
/*
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
--TEST--
|
||||
Bug #43137 (rmdir() and rename() do not clear statcache)
|
||||
--FILE--
|
||||
<?php
|
||||
$toname = "TO_" . md5(microtime());
|
||||
$dirname = "FROM_" . md5(microtime());
|
||||
|
||||
mkdir($dirname);
|
||||
var_dump(is_dir($dirname)); // Expected: true
|
||||
rename($dirname, $toname);
|
||||
var_dump(is_dir($dirname)); // Expected: false
|
||||
var_dump(is_dir($toname)); // Expected: true
|
||||
rmdir($toname);
|
||||
var_dump(is_dir($toname)); // Expected: false
|
||||
?>
|
||||
--EXPECT--
|
||||
bool(true)
|
||||
bool(false)
|
||||
bool(true)
|
||||
bool(false)
|
||||
@@ -24,6 +24,7 @@
|
||||
#include "php_open_temporary_file.h"
|
||||
#include "ext/standard/file.h"
|
||||
#include "ext/standard/flock_compat.h"
|
||||
#include "ext/standard/php_filestat.h"
|
||||
#include <stddef.h>
|
||||
#include <fcntl.h>
|
||||
#if HAVE_SYS_WAIT_H
|
||||
@@ -1032,12 +1033,10 @@ static int php_plain_files_unlink(php_stream_wrapper *wrapper, char *url, int op
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Clear stat cache */
|
||||
ZVAL_STRINGL(&funcname, "clearstatcache", sizeof("clearstatcache")-1, 0);
|
||||
call_user_function_ex(CG(function_table), NULL, &funcname, &retval, 0, NULL, 0, NULL TSRMLS_CC);
|
||||
if (retval) {
|
||||
zval_ptr_dtor(&retval);
|
||||
}
|
||||
php_clear_stat_cache(TSRMLS_C);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -1107,6 +1106,9 @@ static int php_plain_files_rename(php_stream_wrapper *wrapper, char *url_from, c
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Clear stat cache */
|
||||
php_clear_stat_cache(TSRMLS_C);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -1151,7 +1153,7 @@ static int php_plain_files_mkdir(php_stream_wrapper *wrapper, char *dir, int mod
|
||||
}
|
||||
else {
|
||||
/* find a top level directory we need to create */
|
||||
while ( (p = strrchr(buf + offset, DEFAULT_SLASH)) || ( offset !=1 && (p = strrchr(buf, DEFAULT_SLASH))) ) {
|
||||
while ( (p = strrchr(buf + offset, DEFAULT_SLASH)) || (offset != 1 && (p = strrchr(buf, DEFAULT_SLASH))) ) {
|
||||
int n = 0;
|
||||
|
||||
*p = '\0';
|
||||
@@ -1218,6 +1220,9 @@ static int php_plain_files_rmdir(php_stream_wrapper *wrapper, char *url, int opt
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Clear stat cache */
|
||||
php_clear_stat_cache(TSRMLS_C);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -1412,9 +1417,6 @@ stream_skip:
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
* tab-width: 4
|
||||
|
||||
Reference in New Issue
Block a user