var_args issue doesn't have much to do with the purpose of the patch. We were perhaps just curious about the usage of va_start() and va_end(). And that warning reducer was later added by Marcus, so the first version should look nice. What about it?
Moriyoshi Andi Gutmans <[EMAIL PROTECTED]> wrote: > I haven't followed the thread. What is the problem with the var_args()? > Also, please don't commit the second part of the patch. The warning is due > to the compiler not understanding the code well enough. Functionality wise > there's no reason to NULL that variable. Live with the warning or upgrade > to a better compiler. > > Andi > > At 07:25 PM 11/8/2002 +0100, Derick Rethans wrote: > >On Fri, 8 Nov 2002, Marcus Börger wrote: > > > > > Moriyoshi could you make a *.phpt file from the bug? > > > > > > Attached is a new diff tested already. It also fixes a compiler warning. > > > Since i do not have Zend karma someone with karma should commit it > > > or give me karma. > > > >I can commit this, after you fix the whitespace :) > > > >Derick > > > > > cvs -z3 -q diff zend_hash.c (in directory S:\php4-HEAD\Zend\) > > > Index: zend_hash.c > > > =================================================================== > > > RCS file: /repository/ZendEngine2/zend_hash.c,v > > > retrieving revision 1.93 > > > diff -u -r1.93 zend_hash.c > > > --- zend_hash.c 5 Nov 2002 18:22:02 -0000 1.93 > > > +++ zend_hash.c 8 Nov 2002 17:25:59 -0000 > > > @@ -722,9 +722,9 @@ > > > > > > HASH_PROTECT_RECURSION(ht); > > > > > > - va_start(args, num_args); > > > p = ht->pListHead; > > > while (p != NULL) { > > > + va_start(args, num_args); > > > hash_key.arKey = p->arKey; > > > hash_key.nKeyLength = p->nKeyLength; > > > hash_key.h = p->h; > > > @@ -733,8 +733,8 @@ > > > } else { > > > p = p->pListNext; > > > } > > > + va_end(args); > > > } > > > - va_end(args); > > > > > > HASH_UNPROTECT_RECURSION(ht); > > > } > > > @@ -1163,7 +1163,7 @@ > > > > > > ZEND_API int zend_hash_compare(HashTable *ht1, HashTable *ht2, > > > compare_func_t compar, zend_bool ordered TSRMLS_DC) > > > { > > > - Bucket *p1, *p2; > > > + Bucket *p1, *p2 = NULL /* fixes warning */; > > > int result; > > > void *pData2; > > > > > > > > > > > > At 16:45 08.11.2002, Moriyoshi Koizumi wrote: > > > >Yep, the spec goes right. a corresponding va_end() dtor should be applied > > > >to ap once ap has been initialized by a va_start(). > > > >IMO no va_end() is needed without a preceding va_start(), and it doesn't > > > >matter if ap is used between va_start() and va_end(). > > > > > > > >BTW, could anyone commit this patch if there seems no problem? > > > > > > > >Moriyoshi > > > > > > > >[EMAIL PROTECTED] (Marcus Börger) wrote: > > > > > > > > > Some comments on ISO9899 standard > > > > > 7.15.1.3-2 Read between the lines: without va_end the behaviour is > > > > undefined. > > > > > What ever that means i guess you have to call va_end and that > > requires > > > > > va_start. > > > > > > > > > > 7.15.1.4-3 Says do not call va_start twice without va_end. > > > > > > > > > > marcus > > > > > > > > > > > > > > > ISO/IEC 9899:1999 (E) ©ISO/IEC > > > > > > > > > > 7.15.1.3 The va_end macro > > > > > Synopsis > > > > > 1 #include <stdarg.h> > > > > > void va_end(va_list ap); > > > > > Description > > > > > 2 The va_end macro facilitates a normal return from the function whose > > > > variable > > > > > argument list was referred to by the expansion of va_start, or the > > > > function > > > > > containing > > > > > the expansion of va_copy, that initialized the va_list ap. The va_end > > > > macro may > > > > > modify ap so that it is no longer usable (without an intervening > > > > invocation > > > > > of va_start > > > > > or va_copy). If there is no corresponding invocation of the > > va_start or > > > > va_copy > > > > > macro, or if the va_end macro is not invoked before the return, the > > > > behavior is > > > > > undefined. > > > > > Returns > > > > > 3 The va_end macro returns no value. > > > > > > > > > > 7.15.1.4 The va_start macro > > > > > Synopsis > > > > > 1 #include <stdarg.h> > > > > > void va_start(va_list ap, parmN); > > > > > Description > > > > > 2 The va_start macro shall be invoked before any access to the unnamed > > > > > arguments. > > > > > 3 The va_start macro initializes ap for subsequent use by va_arg and > > > > va_end. > > > > > va_start (or va_copy) shall not be invoked again for the same ap > > without an > > > > > intervening invocation of va_end for the same ap. > > > > > (...) > > > > > > > > > > > > > > > At 10:47 08.11.2002, Moriyoshi Koizumi wrote: > > > > > >See http://www.opengroup.org/onlinepubs/007908799/xsh/stdarg.h.html > > > > > >This appears to imply that va_start() can be used more than twice. > > > > > > > > > > > >And I don't think va_start() always has to be invoked. > > > > > > > > > > > >Moriyoshi > > > > > > > > > > > >[EMAIL PROTECTED] (Marcus Börger) wrote: > > > > > > > > > > > > > I am not sure if va_start can be called twice in a row (rekursive). > > > > > > > Manual does not say anything about that. > > > > > > > > > > > > > > How about: > > > > > > > > > > > > > > cvs -z3 -q diff zend_hash.c (in directory S:\php4-HEAD\Zend) > > > > > > > Index: zend_hash.c > > > > > > > =================================================================== > > > > > > > RCS file: /repository/ZendEngine2/zend_hash.c,v > > > > > > > retrieving revision 1.93 > > > > > > > diff -u -r1.93 zend_hash.c > > > > > > > --- zend_hash.c 5 Nov 2002 18:22:02 -0000 1.93 > > > > > > > +++ zend_hash.c 8 Nov 2002 09:32:48 -0000 > > > > > > > @@ -722,9 +722,13 @@ > > > > > > > > > > > > > > HASH_PROTECT_RECURSION(ht); > > > > > > > > > > > > > > - va_start(args, num_args); > > > > > > > p = ht->pListHead; > > > > > > > + if (p == NULL) { > > > > > > > + va_start(args, num_args); > > > > > > > + va_end(args); > > > > > > > + } > > > > > > > while (p != NULL) { > > > > > > > + va_start(args, num_args); > > > > > > > hash_key.arKey = p->arKey; > > > > > > > hash_key.nKeyLength = p->nKeyLength; > > > > > > > hash_key.h = p->h; > > > > > > > @@ -733,8 +737,8 @@ > > > > > > > } else { > > > > > > > p = p->pListNext; > > > > > > > } > > > > > > > + va_end(args); > > > > > > > } > > > > > > > - va_end(args); > > > > > > > > > > > > > > HASH_UNPROTECT_RECURSION(ht); > > > > > > > } > > > > > > > > > > > > > > > > > > > > > marcus > > > > > > > > > > > > > > At 09:52 08.11.2002, Moriyoshi Koizumi wrote: > > > > > > > >Hi, > > > > > > > > > > > > > > > >The attached patch is a probable fix for bug #19566. I guess > > the bug > > > > > > > >is that va_list is not properly initialized before each callback > > > > function > > > > > > > >call. I've tested it in PPC linux, and it works fine. > > > > > > > > > > > > > > > >Regards, > > > > > > > >Moriyoshi > > > > > > > > > > > > > > > > > > > > > > > >-- > > > > > > > >PHP Development Mailing List <http://www.php.net/> > > > > > > > >To unsubscribe, visit: http://www.php.net/unsub.php > > > > > > >-- > > > >--------------------------------------------------------------------------- > > Derick Rethans http://derickrethans.nl/ > > JDI Media Solutions > >--------------[ if you hold a unix shell to your ear, do you hear the c? ]- > > > > > >-- > >PHP Development Mailing List <http://www.php.net/> > >To unsubscribe, visit: http://www.php.net/unsub.php > > > -- > PHP Development Mailing List <http://www.php.net/> > To unsubscribe, visit: http://www.php.net/unsub.php > > -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, visit: http://www.php.net/unsub.php