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