void *StorageAllocById(Storage **storage, StorageEnum type, int id) { #ifdef DEBUG BUG_ON(!storage_registraton_closed); #endif SCLogDebug("storage %p id %d", storage, id); StorageMapping *map = &storage_map[type][id]; Storage *store = *storage; if (store == NULL) { store = SCMalloc(sizeof(void *) * storage_max_id[type]); if (store == NULL) return NULL; memset(store, 0x00, sizeof(void *) * storage_max_id[type]); } SCLogDebug("store %p", store); if (store[id] == NULL && map->Alloc != NULL) { store[id] = map->Alloc(map->size); if (store[id] == NULL) { SCFree(store); *storage = NULL; return NULL; } } *storage = store; return store[id]; }
void *StorageAllocByIdPrealloc(Storage *storage, StorageEnum type, int id) { #ifdef DEBUG BUG_ON(!storage_registraton_closed); #endif SCLogDebug("storage %p id %d", storage, id); StorageMapping *map = &storage_map[type][id]; if (storage[id] == NULL && map->Alloc != NULL) { storage[id] = map->Alloc(map->size); if (storage[id] == NULL) { return NULL; } } return storage[id]; }