Mercurial > hg > dmlib
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 *);