/** * Call this for uninitialized strings. Global variables are * automatically cleared, so they don't need initialization. * The string will use the memory zone. */ ddstring_t *Str_Init(ddstring_t *str) { DENG_ASSERT(str); if(!str) return 0; if(!Z_IsInited()) { // The memory zone is not available at the moment. return Str_InitStd(str); } memset(str, 0, sizeof(*str)); // Init the memory management. str->memFree = Z_Free; str->memAlloc = zoneAlloc; str->memCalloc = zoneCalloc; return str; }
dd_bool Z_Contains(void *ptr) { memvolume_t *volume; memblock_t *block = Z_GetBlock(ptr); DENG_ASSERT(Z_IsInited()); if (block->id != LIBDENG_ZONEID) { // Could be in the zone, but does not look like an allocated block. return false; } // Check which volume is it. for (volume = volumeRoot; volume; volume = volume->next) { if ((char *)ptr > (char *)volume->zone && (char *)ptr < (char *)volume->zone + volume->size) { // There it is. return true; } } return false; }