summaryrefslogtreecommitdiff
path: root/ext/sysvmsg/sysvmsg.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/sysvmsg/sysvmsg.c')
-rw-r--r--ext/sysvmsg/sysvmsg.c86
1 files changed, 43 insertions, 43 deletions
diff --git a/ext/sysvmsg/sysvmsg.c b/ext/sysvmsg/sysvmsg.c
index a57e25e6c3..d158366ea5 100644
--- a/ext/sysvmsg/sysvmsg.c
+++ b/ext/sysvmsg/sysvmsg.c
@@ -1,8 +1,8 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 5 |
+ | PHP Version 7 |
+----------------------------------------------------------------------+
- | Copyright (c) 1997-2013 The PHP Group |
+ | Copyright (c) 1997-2014 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
@@ -27,7 +27,7 @@
#include "ext/standard/info.h"
#include "php_sysvmsg.h"
#include "ext/standard/php_var.h"
-#include "ext/standard/php_smart_str.h"
+#include "zend_smart_str.h"
/* In order to detect MSG_EXCEPT use at run time; we have no way
* of knowing what the bit definitions are, so we can't just define
@@ -119,9 +119,9 @@ zend_module_entry sysvmsg_module_entry = {
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);
}
@@ -164,27 +164,27 @@ PHP_FUNCTION(msg_set_queue)
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;
@@ -207,7 +207,7 @@ PHP_FUNCTION(msg_stat_queue)
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);
@@ -226,12 +226,11 @@ PHP_FUNCTION(msg_stat_queue)
}
/* }}} */
-
/* {{{ proto bool msg_queue_exists(int key)
Check whether a message queue exists */
PHP_FUNCTION(msg_queue_exists)
{
- long key;
+ zend_long key;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &key) == FAILURE) {
return;
@@ -245,13 +244,12 @@ PHP_FUNCTION(msg_queue_exists)
}
/* }}} */
-
/* {{{ proto resource msg_get_queue(int key [, int perms])
Attach to a message queue */
PHP_FUNCTION(msg_get_queue)
{
- long key;
- long perms = 0666;
+ zend_long key;
+ zend_long perms = 0666;
sysvmsg_queue_t *mq;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|l", &key, &perms) == FAILURE) {
@@ -271,7 +269,7 @@ 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);
}
/* }}} */
@@ -286,7 +284,7 @@ PHP_FUNCTION(msg_remove_queue)
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;
@@ -301,8 +299,8 @@ PHP_FUNCTION(msg_remove_queue)
PHP_FUNCTION(msg_receive)
{
zval *out_message, *queue, *out_msgtype, *zerrcode = NULL;
- long desiredmsgtype, maxsize, flags = 0;
- long realflags = 0;
+ zend_long desiredmsgtype, maxsize, flags = 0;
+ zend_long realflags = 0;
zend_bool do_unserialize = 1;
sysvmsg_queue_t *mq = NULL;
struct php_msgbuf *messagebuffer = NULL; /* buffer to transmit */
@@ -310,7 +308,7 @@ PHP_FUNCTION(msg_receive)
RETVAL_FALSE;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlzlz|blz",
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlz/lz/|blz/",
&queue, &desiredmsgtype, &out_msgtype, &maxsize,
&out_message, &do_unserialize, &flags, &zerrcode) == FAILURE) {
return;
@@ -338,7 +336,7 @@ PHP_FUNCTION(msg_receive)
}
}
- 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));
@@ -350,6 +348,7 @@ PHP_FUNCTION(msg_receive)
ZVAL_FALSE(out_message);
if (zerrcode) {
+ ZVAL_DEREF(zerrcode);
zval_dtor(zerrcode);
ZVAL_LONG(zerrcode, 0);
}
@@ -361,21 +360,19 @@ PHP_FUNCTION(msg_receive)
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);
@@ -389,7 +386,7 @@ PHP_FUNCTION(msg_receive)
PHP_FUNCTION(msg_send)
{
zval *message, *queue, *zerror=NULL;
- long msgtype;
+ zend_long msgtype;
zend_bool do_serialize = 1, blocking = 1;
sysvmsg_queue_t * mq = NULL;
struct php_msgbuf * messagebuffer = NULL; /* buffer to transmit */
@@ -398,26 +395,26 @@ PHP_FUNCTION(msg_send)
RETVAL_FALSE;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlz|bbz",
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlz|bbz/",
&queue, &msgtype, &message, &do_serialize, &blocking, &zerror) == FAILURE) {
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;
@@ -428,14 +425,17 @@ PHP_FUNCTION(msg_send)
break;
case IS_LONG:
- case IS_BOOL:
- message_len = spprintf(&p, 0, "%ld", Z_LVAL_P(message));
+ message_len = spprintf(&p, 0, "%pd", 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;