]> granicus.if.org Git - php/commitdiff
Avoid useless allocations
authorDmitry Stogov <dmitry@zend.com>
Fri, 25 Apr 2014 07:29:18 +0000 (11:29 +0400)
committerDmitry Stogov <dmitry@zend.com>
Fri, 25 Apr 2014 07:29:18 +0000 (11:29 +0400)
Zend/zend_hash.h

index 54575c23f1f7240306b16e7b5cbfc2f8ea87cfec..3db7abdf117a890fa3e6f3d735109de08aad4c5d 100644 (file)
@@ -417,27 +417,27 @@ static inline void *zend_hash_str_update_ptr(HashTable *ht, const char *str, int
 
 static inline void *zend_hash_add_mem(HashTable *ht, zend_string *key, void *pData, size_t size)
 {
-       void *p, *r;
+       zval tmp, *zv;
 
-       p = pemalloc(size, ht->u.flags & HASH_FLAG_PERSISTENT);
-       memcpy(p, pData, size);
-       if ((r = zend_hash_add_ptr(ht, key, p))) {
-               return r;
+       ZVAL_PTR(&tmp, NULL);
+       if ((zv = zend_hash_add(ht, key, &tmp))) {
+               Z_PTR_P(zv) = pemalloc(size, ht->u.flags & HASH_FLAG_PERSISTENT);
+               memcpy(Z_PTR_P(zv), pData, size);
+               return Z_PTR_P(zv);
        }
-       pefree(p, ht->u.flags & HASH_FLAG_PERSISTENT);
        return NULL;
 }
 
 static inline void *zend_hash_str_add_mem(HashTable *ht, const char *str, int len, void *pData, size_t size)
 {
-       void *p, *r;
+       zval tmp, *zv;
 
-       p = pemalloc(size, ht->u.flags & HASH_FLAG_PERSISTENT);
-       memcpy(p, pData, size);
-       if ((r = zend_hash_str_add_ptr(ht, str, len, p))) {
-               return r;
+       ZVAL_PTR(&tmp, NULL);
+       if ((zv = zend_hash_str_add(ht, str, len, &tmp))) {
+               Z_PTR_P(zv) = pemalloc(size, ht->u.flags & HASH_FLAG_PERSISTENT);
+               memcpy(Z_PTR_P(zv), pData, size);
+               return Z_PTR_P(zv);
        }
-       pefree(p, ht->u.flags & HASH_FLAG_PERSISTENT);
        return NULL;
 }
 
@@ -488,14 +488,14 @@ static inline void *zend_hash_index_update_mem(HashTable *ht, ulong h, void *pDa
 
 static inline void *zend_hash_next_index_insert_mem(HashTable *ht, void *pData, size_t size)
 {
-       void *p, *r;
+       zval tmp, *zv;
 
-       p = pemalloc(size, ht->u.flags & HASH_FLAG_PERSISTENT);
-       memcpy(p, pData, size);
-       if ((r = zend_hash_next_index_insert_ptr(ht, p))) {
-               return r;
+       ZVAL_PTR(&tmp, NULL);
+       if ((zv = zend_hash_next_index_insert(ht, &tmp))) {
+               Z_PTR_P(zv) = pemalloc(size, ht->u.flags & HASH_FLAG_PERSISTENT);
+               memcpy(Z_PTR_P(zv), pData, size);
+               return Z_PTR_P(zv);
        }
-       pefree(p, ht->u.flags & HASH_FLAG_PERSISTENT);
        return NULL;
 }