summaryrefslogtreecommitdiff
path: root/ext/phar/util.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2008-07-10 16:16:15 +0000
committerDmitry Stogov <dmitry@php.net>2008-07-10 16:16:15 +0000
commit478234b2356fd331727451f59542bd26de32f029 (patch)
tree237963d2c9a343887bed9d706231ffa291c3c06e /ext/phar/util.c
parentd82b5d59b4d06fd3e19025db45fbd39e4cb33bd4 (diff)
downloadphp-git-478234b2356fd331727451f59542bd26de32f029.tar.gz
Fixed wrong refcount updates
Diffstat (limited to 'ext/phar/util.c')
-rw-r--r--ext/phar/util.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/ext/phar/util.c b/ext/phar/util.c
index fb6edb464c..88913fbce7 100644
--- a/ext/phar/util.c
+++ b/ext/phar/util.c
@@ -1358,7 +1358,7 @@ phar_entry_info *phar_get_entry_info_dir(phar_archive_data *phar, char *path, in
return entry;
}
if (dir) {
- if (SUCCESS == zend_hash_find(&phar->virtual_dirs, path, path_len, (void**)&entry)) {
+ if (zend_hash_exists(&phar->virtual_dirs, path, path_len)) {
/* a file or directory exists in a sub-directory of this path */
entry = (phar_entry_info *) ecalloc(1, sizeof(phar_entry_info));
/* this next line tells PharFileInfo->__destruct() to efree the filename */
@@ -1958,12 +1958,16 @@ int phar_create_signature(phar_archive_data *phar, php_stream *fp, char **signat
*/
static int phar_add_empty(HashTable *ht, char *arKey, uint nKeyLength) /* {{{ */
{
- char *dummy = (char*)1;
+ char **dummy;
+
if (SUCCESS == zend_hash_find(ht, arKey, nKeyLength, (void **)&dummy)) {
- dummy++;
- }
+ (*dummy)++;
+ return SUCCESS;
+ } else {
+ char *dummy = (char*)1;
- return zend_hash_update(ht, arKey, nKeyLength, (char *) &dummy, sizeof(void *), NULL);
+ return zend_hash_add(ht, arKey, nKeyLength, (char *) &dummy, sizeof(void *), NULL);
+ }
}
/* }}} */
@@ -1983,19 +1987,15 @@ void phar_add_virtual_dirs(phar_archive_data *phar, char *filename, int filename
void phar_delete_virtual_dirs(phar_archive_data *phar, char *filename, int filename_len TSRMLS_DC) /* {{{ */
{
char *s = filename;
+ char **dummy;
/* we use filename_len - 1 to avoid adding a virtual dir for empty directory entries */
for (; s - filename < filename_len - 1; s++) {
if (*s == '/') {
- char *dummy;
- if (FAILURE == zend_hash_find(&phar->virtual_dirs, filename, s - filename, (void **)&dummy)) {
- continue;
- }
-
- if (!--dummy) {
- zend_hash_del(&phar->virtual_dirs, filename, s - filename);
- } else {
- zend_hash_update(&phar->virtual_dirs, filename, s - filename, &dummy, sizeof(void *), NULL);
+ if (SUCCESS == zend_hash_find(&phar->virtual_dirs, filename, s - filename, (void **)&dummy)) {
+ if (!--(*dummy)) {
+ zend_hash_del(&phar->virtual_dirs, filename, s - filename);
+ }
}
}
}