diff src/dmres.c @ 1040:ebabf5aefb76

Work on resource handling.
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 01 Mar 2015 17:17:36 +0200
parents 3c1ca37809e3
children d0f80f6a0c65
line wrap: on
line diff
--- a/src/dmres.c	Sun Mar 01 17:03:50 2015 +0200
+++ b/src/dmres.c	Sun Mar 01 17:17:36 2015 +0200
@@ -23,7 +23,7 @@
 #endif
 
 
-DMResource *dmResourceNew(DMResourceLib *lib, const char *filename, const size_t size)
+DMResource *dmResourceNew(DMResourceLib *lib, const char *filename, const size_t size, const int flags)
 {
     DMResource *node = dmMalloc0(sizeof(DMResource));
     if (node == NULL)
@@ -33,6 +33,7 @@
     node->filename = dm_strdup(filename);
     node->rawSize = size;
     
+    node->flags = flags;
     return node;
 }
 
@@ -484,8 +485,8 @@
         if (node->size != node->length)
         {
             ret = dmError(DMERR_INVALID_DATA,
-                "Node '%s' raw size and length fields differ for uncompressed node.\n",
-                handle->filename);
+                "Node '%s' raw size and length fields differ for uncompressed node: %d <> %d.\n",
+                handle->filename, node->size, node->length);
             goto out;
         }
         if (fread(handle->rawData, sizeof(Uint8), node->size, handle->lib->packFile->file) != node->size)
@@ -761,7 +762,7 @@
         if (lib->flags & DRF_USE_STDIO)
         {
             // Hmm.. does not exist? Fall back to a stdio file
-            *phandle = handle = dmResourceNew(lib, filename, 0);
+            *phandle = handle = dmResourceNew(lib, filename, 0, 0);
             if (handle == NULL)
                 return DMERR_MALLOC;
 
@@ -805,10 +806,10 @@
     // Check master directory for resource
     if ((*phandle = handle = dmResourceFind(lib, filename)) == NULL)
     {
-        if ((*phandle = handle = dmResourceNew(lib, filename, size)) == NULL)
+        if ((*phandle = handle = dmResourceNew(
+            lib, filename, size, DMF_LOADED_RAW | DMF_UNALLOCATED)) == NULL)
             return DMERR_MALLOC;
 
-        handle->flags   = DMF_LOADED_RAW | DMF_UNALLOCATED;
         handle->fops    = &dfMemIOFileOps;
         handle->rawData = buf;
         dmResourceInsert(lib, handle);
@@ -825,7 +826,7 @@
 int dmf_create_stdio(const char *filename, const char *mode, DMResource **phandle)
 {
     DMResource *handle;
-    if ((*phandle = handle = dmResourceNew(NULL, filename, 0)) == NULL)
+    if ((*phandle = handle = dmResourceNew(NULL, filename, 0, 0)) == NULL)
         return DMERR_MALLOC;
 
     handle->fops  = &dfStdioFileOps;
@@ -846,7 +847,7 @@
 int dmf_create_stdio_stream(FILE *fh, DMResource **phandle)
 {
     DMResource *handle;
-    if ((*phandle = handle = dmResourceNew(NULL, "", 0)) == NULL)
+    if ((*phandle = handle = dmResourceNew(NULL, "", 0, 0)) == NULL)
         return DMERR_MALLOC;
 
     handle->fops = &dfStdioFHOps;
@@ -1004,7 +1005,7 @@
             }
 
             if (S_ISREG(sbuf.st_mode))
-                node = dmResourceNew(lib, dh->d_name, sbuf.st_size);
+                node = dmResourceNew(lib, dh->d_name, sbuf.st_size, 0);
         }
 
         if (node != NULL)
@@ -1075,11 +1076,11 @@
             // Initialize resources from a PACK file
             for (node = lib->packFile->entries; node != NULL; node = node->next)
             {
-                DMResource *res = dmResourceNew(lib, node->filename, node->size);
+                DMResource *res = dmResourceNew(lib, node->filename, node->size, node->flags & DMF_PACK_MASK);
                 if (res == NULL)
                 {
                     return dmError(DMERR_INIT_FAIL,
-                        "Could not allocate memory for resource node '%s' [0x%08x], %d.\n",
+                        "Could not allocate memory for resource node '%s' [0x%08x], %d bytes.\n",
                         node->filename, node->flags, node->size);
                 }