diff options
author | Uwe Steinmann <steinm@php.net> | 2002-09-30 09:27:56 +0000 |
---|---|---|
committer | Uwe Steinmann <steinm@php.net> | 2002-09-30 09:27:56 +0000 |
commit | 86e3e1ac85617d329f1f8ee040f655cfa87b496f (patch) | |
tree | 8a8fe2a114e9c9a6049e8ccb00bbb06c3ba55b29 /ext/hyperwave | |
parent | d378a2c959eb5f6324e038b5abeb2cd05dc35b93 (diff) | |
download | php-git-86e3e1ac85617d329f1f8ee040f655cfa87b496f.tar.gz |
- make_objrec_from_array() gets a second parameter to handle key/pairs of
the form key=value and key:value.
- Proper treatment of the attribute SQLStmt
Diffstat (limited to 'ext/hyperwave')
-rw-r--r-- | ext/hyperwave/hw.c | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/ext/hyperwave/hw.c b/ext/hyperwave/hw.c index aa04f7aa6d..09a889434b 100644 --- a/ext/hyperwave/hw.c +++ b/ext/hyperwave/hw.c @@ -313,6 +313,7 @@ int make2_return_array_from_objrec(pval **return_value, char *objrec, zval *sarr add_assoc_long(spec_arr, "Group", HW_ATTR_NONE); add_assoc_long(spec_arr, "HtmlAttr", HW_ATTR_NONE); add_assoc_long(spec_arr, "Parent", HW_ATTR_NONE); + add_assoc_long(spec_arr, "SQLStmt", HW_ATTR_NR); } if (array_init(*return_value) == FAILURE) { @@ -549,9 +550,10 @@ int make_return_array_from_objrec(pval **return_value, char *objrec) { #define BUFFERLEN 1024 /* {{{ make_objrec_from_array */ -static char * make_objrec_from_array(HashTable *lht) { +static char * make_objrec_from_array(HashTable *lht, char delim) { int i, count, keytype; - ulong length; + ulong idx; + uint length; char *key, str[BUFFERLEN], *objrec = NULL; zval *keydata, **keydataptr; @@ -560,25 +562,32 @@ static char * make_objrec_from_array(HashTable *lht) { if(0 == (count = zend_hash_num_elements(lht))) return NULL; - + + if(delim == 0) + delim = '='; + zend_hash_internal_pointer_reset(lht); objrec = malloc(1); *objrec = '\0'; for(i=0; i<count; i++) { - keytype = zend_hash_get_current_key(lht, &key, &length, 0); + keytype = zend_hash_get_current_key_ex(lht, &key, &length, &idx, 0, NULL); /* if(HASH_KEY_IS_STRING == keytype) { */ zend_hash_get_current_data(lht, (void **) &keydataptr); keydata = *keydataptr; switch(Z_TYPE_P(keydata)) { case IS_STRING: if(HASH_KEY_IS_STRING == keytype) - snprintf(str, BUFFERLEN, "%s=%s\n", key, Z_STRVAL_P(keydata)); + snprintf(str, BUFFERLEN, "%s%c%s\n", key, delim, Z_STRVAL_P(keydata)); + else if(HASH_KEY_IS_LONG == keytype) + snprintf(str, BUFFERLEN, "%ld%c%s\n", idx, delim, Z_STRVAL_P(keydata)); else snprintf(str, BUFFERLEN, "%s\n", Z_STRVAL_P(keydata)); break; case IS_LONG: if(HASH_KEY_IS_STRING == keytype) - snprintf(str, BUFFERLEN, "%s=0x%lX\n", key, Z_LVAL_P(keydata)); + snprintf(str, BUFFERLEN, "%s%c0x%lX\n", key, delim, Z_LVAL_P(keydata)); + else if(HASH_KEY_IS_LONG == keytype) + snprintf(str, BUFFERLEN, "%ld%c%s\n", idx, delim, Z_STRVAL_P(keydata)); else snprintf(str, BUFFERLEN, "0x%lX\n", Z_LVAL_P(keydata)); break; @@ -587,7 +596,7 @@ static char * make_objrec_from_array(HashTable *lht) { char *strarr, *ptr, *ptr1; count = zend_hash_num_elements(Z_ARRVAL_P(keydata)); if(count > 0) { - strarr = make_objrec_from_array(Z_ARRVAL_P(keydata)); + strarr = make_objrec_from_array(Z_ARRVAL_P(keydata), ':'); len = strlen(strarr) - 1; keylen = strlen(key); if(NULL == (ptr = malloc(len + 1 + count*(keylen+1)))) { @@ -605,8 +614,8 @@ static char * make_objrec_from_array(HashTable *lht) { strcpy(ptr1, key); ptr1 += keylen; *ptr1++ = '='; - } else if(strarr[i] == '=') - ptr1[-1] = ':'; + }/* else if(strarr[i] == '=') + ptr1[-1] = ':'; */ } *ptr1++ = '\n'; *ptr1 = '\0'; @@ -1904,7 +1913,7 @@ PHP_FUNCTION(hw_modifyobject) char *strarr, *ptr, *ptr1; count = zend_hash_num_elements(Z_ARRVAL_P(data)); if(count > 0) { - strarr = make_objrec_from_array(Z_ARRVAL_P(data)); + strarr = make_objrec_from_array(Z_ARRVAL_P(data), ':'); len = strlen(strarr) - 1; keylen = strlen(key); if(NULL == (ptr = malloc(len + 1 + count*(keylen+1+4)))) { @@ -1928,8 +1937,8 @@ PHP_FUNCTION(hw_modifyobject) strcpy(ptr1, key); ptr1 += keylen; *ptr1++ = '='; - } else if(strarr[i] == '=') - ptr1[-1] = ':'; + } /* else if(strarr[i] == '=') + ptr1[-1] = ':'; */ } *ptr1 = '\0'; strlcpy(addattribute, ptr, sizeof(addattribute)); @@ -1974,7 +1983,7 @@ PHP_FUNCTION(hw_modifyobject) char *strarr, *ptr, *ptr1; count = zend_hash_num_elements(Z_ARRVAL_P(data)); if(count > 0) { - strarr = make_objrec_from_array(Z_ARRVAL_P(data)); + strarr = make_objrec_from_array(Z_ARRVAL_P(data), ':'); len = strlen(strarr) - 1; keylen = strlen(key); if(NULL == (ptr = malloc(len + 1 + count*(keylen+1+4)))) { @@ -1998,8 +2007,8 @@ PHP_FUNCTION(hw_modifyobject) strcpy(ptr1, key); ptr1 += keylen; *ptr1++ = '='; - } else if(strarr[i] == '=') - ptr1[-1] = ':'; + } /* else if(strarr[i] == '=') + ptr1[-1] = ':'; */ } *ptr1++ = '\n'; *ptr1 = '\0'; @@ -4046,7 +4055,7 @@ PHP_FUNCTION(hw_array2objrec) WRONG_PARAM_COUNT; } convert_to_array_ex(arg1); - objrec = make_objrec_from_array(Z_ARRVAL_PP(arg1)); + objrec = make_objrec_from_array(Z_ARRVAL_PP(arg1), '='); if(objrec) { retobj = estrdup(objrec); free(objrec); @@ -4141,7 +4150,7 @@ PHP_FUNCTION(hw_inscoll) RETURN_FALSE; } - if(NULL == (objrec = make_objrec_from_array(Z_ARRVAL_PP(arg3)))) { + if(NULL == (objrec = make_objrec_from_array(Z_ARRVAL_PP(arg3), '='))) { php_error(E_WARNING, "%s(): Could not create Object Record from Array", get_active_function_name(TSRMLS_C)); RETURN_FALSE; } |