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;
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;
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) {
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);