#define HT_FLAGS(ht) (ht)->u.flags
+#define HT_INVALIDATE(ht) do { \
+ HT_FLAGS(ht) = 0; \
+ } while (0)
+
+#define HT_IS_INITIALIZED(ht) \
+ ((HT_FLAGS(ht) & HASH_FLAG_INITIALIZED) != 0)
+
#define HT_IS_PACKED(ht) \
((HT_FLAGS(ht) & HASH_FLAG_PACKED) != 0)
return ret;
}
- if (!HT_FLAGS(&phar->manifest)) {
+ if (!HT_IS_INITIALIZED(&phar->manifest)) {
php_url_free(resource);
return NULL;
}
goto skip_phar;
}
- if ((HT_FLAGS(&PHAR_G(phar_fname_map)) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
- && !HT_FLAGS(&cached_phars)) {
+ if ((HT_IS_INITIALIZED(&PHAR_G(phar_fname_map)) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
+ && !HT_IS_INITIALIZED(&cached_phars)) {
goto skip_phar;
}
goto skip_phar;
}
- if ((HT_FLAGS(&PHAR_G(phar_fname_map)) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
- && !HT_FLAGS(&cached_phars)) {
+ if ((HT_IS_INITIALIZED(&PHAR_G(phar_fname_map)) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
+ && !HT_IS_INITIALIZED(&cached_phars)) {
goto skip_phar;
}
goto skip_phar;
}
- if ((HT_FLAGS(&PHAR_G(phar_fname_map)) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
- && !HT_FLAGS(&cached_phars)) {
+ if ((HT_IS_INITIALIZED(&PHAR_G(phar_fname_map)) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
+ && !HT_IS_INITIALIZED(&cached_phars)) {
goto skip_phar;
}
if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "p|br!", &filename, &filename_len, &use_include_path, &zcontext) == FAILURE) {
goto skip_phar;
}
- if ((HT_FLAGS(&PHAR_G(phar_fname_map)) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
- && !HT_FLAGS(&cached_phars)) {
+ if ((HT_IS_INITIALIZED(&PHAR_G(phar_fname_map)) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
+ && !HT_IS_INITIALIZED(&cached_phars)) {
/* no need to check, include_path not even specified in fopen/ no active phars */
goto skip_phar;
}
goto skip_phar;
}
- if ((HT_FLAGS(&PHAR_G(phar_fname_map)) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
- && !HT_FLAGS(&cached_phars)) {
+ if ((HT_IS_INITIALIZED(&PHAR_G(phar_fname_map)) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
+ && !HT_IS_INITIALIZED(&cached_phars)) {
goto skip_phar;
}
if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "p", &filename, &filename_len) == FAILURE) {
goto skip_phar;
}
- if ((HT_FLAGS(&PHAR_G(phar_fname_map)) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
- && !HT_FLAGS(&cached_phars)) {
+ if ((HT_IS_INITIALIZED(&PHAR_G(phar_fname_map)) && !zend_hash_num_elements(&(PHAR_G(phar_fname_map))))
+ && !HT_IS_INITIALIZED(&cached_phars)) {
goto skip_phar;
}
if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(), "p", &filename, &filename_len) == FAILURE) {
if (ZSTR_LEN(entry->name) == sizeof("phar.readonly")-1) {
PHAR_G(readonly) = ini;
- if (PHAR_G(request_init) && HT_FLAGS(&PHAR_G(phar_fname_map))) {
+ if (PHAR_G(request_init) && HT_IS_INITIALIZED(&PHAR_G(phar_fname_map))) {
zend_hash_apply_with_argument(&(PHAR_G(phar_fname_map)), phar_set_writeable_bit, (void *)&ini);
}
} else {
PHAR_G(manifest_cached) = 0;
efree(tmp);
zend_hash_destroy(&(PHAR_G(phar_fname_map)));
- HT_FLAGS(&PHAR_G(phar_fname_map)) = 0;
+ HT_INVALIDATE(&PHAR_G(phar_fname_map));
zend_hash_destroy(&(PHAR_G(phar_alias_map)));
- HT_FLAGS(&PHAR_G(phar_alias_map)) = 0;
+ HT_INVALIDATE(&PHAR_G(phar_alias_map));
zend_hash_destroy(&cached_phars);
zend_hash_destroy(&cached_alias);
zend_hash_graceful_reverse_destroy(&EG(regular_list));
zend_hash_destroy(&cached_alias);
cached_phars = PHAR_G(phar_fname_map);
cached_alias = PHAR_G(phar_alias_map);
- HT_FLAGS(&PHAR_G(phar_fname_map)) = 0;
- HT_FLAGS(&PHAR_G(phar_alias_map)) = 0;
+ HT_INVALIDATE(&PHAR_G(phar_fname_map));
+ HT_INVALIDATE(&PHAR_G(phar_alias_map));
zend_hash_graceful_reverse_destroy(&EG(regular_list));
memset(&EG(regular_list), 0, sizeof(HashTable));
efree(tmp);
phar->signature = NULL;
}
- if (HT_FLAGS(&phar->manifest)) {
+ if (HT_IS_INITIALIZED(&phar->manifest)) {
zend_hash_destroy(&phar->manifest);
- HT_FLAGS(&phar->manifest) = 0;
+ HT_INVALIDATE(&phar->manifest);
}
- if (HT_FLAGS(&phar->mounted_dirs)) {
+ if (HT_IS_INITIALIZED(&phar->mounted_dirs)) {
zend_hash_destroy(&phar->mounted_dirs);
- HT_FLAGS(&phar->mounted_dirs) = 0;
+ HT_INVALIDATE(&phar->mounted_dirs);
}
- if (HT_FLAGS(&phar->virtual_dirs)) {
+ if (HT_IS_INITIALIZED(&phar->virtual_dirs)) {
zend_hash_destroy(&phar->virtual_dirs);
- HT_FLAGS(&phar->virtual_dirs) = 0;
+ HT_INVALIDATE(&phar->virtual_dirs);
}
if (Z_TYPE(phar->metadata) != IS_UNDEF) {
{
phar_release_functions();
zend_hash_destroy(&(PHAR_G(phar_alias_map)));
- HT_FLAGS(&PHAR_G(phar_alias_map)) = 0;
+ HT_INVALIDATE(&PHAR_G(phar_alias_map));
zend_hash_destroy(&(PHAR_G(phar_fname_map)));
- HT_FLAGS(&PHAR_G(phar_fname_map)) = 0;
+ HT_INVALIDATE(&PHAR_G(phar_fname_map));
zend_hash_destroy(&(PHAR_G(phar_persist_map)));
- HT_FLAGS(&PHAR_G(phar_persist_map)) = 0;
+ HT_INVALIDATE(&PHAR_G(phar_persist_map));
PHAR_G(phar_SERVER_mung_list) = 0;
if (PHAR_G(cached_fp)) {
}
return;
- } else if (HT_FLAGS(&PHAR_G(phar_fname_map)) && NULL != (pphar = zend_hash_str_find_ptr(&(PHAR_G(phar_fname_map)), fname, fname_len))) {
+ } else if (HT_IS_INITIALIZED(&PHAR_G(phar_fname_map)) && NULL != (pphar = zend_hash_str_find_ptr(&(PHAR_G(phar_fname_map)), fname, fname_len))) {
goto carry_on;
} else if (PHAR_G(manifest_cached) && NULL != (pphar = zend_hash_str_find_ptr(&cached_phars, fname, fname_len))) {
if (SUCCESS == phar_copy_on_write(&pphar)) {
if (mode[0] == 'w' || (mode[0] == 'r' && mode[1] == '+')) {
phar_archive_data *pphar = NULL, *phar;
- if (PHAR_G(request_init) && HT_FLAGS(&PHAR_G(phar_fname_map)) && NULL == (pphar = zend_hash_find_ptr(&(PHAR_G(phar_fname_map)), resource->host))) {
+ if (PHAR_G(request_init) && HT_IS_INITIALIZED(&PHAR_G(phar_fname_map)) && NULL == (pphar = zend_hash_find_ptr(&(PHAR_G(phar_fname_map)), resource->host))) {
pphar = NULL;
}
if (PHAR_G(readonly) && (!pphar || !pphar->is_data)) {
php_url_free(resource);
return SUCCESS;
}
- if (!HT_FLAGS(&phar->manifest)) {
+ if (!HT_IS_INITIALIZED(&phar->manifest)) {
php_url_free(resource);
return FAILURE;
}
return SUCCESS;
}
/* check for mounted directories */
- if (HT_FLAGS(&phar->mounted_dirs) && zend_hash_num_elements(&phar->mounted_dirs)) {
+ if (HT_IS_INITIALIZED(&phar->mounted_dirs) && zend_hash_num_elements(&phar->mounted_dirs)) {
zend_string *str_key;
ZEND_HASH_FOREACH_STR_KEY(&phar->mounted_dirs, str_key) {
PHP_PHAR_API int phar_resolve_alias(char *alias, size_t alias_len, char **filename, size_t *filename_len) /* {{{ */ {
phar_archive_data *fd_ptr;
- if (HT_FLAGS(&PHAR_G(phar_alias_map))
+ if (HT_IS_INITIALIZED(&PHAR_G(phar_alias_map))
&& NULL != (fd_ptr = zend_hash_str_find_ptr(&(PHAR_G(phar_alias_map)), alias, alias_len))) {
*filename = fd_ptr->fname;
*filename_len = fd_ptr->fname_len;
return NULL;
}
- if (!HT_FLAGS(&phar->manifest)) {
+ if (!HT_IS_INITIALIZED(&phar->manifest)) {
return NULL;
}
}
}
- if (HT_FLAGS(&phar->mounted_dirs) && zend_hash_num_elements(&phar->mounted_dirs)) {
+ if (HT_IS_INITIALIZED(&phar->mounted_dirs) && zend_hash_num_elements(&phar->mounted_dirs)) {
zend_string *str_key;
ZEND_HASH_FOREACH_STR_KEY(&phar->mounted_dirs, str_key) {
entry.is_persistent = mydata->is_persistent;
#define PHAR_ZIP_FAIL_FREE(errmsg, save) \
zend_hash_destroy(&mydata->manifest); \
- HT_FLAGS(&mydata->manifest) = 0; \
+ HT_INVALIDATE(&mydata->manifest); \
zend_hash_destroy(&mydata->mounted_dirs); \
- HT_FLAGS(&mydata->mounted_dirs) = 0; \
+ HT_INVALIDATE(&mydata->mounted_dirs); \
zend_hash_destroy(&mydata->virtual_dirs); \
- HT_FLAGS(&mydata->virtual_dirs) = 0; \
+ HT_INVALIDATE(&mydata->virtual_dirs); \
php_stream_close(fp); \
zval_ptr_dtor(&mydata->metadata); \
if (mydata->signature) { \
return FAILURE;
#define PHAR_ZIP_FAIL(errmsg) \
zend_hash_destroy(&mydata->manifest); \
- HT_FLAGS(&mydata->manifest) = 0; \
+ HT_INVALIDATE(&mydata->manifest); \
zend_hash_destroy(&mydata->mounted_dirs); \
- HT_FLAGS(&mydata->mounted_dirs) = 0; \
+ HT_INVALIDATE(&mydata->mounted_dirs); \
zend_hash_destroy(&mydata->virtual_dirs); \
- HT_FLAGS(&mydata->virtual_dirs) = 0; \
+ HT_INVALIDATE(&mydata->virtual_dirs); \
php_stream_close(fp); \
zval_ptr_dtor(&mydata->metadata); \
if (mydata->signature) { \