| 115 // allocate new element |
115 // allocate new element |
| 116 struct cx_hash_map_element_s *e = cxMalloc( |
116 struct cx_hash_map_element_s *e = cxMalloc( |
| 117 allocator, |
117 allocator, |
| 118 sizeof(struct cx_hash_map_element_s) + map->collection.elem_size |
118 sizeof(struct cx_hash_map_element_s) + map->collection.elem_size |
| 119 ); |
119 ); |
| 120 if (e == NULL) return NULL; // LCOV_EXCL_LINE |
120 if (e == NULL) return (CxMapEntry){NULL, NULL}; // LCOV_EXCL_LINE |
| 121 |
121 |
| 122 // write the value |
122 // write the value |
| 123 if (value == NULL) { |
123 if (value == NULL) { |
| 124 memset(e->data, 0, map->collection.elem_size); |
124 memset(e->data, 0, map->collection.elem_size); |
| 125 } else if (map->collection.store_pointer) { |
125 } else if (map->collection.store_pointer) { |
| 130 |
130 |
| 131 // copy the key |
131 // copy the key |
| 132 void *kd = cxMalloc(allocator, key.len); |
132 void *kd = cxMalloc(allocator, key.len); |
| 133 if (kd == NULL) { // LCOV_EXCL_START |
133 if (kd == NULL) { // LCOV_EXCL_START |
| 134 cxFree(allocator, e); |
134 cxFree(allocator, e); |
| 135 return NULL; |
135 return (CxMapEntry){NULL, NULL}; |
| 136 } // LCOV_EXCL_STOP |
136 } // LCOV_EXCL_STOP |
| 137 memcpy(kd, key.data, key.len); |
137 memcpy(kd, key.data, key.len); |
| 138 e->key.data = kd; |
138 e->key.data = kd; |
| 139 e->key.len = key.len; |
139 e->key.len = key.len; |
| 140 e->key.hash = hash; |
140 e->key.hash = hash; |