steinm Mon Sep 30 05:27:55 2002 EDT Modified files: /php4/ext/hyperwave hw.c Log: - 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 Index: php4/ext/hyperwave/hw.c diff -u php4/ext/hyperwave/hw.c:1.109 php4/ext/hyperwave/hw.c:1.110 --- php4/ext/hyperwave/hw.c:1.109 Wed Jul 24 01:59:00 2002 +++ php4/ext/hyperwave/hw.c Mon Sep 30 05:27:54 2002 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: hw.c,v 1.109 2002/07/24 05:59:00 steinm Exp $ */ +/* $Id: hw.c,v 1.110 2002/09/30 09:27:54 steinm Exp $ */ #include <stdlib.h> #include <errno.h> @@ -313,6 +313,7 @@ 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 @@ #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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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; }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php