cvs: embed /php-irssi ext-irssi.c

From: Date: Sun, 02 Feb 2003 15:08:53 +0000
Subject: cvs: embed /php-irssi ext-irssi.c
Groups: php.embed.cvs 
Request: Send a blank email to php-embed-cvs+get-18@lists.php.net to get a copy of this message
wez Sun Feb 2 10:08:53 2003 EDT Modified files: /embed/php-irssi ext-irssi.c Log: Fix pointer mess that screwed up args for user-space signal handlers... Index: embed/php-irssi/ext-irssi.c diff -u embed/php-irssi/ext-irssi.c:1.11 embed/php-irssi/ext-irssi.c:1.12 --- embed/php-irssi/ext-irssi.c:1.11 Sun Feb 2 09:22:36 2003 +++ embed/php-irssi/ext-irssi.c Sun Feb 2 10:08:53 2003 @@ -14,7 +14,7 @@ +----------------------------------------------------------------------+ | Author: Wez Furlong <wez@php.net> | +----------------------------------------------------------------------+ - $Id: ext-irssi.c,v 1.11 2003/02/02 14:22:36 wez Exp $ + $Id: ext-irssi.c,v 1.12 2003/02/02 15:08:53 wez Exp $ */ #include "php-irssi.h" #include "php-signals-list.h" /* generated by php during make */ @@ -149,7 +149,7 @@ int sigid = signal_get_emitted_id(); struct sig_record *rec = (struct sig_record*)signal_get_user_data(); struct php_irssi_signal_args *sigargs; - zval **zargs[6]; + zval ***zargs; zval *val, *retval = NULL, *func_name = NULL; int i, call_result; @@ -164,13 +164,17 @@ func_name = rec->handler; + zargs = emalloc(sigargs->argc * sizeof(zval **)); + for (i = 0; i < sigargs->argc; i++) { /* TODO: would be nice to replace this with php_irssi_C_to_PHP(), * but we need to make some assumptions and optimizations here * for the NICK records */ - MAKE_STD_ZVAL(val); - + zargs[i] = emalloc(sizeof(zval *)); + MAKE_STD_ZVAL(*zargs[i]); + val = *zargs[i]; + switch(sigargs->argtypes[i]) { case PIAT_STRING: ZVAL_STRING(val, (char *)args[i], 1); @@ -203,7 +207,6 @@ default: ZVAL_NULL(val); } - zargs[i] = &val; } call_result = call_user_function_ex(EG(function_table), @@ -228,7 +231,9 @@ /* release those zvals */ for (i = 0; i < sigargs->argc; i++) { zval_ptr_dtor(zargs[i]); + efree(zargs[i]); } + efree(zargs); } /* ---------- Global functions */

« previous php.embed.cvs (#18) next »