38static inline sysvshm_shm *sysvshm_from_obj(
zend_object *obj) {
39 return (sysvshm_shm *)((
char *)(obj) -
XtOffsetOf(sysvshm_shm, std));
42#define Z_SYSVSHM_P(zv) sysvshm_from_obj(Z_OBJ_P(zv))
45 sysvshm_shm *intern = zend_object_alloc(
sizeof(sysvshm_shm), class_type);
60 sysvshm_shm *sysvshm = sysvshm_from_obj(
object);
63 shmdt((
void *) sysvshm->ptr);
84#ifdef COMPILE_DL_SYSVSHM
91sysvshm_module php_sysvshm;
95static int php_remove_shm_data(sysvshm_chunk_head *
ptr,
zend_long shm_varpos);
100 sysvshm_ce = register_class_SysvSharedMemory();
106 sysvshm_object_handlers.
free_obj = sysvshm_free_obj;
112 php_sysvshm.init_mem=10000;
130 sysvshm_shm *shm_list_ptr;
132 sysvshm_chunk_head *chunk_ptr;
133 zend_long shm_key, shm_id, shm_size, shm_flag = 0666;
134 bool shm_size_is_null = 1;
140 if (shm_size_is_null) {
141 shm_size = php_sysvshm.init_mem;
150 if ((shm_id = shmget(shm_key, 0, 0)) < 0) {
151 if (shm_size < (
zend_long)
sizeof(sysvshm_chunk_head)) {
155 if ((shm_id = shmget(shm_key, shm_size, shm_flag | IPC_CREAT | IPC_EXCL)) < 0) {
161 if ((shm_ptr = shmat(shm_id,
NULL, 0)) == (
void *) -1) {
167 chunk_ptr = (sysvshm_chunk_head *) shm_ptr;
168 if (
strcmp((
char*) &(chunk_ptr->magic),
"PHP_SM") != 0) {
169 strcpy((
char*) &(chunk_ptr->magic),
"PHP_SM");
170 chunk_ptr->start =
sizeof(sysvshm_chunk_head);
171 chunk_ptr->end = chunk_ptr->start;
172 chunk_ptr->total = shm_size;
173 chunk_ptr->free = shm_size-chunk_ptr->end;
180 shm_list_ptr->key = shm_key;
181 shm_list_ptr->id = shm_id;
182 shm_list_ptr->ptr = chunk_ptr;
190 sysvshm_shm *shm_list_ptr;
196 shm_list_ptr = Z_SYSVSHM_P(shm_id);
197 if (!shm_list_ptr->ptr) {
202 shmdt((
void *) shm_list_ptr->ptr);
203 shm_list_ptr->ptr =
NULL;
213 sysvshm_shm *shm_list_ptr;
219 shm_list_ptr = Z_SYSVSHM_P(shm_id);
220 if (!shm_list_ptr->ptr) {
225 if (shmctl(shm_list_ptr->id, IPC_RMID,
NULL) < 0) {
237 zval *shm_id, *arg_var;
240 sysvshm_shm *shm_list_ptr;
248 shm_list_ptr = Z_SYSVSHM_P(shm_id);
249 if (!shm_list_ptr->ptr) {
260 smart_str_free(&shm_var);
269 smart_str_free(&shm_var);
284 sysvshm_shm *shm_list_ptr;
287 sysvshm_chunk *shm_var;
294 shm_list_ptr = Z_SYSVSHM_P(shm_id);
295 if (!shm_list_ptr->ptr) {
302 shm_varpos = php_check_shm_data(shm_list_ptr->ptr, shm_key);
304 if (shm_varpos < 0) {
308 shm_var = (sysvshm_chunk*) ((
char *)shm_list_ptr->ptr + shm_varpos);
309 shm_data = &shm_var->mem;
325 sysvshm_shm *shm_list_ptr;
331 shm_list_ptr = Z_SYSVSHM_P(shm_id);
332 if (!shm_list_ptr->ptr) {
337 RETURN_BOOL(php_check_shm_data(shm_list_ptr->ptr, shm_key) >= 0);
346 sysvshm_shm *shm_list_ptr;
352 shm_list_ptr = Z_SYSVSHM_P(shm_id);
353 if (!shm_list_ptr->ptr) {
358 shm_varpos = php_check_shm_data(shm_list_ptr->ptr, shm_key);
360 if (shm_varpos < 0) {
364 php_remove_shm_data((shm_list_ptr->ptr), shm_varpos);
373 sysvshm_chunk *shm_var;
379 if ((shm_varpos = php_check_shm_data(
ptr,
key)) > 0) {
380 php_remove_shm_data(
ptr, shm_varpos);
383 if (
ptr->free < total_size) {
387 shm_var = (sysvshm_chunk *) ((
char *)
ptr +
ptr->end);
389 shm_var->length =
len;
390 shm_var->next = total_size;
392 ptr->end += total_size;
393 ptr->free -= total_size;
402 sysvshm_chunk *shm_var;
412 shm_var = (sysvshm_chunk*) ((
char *)
ptr +
pos);
413 if (shm_var->key ==
key) {
416 pos += shm_var->next;
427static int php_remove_shm_data(sysvshm_chunk_head *
ptr,
zend_long shm_varpos)
429 sysvshm_chunk *chunk_ptr, *next_chunk_ptr;
434 chunk_ptr = (sysvshm_chunk *) ((
char *)
ptr + shm_varpos);
435 next_chunk_ptr = (sysvshm_chunk *) ((
char *)
ptr + shm_varpos + chunk_ptr->next);
437 memcpy_len =
ptr->end-shm_varpos - chunk_ptr->next;
438 ptr->free += chunk_ptr->next;
439 ptr->end -= chunk_ptr->next;
440 if (memcpy_len > 0) {
441 memmove(chunk_ptr, next_chunk_ptr, memcpy_len);
PHPAPI ZEND_COLD void php_error_docref(const char *docref, int type, const char *format,...)
php_info_print_table_start()
php_info_print_table_row(2, "PDO Driver for Firebird", "enabled")
php_info_print_table_end()
#define PHP_MINIT_FUNCTION
#define PHP_MINFO_FUNCTION
unsigned const char * pos
PHPAPI int cfg_get_long(const char *varname, zend_long *result)
unsigned char key[REFLECTION_KEY_LEN]
#define PHP_VAR_UNSERIALIZE_DESTROY(d)
struct php_unserialize_data * php_unserialize_data_t
struct php_serialize_data * php_serialize_data_t
#define PHP_VAR_UNSERIALIZE_INIT(d)
PHPAPI int php_var_unserialize(zval *rval, const unsigned char **p, const unsigned char *max, php_unserialize_data_t *var_hash)
#define PHP_VAR_SERIALIZE_INIT(d)
PHPAPI void php_var_serialize(smart_str *buf, zval *struc, php_serialize_data_t *data)
#define PHP_VAR_SERIALIZE_DESTROY(d)
php_unserialize_data_t var_hash
zend_object *(* create_object)(zend_class_entry *class_type)
const zend_object_handlers * default_object_handlers
zend_object_compare_t compare
zend_object_free_obj_t free_obj
zend_object_get_constructor_t get_constructor
zend_object_clone_obj_t clone_obj
shm_put_var(SysvSharedMemory $shm, int $key, mixed $value)
shm_remove(SysvSharedMemory $shm)
shm_get_var(SysvSharedMemory $shm, int $key)
shm_remove_var(SysvSharedMemory $shm, int $key)
shm_has_var(SysvSharedMemory $shm, int $key)
shm_attach(int $key, ?int $size=null, int $permissions=0666)
shm_detach(SysvSharedMemory $shm)
ZEND_API ZEND_COLD void zend_throw_error(zend_class_entry *exception_ce, const char *format,...)
ZEND_API zend_result object_init_ex(zval *arg, zend_class_entry *class_type)
ZEND_API zend_result zend_parse_parameters(uint32_t num_args, const char *type_spec,...)
ZEND_API void object_properties_init(zend_object *object, zend_class_entry *class_type)
ZEND_API ZEND_COLD void zend_argument_value_error(uint32_t arg_num, const char *format,...)
#define ZEND_GET_MODULE(name)
strcmp(string $string1, string $string2)
union _zend_function zend_function
#define STANDARD_MODULE_HEADER
struct _zend_module_entry zend_module_entry
#define STANDARD_MODULE_PROPERTIES
ZEND_API int zend_objects_not_comparable(zval *o1, zval *o2)
ZEND_API const zend_object_handlers std_object_handlers
ZEND_API void ZEND_FASTCALL zend_object_std_init(zend_object *object, zend_class_entry *ce)
ZEND_API void zend_object_std_dtor(zend_object *object)
#define XtOffsetOf(s_type, field)
#define UNEXPECTED(condition)
struct _zend_class_entry zend_class_entry
struct _zend_object zend_object
struct _zend_object_handlers zend_object_handlers