]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - zone.c
allow tga, wal and jpg images to be 32768x32768 rather than 4096x4096,
[xonotic/darkplaces.git] / zone.c
diff --git a/zone.c b/zone.c
index 889adc9d0c86bc54bb9c2eb97bb5451fa88452ad..c6a9fdc24f216eeb73554e0e559931f1aa6046da 100644 (file)
--- a/zone.c
+++ b/zone.c
@@ -329,7 +329,7 @@ void *_Mem_Alloc(mempool_t *pool, void *olddata, size_t size, size_t alignment,
                Sys_Error("Mem_Alloc: pool == NULL (alloc at %s:%i)", filename, fileline);
        if (developer_memory.integer)
                Con_DPrintf("Mem_Alloc: pool %s, file %s:%i, size %i bytes\n", pool->name, filename, fileline, (int)size);
-       //if (developer.integer && developer_memorydebug.integer)
+       //if (developer.integer > 0 && developer_memorydebug.integer)
        //      _Mem_CheckSentinelsGlobal(filename, fileline);
        pool->totalsize += size;
        realsize = alignment + sizeof(memheader_t) + size + sizeof(sentinel2);
@@ -392,9 +392,9 @@ static void _Mem_FreeBlock(memheader_t *mem, const char *filename, int fileline)
        sentinel1 = MEMHEADER_SENTINEL_FOR_ADDRESS(&mem->sentinel);
        sentinel2 = MEMHEADER_SENTINEL_FOR_ADDRESS((unsigned char *) mem + sizeof(memheader_t) + mem->size);
        if (mem->sentinel != sentinel1)
-               Sys_Error("Mem_Free: trashed header sentinel 1 (alloc at %s:%i, free at %s:%i)", mem->filename, mem->fileline, filename, fileline);
+               Sys_Error("Mem_Free: trashed head sentinel (alloc at %s:%i, free at %s:%i)", mem->filename, mem->fileline, filename, fileline);
        if (memcmp((unsigned char *) mem + sizeof(memheader_t) + mem->size, &sentinel2, sizeof(sentinel2)))
-               Sys_Error("Mem_Free: trashed header sentinel 2 (alloc at %s:%i, free at %s:%i)", mem->filename, mem->fileline, filename, fileline);
+               Sys_Error("Mem_Free: trashed tail sentinel (alloc at %s:%i, free at %s:%i)", mem->filename, mem->fileline, filename, fileline);
 
        pool = mem->pool;
        if (developer_memory.integer)
@@ -516,9 +516,9 @@ void _Mem_EmptyPool(mempool_t *pool, const char *filename, int fileline)
        if (pool == NULL)
                Sys_Error("Mem_EmptyPool: pool == NULL (emptypool at %s:%i)", filename, fileline);
        if (pool->sentinel1 != MEMHEADER_SENTINEL_FOR_ADDRESS(&pool->sentinel1))
-               Sys_Error("Mem_EmptyPool: trashed pool sentinel 2 (allocpool at %s:%i, emptypool at %s:%i)", pool->filename, pool->fileline, filename, fileline);
-       if (pool->sentinel2 != MEMHEADER_SENTINEL_FOR_ADDRESS(&pool->sentinel2))
                Sys_Error("Mem_EmptyPool: trashed pool sentinel 1 (allocpool at %s:%i, emptypool at %s:%i)", pool->filename, pool->fileline, filename, fileline);
+       if (pool->sentinel2 != MEMHEADER_SENTINEL_FOR_ADDRESS(&pool->sentinel2))
+               Sys_Error("Mem_EmptyPool: trashed pool sentinel 2 (allocpool at %s:%i, emptypool at %s:%i)", pool->filename, pool->fileline, filename, fileline);
 
        // free memory owned by the pool
        while (pool->chain)
@@ -544,9 +544,9 @@ void _Mem_CheckSentinels(void *data, const char *filename, int fileline)
        sentinel1 = MEMHEADER_SENTINEL_FOR_ADDRESS(&mem->sentinel);
        sentinel2 = MEMHEADER_SENTINEL_FOR_ADDRESS((unsigned char *) mem + sizeof(memheader_t) + mem->size);
        if (mem->sentinel != sentinel1)
-               Sys_Error("Mem_Free: trashed header sentinel 1 (alloc at %s:%i, sentinel check at %s:%i)", mem->filename, mem->fileline, filename, fileline);
+               Sys_Error("Mem_Free: trashed head sentinel (alloc at %s:%i, sentinel check at %s:%i)", mem->filename, mem->fileline, filename, fileline);
        if (memcmp((unsigned char *) mem + sizeof(memheader_t) + mem->size, &sentinel2, sizeof(sentinel2)))
-               Sys_Error("Mem_Free: trashed header sentinel 2 (alloc at %s:%i, sentinel check at %s:%i)", mem->filename, mem->fileline, filename, fileline);
+               Sys_Error("Mem_Free: trashed tail sentinel (alloc at %s:%i, sentinel check at %s:%i)", mem->filename, mem->fileline, filename, fileline);
 }
 
 #if MEMCLUMPING
@@ -627,6 +627,44 @@ void Mem_ExpandableArray_FreeArray(memexpandablearray_t *l)
        memset(l, 0, sizeof(*l));
 }
 
+// VorteX: hacked Mem_ExpandableArray_AllocRecord, it does allocate record at certain index
+void *Mem_ExpandableArray_AllocRecordAtIndex(memexpandablearray_t *l, size_t index)
+{
+       size_t j;
+       if (index == l->numarrays)
+       {
+               if (l->numarrays == l->maxarrays)
+               {
+                       memexpandablearray_array_t *oldarrays = l->arrays;
+                       l->maxarrays = max(l->maxarrays * 2, 128);
+                       l->arrays = (memexpandablearray_array_t*) Mem_Alloc(l->mempool, l->maxarrays * sizeof(*l->arrays));
+                       if (oldarrays)
+                       {
+                               memcpy(l->arrays, oldarrays, l->numarrays * sizeof(*l->arrays));
+                               Mem_Free(oldarrays);
+                       }
+               }
+               l->arrays[index].numflaggedrecords = 0;
+               l->arrays[index].data = (unsigned char *) Mem_Alloc(l->mempool, (l->recordsize + 1) * l->numrecordsperarray);
+               l->arrays[index].allocflags = l->arrays[index].data + l->recordsize * l->numrecordsperarray;
+               l->numarrays++;
+       }
+       if (l->arrays[index].numflaggedrecords < l->numrecordsperarray)
+       {
+               for (j = 0;j < l->numrecordsperarray;j++)
+               {
+                       if (!l->arrays[index].allocflags[j])
+                       {
+                               l->arrays[index].allocflags[j] = true;
+                               l->arrays[index].numflaggedrecords++;
+                               memset(l->arrays[index].data + l->recordsize * j, 0, l->recordsize);
+                               return (void *)(l->arrays[index].data + l->recordsize * j);
+                       }
+               }
+       }
+       return NULL;
+}
+
 void *Mem_ExpandableArray_AllocRecord(memexpandablearray_t *l)
 {
        size_t i, j;