]> granicus.if.org Git - php/commitdiff
fix path handling for the file cache
authorAnatol Belski <ab@php.net>
Fri, 17 Jul 2015 11:50:40 +0000 (13:50 +0200)
committerAnatol Belski <ab@php.net>
Fri, 17 Jul 2015 11:51:16 +0000 (13:51 +0200)
ext/opcache/zend_file_cache.c

index 9314c89e7aea993647d0f7c00bc1a27d0c730d9a..4c02ca4a5519675da19afa131cc14ff3d8e5db2d 100644 (file)
@@ -678,10 +678,26 @@ int zend_file_cache_script_store(zend_persistent_script *script, int in_shm)
        len = strlen(ZCG(accel_directives).file_cache);
        filename = emalloc(len + 33 + ZSTR_LEN(script->full_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));
+#else
+       filename[len] = '\\';
+       memcpy(filename + len + 1, ZCG(system_id), 32);
+       if (ZSTR_LEN(script->full_path) >= 2 && ':' == ZSTR_VAL(script->full_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));
+       } 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));
+       }
+#endif
 
        if (zend_file_cache_mkdir(filename, len) != SUCCESS) {
                zend_accel_error(ACCEL_LOG_WARNING, "opcache cannot create directory for file '%s'\n", filename);