Skip to content

Commit a600713

Browse files
committed
ext/phar: Use HASH_FOREACH macro in phar_wrapper_open_dir()
Also simplify the inner if condition
1 parent 615960b commit a600713

File tree

1 file changed

+9
-18
lines changed

1 file changed

+9
-18
lines changed

ext/phar/dirstream.c

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -291,8 +291,6 @@ php_stream *phar_wrapper_open_dir(php_stream_wrapper *wrapper, const char *path,
291291
php_url *resource = NULL;
292292
php_stream *ret;
293293
char *internal_file, *error;
294-
zend_string *str_key;
295-
zend_ulong unused;
296294
phar_archive_data *phar;
297295
phar_entry_info *entry = NULL;
298296

@@ -363,25 +361,18 @@ php_stream *phar_wrapper_open_dir(php_stream_wrapper *wrapper, const char *path,
363361
return phar_make_dirstream(internal_file, &phar->manifest);
364362
} else {
365363
size_t i_len = strlen(internal_file);
364+
zend_string *str_key;
366365

367366
/* search for directory */
368-
zend_hash_internal_pointer_reset(&phar->manifest);
369-
while (FAILURE != zend_hash_has_more_elements(&phar->manifest)) {
370-
if (HASH_KEY_NON_EXISTENT !=
371-
zend_hash_get_current_key(&phar->manifest, &str_key, &unused)) {
372-
if (ZSTR_LEN(str_key) > i_len && 0 == memcmp(ZSTR_VAL(str_key), internal_file, i_len)) {
373-
/* directory found */
374-
internal_file = estrndup(internal_file,
375-
i_len);
376-
php_url_free(resource);
377-
return phar_make_dirstream(internal_file, &phar->manifest);
378-
}
379-
}
380-
381-
if (SUCCESS != zend_hash_move_forward(&phar->manifest)) {
382-
break;
367+
ZEND_HASH_MAP_FOREACH_STR_KEY(&phar->manifest, str_key) {
368+
if (zend_string_starts_with_cstr(str_key, internal_file, i_len)) {
369+
/* directory found */
370+
internal_file = estrndup(internal_file,
371+
i_len);
372+
php_url_free(resource);
373+
return phar_make_dirstream(internal_file, &phar->manifest);
383374
}
384-
}
375+
} ZEND_HASH_FOREACH_END();
385376
}
386377

387378
php_url_free(resource);

0 commit comments

Comments
 (0)