- zval *entry, **array;
-
- MAKE_STD_ZVAL(entry);
- array_init(entry);
-
- Z_ADDREF_PP(tmp_name);
- add_assoc_zval_ex(entry, ZEND_STRS("file"), *tmp_name);
- Z_ADDREF_PP(zname);
- add_assoc_zval_ex(entry, ZEND_STRS("name"), *zname);
- Z_ADDREF_PP(zsize);
- add_assoc_zval_ex(entry, ZEND_STRS("size"), *zsize);
- Z_ADDREF_PP(ztype);
- add_assoc_zval_ex(entry, ZEND_STRS("type"), *ztype);
- Z_ADDREF_PP(zerror);
- add_assoc_zval_ex(entry, ZEND_STRS("error"), *zerror);
-
- if (SUCCESS == zend_hash_quick_find(Z_ARRVAL_P(zfiles), file_key->arKey, file_key->nKeyLength, file_key->h, (void *) &array)) {
- add_next_index_zval(*array, entry);
+ zval entry, *array;
+
+ array_init(&entry);
+
+ Z_TRY_ADDREF_P(tmp_name);
+ add_assoc_zval_ex(&entry, ZEND_STRL("file"), tmp_name);
+ Z_TRY_ADDREF_P(zname);
+ add_assoc_zval_ex(&entry, ZEND_STRL("name"), zname);
+ Z_TRY_ADDREF_P(zsize);
+ add_assoc_zval_ex(&entry, ZEND_STRL("size"), zsize);
+ Z_TRY_ADDREF_P(ztype);
+ add_assoc_zval_ex(&entry, ZEND_STRL("type"), ztype);
+ Z_TRY_ADDREF_P(zerror);
+ add_assoc_zval_ex(&entry, ZEND_STRL("error"), zerror);
+
+ if (file_key->key && (array = zend_hash_find(Z_ARRVAL_P(zfiles), file_key->key))) {
+ add_next_index_zval(array, &entry);
+ } else if (!file_key->key && (array = zend_hash_index_find(Z_ARRVAL_P(zfiles), file_key->h))) {
+ add_next_index_zval(array, &entry);