iliaa Sat Oct 7 18:45:44 2006 UTC
Modified files:
/php-src/ext/shmop shmop.c
/php-src/ext/shmop/tests 001.phpt
Log:
Initial Unicode support
http://cvs.php.net/viewvc.cgi/php-src/ext/shmop/shmop.c?r1=1.33&r2=1.34&diff_format=u
Index: php-src/ext/shmop/shmop.c
diff -u php-src/ext/shmop/shmop.c:1.33 php-src/ext/shmop/shmop.c:1.34
--- php-src/ext/shmop/shmop.c:1.33 Sun Jan 1 13:09:53 2006
+++ php-src/ext/shmop/shmop.c Sat Oct 7 18:45:43 2006
@@ -16,7 +16,7 @@
| Ilia Alshanetsky <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
-/* $Id: shmop.c,v 1.33 2006/01/01 13:09:53 sniper Exp $ */
+/* $Id: shmop.c,v 1.34 2006/10/07 18:45:43 iliaa Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -109,7 +109,7 @@
}
/* }}} */
-/* {{{ proto int shmop_open (int key, string flags, int mode, int size)
+/* {{{ proto int shmop_open (int key, string flags, int mode, int size) U
gets and attaches a shared memory segment */
PHP_FUNCTION(shmop_open)
{
@@ -119,12 +119,24 @@
int rsid;
char *flags;
int flags_len;
+ zend_uchar flag_type;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lsll", &key,
&flags, &flags_len, &mode, &size) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ltll", &key,
&flags, &flags_len, &flag_type, &mode, &size) == FAILURE) {
WRONG_PARAM_COUNT;
}
+ if (flag_type == IS_UNICODE) {
+ flags = zend_unicode_to_ascii((UChar*)flags, flags_len);
+ if (!flags) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Binary or
ASCII-Unicode string expected, non-ASCII-Unicode string received");
+ RETURN_FALSE;
+ }
+ }
+
if (flags_len != 1) {
+ if (flag_type == IS_UNICODE) {
+ efree(flags);
+ }
php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s is not a valid
flag", flags);
RETURN_FALSE;
}
@@ -179,14 +191,20 @@
shmop->size = shm.shm_segsz;
rsid = zend_list_insert(shmop, shm_type);
+ if (flag_type == IS_UNICODE) {
+ efree(flags);
+ }
RETURN_LONG(rsid);
err:
+ if (flag_type == IS_UNICODE) {
+ efree(flags);
+ }
efree(shmop);
RETURN_FALSE;
}
/* }}} */
-/* {{{ proto string shmop_read (int shmid, int start, int count)
+/* {{{ proto string shmop_read (int shmid, int start, int count) U
reads from a shm segment */
PHP_FUNCTION(shmop_read)
{
@@ -229,7 +247,7 @@
}
/* }}} */
-/* {{{ proto void shmop_close (int shmid)
+/* {{{ proto void shmop_close (int shmid) U
closes a shared memory segment */
PHP_FUNCTION(shmop_close)
{
@@ -252,7 +270,7 @@
}
/* }}} */
-/* {{{ proto int shmop_size (int shmid)
+/* {{{ proto int shmop_size (int shmid) U
returns the shm size */
PHP_FUNCTION(shmop_size)
{
@@ -275,18 +293,18 @@
}
/* }}} */
-/* {{{ proto int shmop_write (int shmid, string data, int offset)
+/* {{{ proto int shmop_write (int shmid, string data, int offset) U
writes to a shared memory segment */
PHP_FUNCTION(shmop_write)
{
struct php_shmop *shmop;
int type;
int writesize;
- long shmid, offset;
+ long shmid, offset=0;
char *data;
int data_len;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lsl", &shmid,
&data, &data_len, &offset) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lS|l", &shmid,
&data, &data_len, &offset) == FAILURE) {
WRONG_PARAM_COUNT;
}
@@ -314,7 +332,7 @@
}
/* }}} */
-/* {{{ proto bool shmop_delete (int shmid)
+/* {{{ proto bool shmop_delete (int shmid) U
mark segment for deletion */
PHP_FUNCTION(shmop_delete)
{
http://cvs.php.net/viewvc.cgi/php-src/ext/shmop/tests/001.phpt?r1=1.2&r2=1.3&diff_format=u
Index: php-src/ext/shmop/tests/001.phpt
diff -u php-src/ext/shmop/tests/001.phpt:1.2
php-src/ext/shmop/tests/001.phpt:1.3
--- php-src/ext/shmop/tests/001.phpt:1.2 Thu Dec 16 12:34:31 2004
+++ php-src/ext/shmop/tests/001.phpt Sat Oct 7 18:45:44 2006
@@ -9,8 +9,8 @@
--FILE--
<?php
$hex_shm_id = 0xff3;
- $write_d1 = "test #1 of the shmop() extension";
- $write_d2 = "test #2 append data to shared memory segment";
+ $write_d1 = b"test #1 of the shmop() extension";
+ $write_d2 = b"test #2 append data to shared memory segment";
echo "shm open for create: ";
$shm_id = shmop_open($hex_shm_id, "n", 0644, 1024);
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php