static inline void *zend_hash_add_mem(HashTable *ht, zend_string *key, void *pData, size_t size)
{
- void *p;
+ void *p, *r;
p = pemalloc(size, ht->flags & HASH_FLAG_PERSISTENT);
memcpy(p, pData, size);
- return zend_hash_add_ptr(ht, key, p);
+ if ((r = zend_hash_add_ptr(ht, key, p))) {
+ return r;
+ }
+ pefree(p, ht->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;
+ void *p, *r;
p = pemalloc(size, ht->flags & HASH_FLAG_PERSISTENT);
memcpy(p, pData, size);
- return zend_hash_str_add_ptr(ht, str, len, p);
+ if ((r = zend_hash_str_add_ptr(ht, str, len, p))) {
+ return r;
+ }
+ pefree(p, ht->flags & HASH_FLAG_PERSISTENT);
+ return NULL;
}
static inline void *zend_hash_update_mem(HashTable *ht, zend_string *key, void *pData, size_t size)
static inline void *zend_hash_next_index_insert_mem(HashTable *ht, void *pData, size_t size)
{
- void *p;
+ void *p, *r;
p = pemalloc(size, ht->flags & HASH_FLAG_PERSISTENT);
memcpy(p, pData, size);
- return zend_hash_next_index_insert_ptr(ht, p);
+ if ((r = zend_hash_next_index_insert_ptr(ht, p))) {
+ return r;
+ }
+ pefree(p, ht->flags & HASH_FLAG_PERSISTENT);
+ return NULL;
}
static inline void *zend_hash_find_ptr(const HashTable *ht, zend_string *key)