Skip to content

Commit c293462

Browse files
committed
ext/dba: Use ZEND_HASH_FOREACH_VAL in php_dba_make_key()
1 parent 9498bc3 commit c293462

1 file changed

Lines changed: 26 additions & 23 deletions

File tree

ext/dba/dba.c

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -95,38 +95,41 @@ static zend_string* php_dba_make_key(const HashTable *key)
9595
zval *group, *name;
9696
zend_string *group_str, *name_str;
9797
HashPosition pos;
98+
int i = 0;
9899

99100
if (zend_hash_num_elements(key) != 2) {
100101
zend_argument_error(NULL, 1, "must have exactly two elements: \"key\" and \"name\"");
101102
return NULL;
102103
}
103104

104-
// TODO: Use ZEND_HASH_FOREACH_VAL() API?
105-
zend_hash_internal_pointer_reset_ex(key, &pos);
106-
group = zend_hash_get_current_data_ex(key, &pos);
107-
group_str = zval_try_get_string(group);
108-
if (!group_str) {
109-
return NULL;
110-
}
105+
ZEND_HASH_FOREACH_VAL(key, group) {
106+
zend_string *tmp = zval_try_get_string(group);
107+
if (!tmp) {
108+
if (group_str) zend_string_release(group_str);
109+
return NULL;
110+
}
111111

112-
zend_hash_move_forward_ex(key, &pos);
113-
name = zend_hash_get_current_data_ex(key, &pos);
114-
name_str = zval_try_get_string(name);
115-
if (!name_str) {
116-
zend_string_release_ex(group_str, false);
117-
return NULL;
118-
}
112+
if (i == 0) {
113+
group_str = tmp;
114+
} else {
115+
name_str = tmp;
116+
}
119117

120-
// TODO: Check ZSTR_LEN(name) != 0
121-
if (ZSTR_LEN(group_str) == 0) {
122-
zend_string_release_ex(group_str, false);
123-
return name_str;
124-
}
118+
i++;
119+
} ZEND_HASH_FOREACH_END();
120+
121+
if (ZSTR_LEN(group_str) == 0) {
122+
zend_string_release(group_str);
123+
return name_str;
124+
}
125+
126+
zend_string *key_str = zend_strpprintf(0, "[%s]%s",
127+
ZSTR_VAL(group_str), ZSTR_VAL(name_str));
128+
129+
zend_string_release(group_str);
130+
zend_string_release(name_str);
125131

126-
zend_string *key_str = zend_strpprintf(0, "[%s]%s", ZSTR_VAL(group_str), ZSTR_VAL(name_str));
127-
zend_string_release_ex(group_str, false);
128-
zend_string_release_ex(name_str, false);
129-
return key_str;
132+
return key_str;
130133
}
131134
/* }}} */
132135

0 commit comments

Comments
 (0)