ZEND_GET_MODULE(sysvmsg)
#endif
-static void sysvmsg_release(zend_rsrc_list_entry *rsrc TSRMLS_DC)
+static void sysvmsg_release(zend_resource *rsrc TSRMLS_DC)
{
- sysvmsg_queue_t * mq = (sysvmsg_queue_t *) rsrc->ptr;
+ sysvmsg_queue_t *mq = (sysvmsg_queue_t *) rsrc->ptr;
efree(mq);
}
return;
}
- ZEND_FETCH_RESOURCE(mq, sysvmsg_queue_t *, &queue, -1, "sysvmsg queue", le_sysvmsg);
+ ZEND_FETCH_RESOURCE(mq, sysvmsg_queue_t *, queue, -1, "sysvmsg queue", le_sysvmsg);
if (msgctl(mq->id, IPC_STAT, &stat) == 0) {
- zval **item;
+ zval *item;
/* now pull out members of data and set them in the stat buffer */
- if (zend_hash_find(Z_ARRVAL_P(data), "msg_perm.uid", sizeof("msg_perm.uid"), (void **) &item) == SUCCESS) {
+ if ((item = zend_hash_str_find(Z_ARRVAL_P(data), "msg_perm.uid", sizeof("msg_perm.uid") - 1)) != NULL) {
convert_to_long_ex(item);
- stat.msg_perm.uid = Z_LVAL_PP(item);
+ stat.msg_perm.uid = Z_LVAL_P(item);
}
- if (zend_hash_find(Z_ARRVAL_P(data), "msg_perm.gid", sizeof("msg_perm.gid"), (void **) &item) == SUCCESS) {
+ if ((item = zend_hash_str_find(Z_ARRVAL_P(data), "msg_perm.gid", sizeof("msg_perm.gid") - 1)) != NULL) {
convert_to_long_ex(item);
- stat.msg_perm.gid = Z_LVAL_PP(item);
+ stat.msg_perm.gid = Z_LVAL_P(item);
}
- if (zend_hash_find(Z_ARRVAL_P(data), "msg_perm.mode", sizeof("msg_perm.mode"), (void **) &item) == SUCCESS) {
+ if ((item = zend_hash_str_find(Z_ARRVAL_P(data), "msg_perm.mode", sizeof("msg_perm.mode") - 1)) != NULL) {
convert_to_long_ex(item);
- stat.msg_perm.mode = Z_LVAL_PP(item);
+ stat.msg_perm.mode = Z_LVAL_P(item);
}
- if (zend_hash_find(Z_ARRVAL_P(data), "msg_qbytes", sizeof("msg_qbytes"), (void **) &item) == SUCCESS) {
+ if ((item = zend_hash_str_find(Z_ARRVAL_P(data), "msg_qbytes", sizeof("msg_qbytes") - 1)) != NULL) {
convert_to_long_ex(item);
- stat.msg_qbytes = Z_LVAL_PP(item);
+ stat.msg_qbytes = Z_LVAL_P(item);
}
if (msgctl(mq->id, IPC_SET, &stat) == 0) {
RETVAL_TRUE;
return;
}
- ZEND_FETCH_RESOURCE(mq, sysvmsg_queue_t *, &queue, -1, "sysvmsg queue", le_sysvmsg);
+ ZEND_FETCH_RESOURCE(mq, sysvmsg_queue_t *, queue, -1, "sysvmsg queue", le_sysvmsg);
if (msgctl(mq->id, IPC_STAT, &stat) == 0) {
array_init(return_value);
}
/* }}} */
-
/* {{{ proto bool msg_queue_exists(int key)
Check whether a message queue exists */
PHP_FUNCTION(msg_queue_exists)
}
/* }}} */
-
/* {{{ proto resource msg_get_queue(int key [, int perms])
Attach to a message queue */
PHP_FUNCTION(msg_get_queue)
RETURN_FALSE;
}
}
- RETVAL_RESOURCE(zend_list_insert(mq, le_sysvmsg TSRMLS_CC));
+ RETVAL_ZVAL(zend_list_insert(mq, le_sysvmsg TSRMLS_CC), 0, 0);
}
/* }}} */
return;
}
- ZEND_FETCH_RESOURCE(mq, sysvmsg_queue_t *, &queue, -1, "sysvmsg queue", le_sysvmsg);
+ ZEND_FETCH_RESOURCE(mq, sysvmsg_queue_t *, queue, -1, "sysvmsg queue", le_sysvmsg);
if (msgctl(mq->id, IPC_RMID, NULL) == 0) {
RETVAL_TRUE;
}
}
- ZEND_FETCH_RESOURCE(mq, sysvmsg_queue_t *, &queue, -1, "sysvmsg queue", le_sysvmsg);
+ ZEND_FETCH_RESOURCE(mq, sysvmsg_queue_t *, queue, -1, "sysvmsg queue", le_sysvmsg);
messagebuffer = (struct php_msgbuf *) safe_emalloc(maxsize, 1, sizeof(struct php_msgbuf));
result = msgrcv(mq->id, messagebuffer, maxsize, desiredmsgtype, realflags);
+ ZVAL_DEREF(out_msgtype);
+ ZVAL_DEREF(out_message);
zval_dtor(out_msgtype);
zval_dtor(out_message);
ZVAL_LONG(out_msgtype, 0);
ZVAL_FALSE(out_message);
if (zerrcode) {
+ ZVAL_DEREF(zerrcode);
zval_dtor(zerrcode);
ZVAL_LONG(zerrcode, 0);
}
RETVAL_TRUE;
if (do_unserialize) {
php_unserialize_data_t var_hash;
- zval *tmp = NULL;
+ zval tmp;
const unsigned char *p = (const unsigned char *) messagebuffer->mtext;
- MAKE_STD_ZVAL(tmp);
PHP_VAR_UNSERIALIZE_INIT(var_hash);
if (!php_var_unserialize(&tmp, &p, p + result, &var_hash TSRMLS_CC)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "message corrupted");
RETVAL_FALSE;
} else {
- REPLACE_ZVAL_VALUE(&out_message, tmp, 0);
+ ZVAL_COPY_VALUE(out_message, &tmp);
}
- FREE_ZVAL(tmp);
PHP_VAR_UNSERIALIZE_DESTROY(var_hash);
} else {
- ZVAL_STRINGL(out_message, messagebuffer->mtext, result, 1);
+ ZVAL_STRINGL(out_message, messagebuffer->mtext, result);
}
} else if (zerrcode) {
ZVAL_LONG(zerrcode, errno);
return;
}
- ZEND_FETCH_RESOURCE(mq, sysvmsg_queue_t*, &queue, -1, "sysvmsg queue", le_sysvmsg);
+ ZEND_FETCH_RESOURCE(mq, sysvmsg_queue_t*, queue, -1, "sysvmsg queue", le_sysvmsg);
if (do_serialize) {
smart_str msg_var = {0};
php_serialize_data_t var_hash;
PHP_VAR_SERIALIZE_INIT(var_hash);
- php_var_serialize(&msg_var, &message, &var_hash TSRMLS_CC);
+ php_var_serialize(&msg_var, message, &var_hash TSRMLS_CC);
PHP_VAR_SERIALIZE_DESTROY(var_hash);
/* NB: php_msgbuf is 1 char bigger than a long, so there is no need to
* allocate the extra byte. */
- messagebuffer = safe_emalloc(msg_var.len, 1, sizeof(struct php_msgbuf));
- memcpy(messagebuffer->mtext, msg_var.c, msg_var.len + 1);
- message_len = msg_var.len;
+ messagebuffer = safe_emalloc(msg_var.s->len, 1, sizeof(struct php_msgbuf));
+ memcpy(messagebuffer->mtext, msg_var.s->val, msg_var.s->len + 1);
+ message_len = msg_var.s->len;
smart_str_free(&msg_var);
} else {
char *p;
break;
case IS_LONG:
- case IS_BOOL:
message_len = spprintf(&p, 0, "%ld", Z_LVAL_P(message));
break;
-
+ case IS_FALSE:
+ message_len = spprintf(&p, 0, "0");
+ break;
+ case IS_TRUE:
+ message_len = spprintf(&p, 0, "1");
+ break;
case IS_DOUBLE:
message_len = spprintf(&p, 0, "%F", Z_DVAL_P(message));
break;
-
default:
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Message parameter must be either a string or a number.");
RETURN_FALSE;
if (result == -1) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "msgsnd failed: %s", strerror(errno));
if (zerror) {
+ ZVAL_DEREF(zerror);
ZVAL_LONG(zerror, errno);
}
} else {
#undef shm_ptr /* undefine AIX-specific macro */
-#define SHM_FETCH_RESOURCE(shm_ptr, z_ptr) ZEND_FETCH_RESOURCE(shm_ptr, sysvshm_shm *, &z_ptr, -1, PHP_SHM_RSRC_NAME, php_sysvshm.le_shm)
+#define SHM_FETCH_RESOURCE(shm_ptr, z_ptr) ZEND_FETCH_RESOURCE(shm_ptr, sysvshm_shm *, z_ptr, -1, PHP_SHM_RSRC_NAME, php_sysvshm.le_shm)
THREAD_LS sysvshm_module php_sysvshm;
/* {{{ php_release_sysvshm
*/
-static void php_release_sysvshm(zend_rsrc_list_entry *rsrc TSRMLS_DC)
+static void php_release_sysvshm(zend_resource *rsrc TSRMLS_DC)
{
sysvshm_shm *shm_ptr = (sysvshm_shm *) rsrc->ptr;
shmdt((void *) shm_ptr->ptr);
return;
}
SHM_FETCH_RESOURCE(shm_list_ptr, shm_id);
- RETURN_BOOL(SUCCESS == zend_list_delete(Z_LVAL_P(shm_id)));
+ RETURN_BOOL(SUCCESS == zend_list_delete(Z_RES_P(shm_id)));
}
/* }}} */
/* setup string-variable and serialize */
PHP_VAR_SERIALIZE_INIT(var_hash);
- php_var_serialize(&shm_var, &arg_var, &var_hash TSRMLS_CC);
+ php_var_serialize(&shm_var, arg_var, &var_hash TSRMLS_CC);
PHP_VAR_SERIALIZE_DESTROY(var_hash);
- shm_list_ptr = zend_fetch_resource(&shm_id TSRMLS_CC, -1, PHP_SHM_RSRC_NAME, NULL, 1, php_sysvshm.le_shm);
+ shm_list_ptr = zend_fetch_resource(shm_id TSRMLS_CC, -1, PHP_SHM_RSRC_NAME, NULL, 1, php_sysvshm.le_shm);
if (!shm_list_ptr) {
smart_str_free(&shm_var);
RETURN_FALSE;
}
/* insert serialized variable into shared memory */
- ret = php_put_shm_data(shm_list_ptr->ptr, shm_key, shm_var.c, shm_var.len);
+ ret = php_put_shm_data(shm_list_ptr->ptr, shm_key, shm_var.s? shm_var.s->val : NULL, shm_var.s? shm_var.s->len : 0);
/* free string */
smart_str_free(&shm_var);
shm_data = &shm_var->mem;
PHP_VAR_UNSERIALIZE_INIT(var_hash);
- if (php_var_unserialize(&return_value, (const unsigned char **) &shm_data, (unsigned char *) shm_data + shm_var->length, &var_hash TSRMLS_CC) != 1) {
+ if (php_var_unserialize(return_value, (const unsigned char **) &shm_data, (unsigned char *) shm_data + shm_var->length, &var_hash TSRMLS_CC) != 1) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "variable data in shared memory is corrupted");
RETVAL_FALSE;
}