diff options
Diffstat (limited to 'ext/xml/xml.c')
| -rw-r--r-- | ext/xml/xml.c | 69 | 
1 files changed, 50 insertions, 19 deletions
| diff --git a/ext/xml/xml.c b/ext/xml/xml.c index acfe5ccb05..66ea4a043d 100644 --- a/ext/xml/xml.c +++ b/ext/xml/xml.c @@ -92,27 +92,44 @@ DLEXPORT php3_module_entry *get_module() { return &xml_module_entry; };  #if PHP_API_VERSION >= 19990421  #define php3tls_pval_destructor(a) zval_dtor(a)  #endif                                                                                                                                               -static pval *php3i_long_pval(long value) +    /* {{{ php3i_long_pval() */ + +PHPAPI pval *php3i_long_pval(long value) +{ +	pval *ret = emalloc(sizeof(pval)); + +	ret->type = IS_LONG; +	ret->value.lval = value; +	return ret; +} + +/* }}} */ +    /* {{{ php3i_double_pval() */ + +PHPAPI pval *php3i_double_pval(double value)  { -    pval *ret = emalloc(sizeof(pval)); -  -    ret->type = IS_LONG; -    ret->value.lval = value; -	INIT_PZVAL(ret); -    return ret; +	pval *ret = emalloc(sizeof(pval)); + +	ret->type = IS_DOUBLE; +	ret->value.dval = value; +	return ret;  } -static pval *php3i_string_pval(const char *str) +/* }}} */ +    /* {{{ php3i_string_pval() */ + +PHPAPI pval *php3i_string_pval(const char *str)  { -    pval *ret = emalloc(sizeof(pval)); -    int len = strlen(str); -  -    ret->type = IS_STRING; -    ret->value.str.len = len; -	INIT_PZVAL(ret); -    ret->value.str.val = estrndup(str, len); -    return ret; -}  +	pval *ret = emalloc(sizeof(pval)); +	int len = strlen(str); + +	ret->type = IS_STRING; +	ret->value.str.len = len; +	ret->value.str.val = estrndup(str, len); +	return ret; +} + +/* }}} */  /* end of UGLY HACK!!! */ @@ -618,7 +635,21 @@ static int php3i_xmlcharlen(const XML_Char *s)  }  /* }}} */ -/* {{{ php3i_add_to_info */ +    /* {{{ php3i_pval_strdup() */ + +PHPAPI char *php3i_pval_strdup(pval *val) +{ +	if (val->type == IS_STRING) { +		char *buf = emalloc(val->value.str.len + 1); +		memcpy(buf, val->value.str.val, val->value.str.len); +		buf[val->value.str.len] = '\0'; +		return buf; +	} +	return NULL; +} + +/* }}} */ +    /* {{{ php3i_add_to_info */  static void php3i_add_to_info(xml_parser *parser,char *name)  {  	pval **element, *values; @@ -645,7 +676,7 @@ static void php3i_add_to_info(xml_parser *parser,char *name)  }  /* }}} */ -/* {{{ php3i_xml_startElementHandler() */ +    /* {{{ php3i_xml_startElementHandler() */  void php3i_xml_startElementHandler(void *userData, const char *name,  								   const char **attributes) | 
