summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnatol Belski <ab@php.net>2015-07-17 15:14:25 +0200
committerAnatol Belski <ab@php.net>2015-07-17 15:14:25 +0200
commitdaba578dbe056260c748f01739d0dd5cfbc5aecd (patch)
tree730aa9bd1b01ee76a9de4498da404762831f7e6a
parent4c87750c26027431b0688168d90ff75e055524c1 (diff)
downloadphp-git-daba578dbe056260c748f01739d0dd5cfbc5aecd.tar.gz
fix file cache path calculation at all the places
moved the corresponding code into a separte function while on that
-rw-r--r--ext/opcache/zend_file_cache.c62
1 files changed, 29 insertions, 33 deletions
diff --git a/ext/opcache/zend_file_cache.c b/ext/opcache/zend_file_cache.c
index 4c02ca4a55..22de16804a 100644
--- a/ext/opcache/zend_file_cache.c
+++ b/ext/opcache/zend_file_cache.c
@@ -664,42 +664,52 @@ static void zend_file_cache_serialize(zend_persistent_script *script,
new_script->mem = NULL;
}
-int zend_file_cache_script_store(zend_persistent_script *script, int in_shm)
+static char *zend_file_cache_get_bin_file_path(zend_string *script_path)
{
size_t len;
- int fd;
char *filename;
- zend_file_cache_metainfo info;
-#ifndef ZEND_WIN32
- struct iovec vec[3];
-#endif
- void *mem, *buf;
len = strlen(ZCG(accel_directives).file_cache);
- filename = emalloc(len + 33 + ZSTR_LEN(script->full_path) + sizeof(SUFFIX));
+ filename = emalloc(len + 33 + ZSTR_LEN(script_path) + sizeof(SUFFIX));
memcpy(filename, ZCG(accel_directives).file_cache, len);
#ifndef ZEND_WIN32
filename[len] = '/';
memcpy(filename + len + 1, ZCG(system_id), 32);
- memcpy(filename + len + 33, ZSTR_VAL(script->full_path), ZSTR_LEN(script->full_path));
- memcpy(filename + len + 33 + ZSTR_LEN(script->full_path), SUFFIX, sizeof(SUFFIX));
+ memcpy(filename + len + 33, ZSTR_VAL(script_path), ZSTR_LEN(script_path));
+ memcpy(filename + len + 33 + ZSTR_LEN(script_path), SUFFIX, sizeof(SUFFIX));
#else
filename[len] = '\\';
memcpy(filename + len + 1, ZCG(system_id), 32);
- if (ZSTR_LEN(script->full_path) >= 2 && ':' == ZSTR_VAL(script->full_path)[1]) {
+ if (ZSTR_LEN(script_path) >= 2 && ':' == ZSTR_VAL(script_path)[1]) {
/* local fs */
*(filename + len + 33) = '\\';
- *(filename + len + 34) = ZSTR_VAL(script->full_path)[0];
- memcpy(filename + len + 35, ZSTR_VAL(script->full_path) + 2, ZSTR_LEN(script->full_path) - 2);
- memcpy(filename + len + 35 + ZSTR_LEN(script->full_path) - 2, SUFFIX, sizeof(SUFFIX));
+ *(filename + len + 34) = ZSTR_VAL(script_path)[0];
+ memcpy(filename + len + 35, ZSTR_VAL(script_path) + 2, ZSTR_LEN(script_path) - 2);
+ memcpy(filename + len + 35 + ZSTR_LEN(script_path) - 2, SUFFIX, sizeof(SUFFIX));
} else {
/* network path */
- memcpy(filename + len + 33, ZSTR_VAL(script->full_path), ZSTR_LEN(script->full_path));
- memcpy(filename + len + 33 + ZSTR_LEN(script->full_path), SUFFIX, sizeof(SUFFIX));
+ memcpy(filename + len + 33, ZSTR_VAL(script_path), ZSTR_LEN(script_path));
+ memcpy(filename + len + 33, ZSTR_VAL(script_path), ZSTR_LEN(script_path));
+ memcpy(filename + len + 33 + ZSTR_LEN(script_path), SUFFIX, sizeof(SUFFIX));
}
#endif
- if (zend_file_cache_mkdir(filename, len) != SUCCESS) {
+ return filename;
+}
+
+int zend_file_cache_script_store(zend_persistent_script *script, int in_shm)
+{
+ int fd;
+ char *filename;
+ zend_file_cache_metainfo info;
+#ifndef ZEND_WIN32
+ struct iovec vec[3];
+#endif
+ void *mem, *buf;
+
+ filename = zend_file_cache_get_bin_file_path(script->full_path);
+
+ if (zend_file_cache_mkdir(filename, strlen(ZCG(accel_directives).file_cache)) != SUCCESS) {
zend_accel_error(ACCEL_LOG_WARNING, "opcache cannot create directory for file '%s'\n", filename);
efree(filename);
return FAILURE;
@@ -1178,7 +1188,6 @@ static void zend_file_cache_unserialize(zend_persistent_script *script,
zend_persistent_script *zend_file_cache_script_load(zend_file_handle *file_handle)
{
zend_string *full_path = file_handle->opened_path;
- size_t len;
int fd;
char *filename;
zend_persistent_script *script;
@@ -1190,13 +1199,7 @@ zend_persistent_script *zend_file_cache_script_load(zend_file_handle *file_handl
if (!full_path) {
return NULL;
}
- len = strlen(ZCG(accel_directives).file_cache);
- filename = emalloc(len + 33 + ZSTR_LEN(full_path) + sizeof(SUFFIX));
- memcpy(filename, ZCG(accel_directives).file_cache, len);
- filename[len] = '/';
- memcpy(filename + len + 1, ZCG(system_id), 32);
- memcpy(filename + len + 33, ZSTR_VAL(full_path), ZSTR_LEN(full_path));
- memcpy(filename + len + 33 + ZSTR_LEN(full_path), SUFFIX, sizeof(SUFFIX));
+ filename = zend_file_cache_get_bin_file_path(full_path);
fd = open(filename, O_RDONLY | O_BINARY);
if (fd < 0) {
@@ -1342,16 +1345,9 @@ use_process_mem:
void zend_file_cache_invalidate(zend_string *full_path)
{
- size_t len;
char *filename;
- len = strlen(ZCG(accel_directives).file_cache);
- filename = emalloc(len + 33 + ZSTR_LEN(full_path) + sizeof(SUFFIX));
- memcpy(filename, ZCG(accel_directives).file_cache, len);
- filename[len] = '/';
- memcpy(filename + len + 1, ZCG(system_id), 32);
- memcpy(filename + len + 33, ZSTR_VAL(full_path), ZSTR_LEN(full_path));
- memcpy(filename + len + 33 + ZSTR_LEN(full_path), SUFFIX, sizeof(SUFFIX));
+ filename = zend_file_cache_get_bin_file_path(full_path);
unlink(filename);
efree(filename);