Lines Matching refs:data

107 static char *ps_files_path_create(char *buf, size_t buflen, ps_files *data, const char *key)  in ps_files_path_create()  argument
115 if (!data || key_len <= data->dirdepth || in ps_files_path_create()
116 buflen < (strlen(data->basedir) + 2 * data->dirdepth + key_len + 5 + sizeof(FILE_PREFIX))) { in ps_files_path_create()
121 memcpy(buf, data->basedir, data->basedir_len); in ps_files_path_create()
122 n = data->basedir_len; in ps_files_path_create()
124 for (i = 0; i < (int)data->dirdepth; i++) { in ps_files_path_create()
141 static void ps_files_close(ps_files *data) in ps_files_close() argument
143 if (data->fd != -1) { in ps_files_close()
147 flock(data->fd, LOCK_UN); in ps_files_close()
149 close(data->fd); in ps_files_close()
150 data->fd = -1; in ps_files_close()
154 static void ps_files_open(ps_files *data, const char *key) in ps_files_open() argument
162 if (data->fd < 0 || !data->lastkey || strcmp(key, data->lastkey)) { in ps_files_open()
163 if (data->lastkey) { in ps_files_open()
164 efree(data->lastkey); in ps_files_open()
165 data->lastkey = NULL; in ps_files_open()
168 ps_files_close(data); in ps_files_open()
175 if (!ps_files_path_create(buf, sizeof(buf), data, key)) { in ps_files_open()
180 data->lastkey = estrdup(key); in ps_files_open()
184 data->fd = VCWD_OPEN_MODE(buf, O_CREAT | O_RDWR | O_BINARY | O_NOFOLLOW, data->filemode); in ps_files_open()
191 data->fd = VCWD_OPEN_MODE(buf, O_CREAT | O_RDWR | O_BINARY, data->filemode); in ps_files_open()
194 if (data->fd != -1) { in ps_files_open()
204 …if (zend_fstat(data->fd, &sbuf) || (sbuf.st_uid != 0 && sbuf.st_uid != getuid() && sbuf.st_uid != … in ps_files_open()
205 close(data->fd); in ps_files_open()
206 data->fd = -1; in ps_files_open()
212 ret = flock(data->fd, LOCK_EX); in ps_files_open()
219 if (fcntl(data->fd, F_SETFD, FD_CLOEXEC)) { in ps_files_open()
220 …php_error_docref(NULL, E_WARNING, "fcntl(%d, F_SETFD, FD_CLOEXEC) failed: %s (%d)", data->fd, stre… in ps_files_open()
229 static int ps_files_write(ps_files *data, zend_string *key, zend_string *val) in ps_files_write() argument
236 ps_files_open(data, ZSTR_VAL(key)); in ps_files_write()
237 if (data->fd < 0) { in ps_files_write()
242 if (ZSTR_LEN(val) < data->st_size) { in ps_files_write()
243 php_ignore_value(ftruncate(data->fd, 0)); in ps_files_write()
247 n = pwrite(data->fd, ZSTR_VAL(val), ZSTR_LEN(val), 0); in ps_files_write()
249 lseek(data->fd, 0, SEEK_SET); in ps_files_write()
257 wrote = _write(data->fd, buf, to_write); in ps_files_write()
266 n = write(data->fd, ZSTR_VAL(val), ZSTR_LEN(val)); in ps_files_write()
340 static int ps_files_key_exists(ps_files *data, const char *key) in ps_files_key_exists() argument
345 if (!key || !ps_files_path_create(buf, sizeof(buf), data, key)) { in ps_files_key_exists()
355 #define PS_FILES_DATA ps_files *data = PS_GET_MOD_DATA()
371 ps_files *data; in PS_OPEN_FUNC() local
417 data = ecalloc(1, sizeof(*data)); in PS_OPEN_FUNC()
419 data->fd = -1; in PS_OPEN_FUNC()
420 data->dirdepth = dirdepth; in PS_OPEN_FUNC()
421 data->filemode = filemode; in PS_OPEN_FUNC()
422 data->basedir_len = strlen(save_path); in PS_OPEN_FUNC()
423 data->basedir = estrndup(save_path, data->basedir_len); in PS_OPEN_FUNC()
428 PS_SET_MOD_DATA(data); in PS_OPEN_FUNC()
448 ps_files_close(data); in PS_CLOSE_FUNC()
450 if (data->lastkey) { in PS_CLOSE_FUNC()
451 efree(data->lastkey); in PS_CLOSE_FUNC()
452 data->lastkey = NULL; in PS_CLOSE_FUNC()
455 efree(data->basedir); in PS_CLOSE_FUNC()
456 efree(data); in PS_CLOSE_FUNC()
479 ps_files_open(data, ZSTR_VAL(key)); in PS_READ_FUNC()
480 if (data->fd < 0) { in PS_READ_FUNC()
484 if (zend_fstat(data->fd, &sbuf)) { in PS_READ_FUNC()
488 data->st_size = sbuf.st_size; in PS_READ_FUNC()
498 n = pread(data->fd, ZSTR_VAL(*val), ZSTR_LEN(*val), 0); in PS_READ_FUNC()
500 lseek(data->fd, 0, SEEK_SET); in PS_READ_FUNC()
508 read_in = _read(data->fd, buf, to_read); in PS_READ_FUNC()
518 n = read(data->fd, ZSTR_VAL(*val), ZSTR_LEN(*val)); in PS_READ_FUNC()
550 return ps_files_write(data, key, val); in PS_WRITE_FUNC()
574 if (!ps_files_path_create(buf, sizeof(buf), data, ZSTR_VAL(key))) { in PS_UPDATE_TIMESTAMP_FUNC()
582 return ps_files_write(data, key, val); in PS_UPDATE_TIMESTAMP_FUNC()
604 if (!ps_files_path_create(buf, sizeof(buf), data, ZSTR_VAL(key))) { in PS_DESTROY_FUNC()
608 if (data->fd != -1) { in PS_DESTROY_FUNC()
609 ps_files_close(data); in PS_DESTROY_FUNC()
643 if (data->dirdepth == 0) { in PS_GC_FUNC()
644 *nrdels = ps_files_cleanup_dir(data->basedir, maxlifetime); in PS_GC_FUNC()
673 sid = php_session_create_id((void**)&data); in PS_CREATE_SID_FUNC()
683 if (data && ps_files_key_exists(data, ZSTR_VAL(sid)) == SUCCESS) { in PS_CREATE_SID_FUNC()
711 return ps_files_key_exists(data, ZSTR_VAL(key)); in PS_VALIDATE_SID_FUNC()