@@ -291,8 +291,6 @@ php_stream *phar_wrapper_open_dir(php_stream_wrapper *wrapper, const char *path,
291
291
php_url * resource = NULL ;
292
292
php_stream * ret ;
293
293
char * internal_file , * error ;
294
- zend_string * str_key ;
295
- zend_ulong unused ;
296
294
phar_archive_data * phar ;
297
295
phar_entry_info * entry = NULL ;
298
296
@@ -363,25 +361,18 @@ php_stream *phar_wrapper_open_dir(php_stream_wrapper *wrapper, const char *path,
363
361
return phar_make_dirstream (internal_file , & phar -> manifest );
364
362
} else {
365
363
size_t i_len = strlen (internal_file );
364
+ zend_string * str_key ;
366
365
367
366
/* 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 );
383
374
}
384
- }
375
+ } ZEND_HASH_FOREACH_END ();
385
376
}
386
377
387
378
php_url_free (resource );
0 commit comments