On Wed, Jan 20, 2016 at 10:55 PM, Yasuo Ohgaki <yohg...@ohgaki.net> wrote:
> Hi ZendEngine developers, > > I'm not sure if the wiki page is maintained, but I noticed few errors. > > https://wiki.php.net/phpng-upgrading#strings > has following example. > > - ZVAL_STRING(zv, str, 1); > + ZVAL_STRING(zv, str); > > - ZVAL_STRINGL(zv, str, len, 1); > + ZVAL_STRINGL(zv, str, len); > > - ZVAL_STRING(zv, str, 0); > + ZVAL_STRING(zv, str); > + efree(str); > > - ZVAL_STRINGL(zv, str, len, 0); > + ZVAL_STRINGL(zv, str, len); > + efree(str); > > Since PHP5 has following definition for ZVAL_STRING*() > > #define ZVAL_STRING(z, s, duplicate) do { \ > const char *__s=(s); \ > zval *__z = (z); \ > Z_STRLEN_P(__z) = strlen(__s); \ > Z_STRVAL_P(__z) = (duplicate?estrndup(__s, > Z_STRLEN_P(__z)):(char*)__s);\ > Z_TYPE_P(__z) = IS_STRING; \ > } while (0) > > the example's 0 and 1 are flipped, efree() locations are wrong. > These examples are correct. In PHP 7 ZVAL_STRING always duplicates, which is what the 1 parameter used to signify. > In https://wiki.php.net/phpng-upgrading#zend_string_api , > it says > > zend_string_init(char *val, int len, int persistent) > > Current definition is > > zend_string_init(char *val, size_t len, int persistent) > > Should I update the doc or is the doc is maintained > elsewhere? > I've fixed this. But yes, you should update the doc, it's not maintained elsewhere. Thanks, Nikita