changeset 732:2f02d9b4caa3

More work.
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 21 Apr 2013 19:58:59 +0300
parents 0e164aaa7409
children b505b81a43de
files dmres.c dmres.h
diffstat 2 files changed, 38 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/dmres.c	Sun Apr 21 19:46:52 2013 +0300
+++ b/dmres.c	Sun Apr 21 19:58:59 2013 +0300
@@ -174,6 +174,15 @@
 }
 
 
+static int dm_stdio_freset(DMResource * f)
+{
+    if (f->fh != NULL)
+        return dm_stdio_fseek(f, 0L, SEEK_SET);
+    else
+        return DMERR_OK;
+}
+
+
 static off_t dm_stdio_fsize(DMResource *f)
 {
     off_t savePos, fileSize;
@@ -269,6 +278,7 @@
 {
     "Stdio",
 
+    dm_stdio_freset,
     dm_stdio_ferror,
     dm_stdio_fseek,
     dm_stdio_fsize,
@@ -288,6 +298,7 @@
 {
     "StdioFH",
 
+    dm_stdio_freset,
     dm_stdio_ferror,
     dm_stdio_fseek,
     dm_stdio_fsize,
@@ -421,6 +432,13 @@
 #endif
 
 
+static int dm_mem_freset(DMResource * f)
+{
+    f->rawOffset = 0;
+    return DMERR_OK;
+}
+
+
 static int dm_mem_ferror(DMResource * f)
 {
     return f->error;
@@ -548,6 +566,7 @@
 {
     "PackFS",
 
+    dm_mem_freset,
     dm_mem_ferror,
     dm_mem_fseek,
     dm_mem_fsize,
@@ -560,7 +579,7 @@
     
     dm_pack_fopen,
     dm_pack_fclose,
-    dm_pack_preload
+    dm_pack_preload,
 };
 #endif
 
@@ -569,6 +588,7 @@
 {
     "MemIO",
 
+    dm_mem_freset,
     dm_mem_ferror,
     dm_mem_fseek,
     dm_mem_fsize,
@@ -588,13 +608,6 @@
 /* FS file handling functions. These functions call the actual
  * functions depending on where the file is located.
  */
-static void dmResourceReset(DMResource *handle)
-{
-    if (handle != NULL && handle->fops != NULL)
-        dmfseek(handle, 0, SEEK_SET);
-}
-
-
 static int dmResourcePreload(DMResource *handle)
 {
     int ret = DMERR_INIT_FAIL;
@@ -612,7 +625,7 @@
                 handle->flags |= DMF_LOADED_RAW | DMF_PERSIST;
         }
 
-        dmResourceReset(handle);
+        dmfreset(handle);
     }
 
     // Check if resource data is to be preloaded
@@ -634,7 +647,7 @@
                 handle->flags |= DMF_LOADED_RES;
         }
 
-        dmResourceReset(handle);
+        dmfreset(handle);
     }
 
     return ret;
@@ -707,7 +720,7 @@
 
     // Increase refcount
     dmResourceRef(handle);
-    dmResourceReset(handle);
+    dmfreset(handle);
     return DMERR_OK;
 }
 
@@ -760,6 +773,17 @@
 }
 
 
+int dmfreset(DMResource *f)
+{
+    if (f == NULL)
+        return DMERR_NULLPTR;
+    
+    if (f->fops == NULL || f->fops->freset == NULL)
+        return DMERR_OK;
+    
+    return f->fops->freset(f);
+}
+
 int dmferror(DMResource * f)
 {
     f->atime = time(NULL);
--- a/dmres.h	Sun Apr 21 19:46:52 2013 +0300
+++ b/dmres.h	Sun Apr 21 19:58:59 2013 +0300
@@ -109,6 +109,8 @@
 typedef struct DMResourceOps
 {
     char    *name;
+
+    int     (*freset)(DMResource *);
     int     (*ferror)(DMResource *);
     int     (*fseek)(DMResource *, const off_t, const int);
     off_t   (*fsize)(DMResource *);
@@ -153,6 +155,7 @@
 
 
 // Basic resource access functions
+int          dmfreset(DMResource *);
 int          dmferror(DMResource *);
 int          dmfseek(DMResource *, const off_t, const int);
 off_t        dmfsize(DMResource *);