Mercurial > hg > dmlib
changeset 2446:8193f62a541d
Remove some useless complexity from resource system .. could remove more.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 10 Mar 2020 00:20:05 +0200 |
parents | fa089a430121 |
children | b0f25a42fd23 |
files | src/dmres.c src/dmres.h |
diffstat | 2 files changed, 21 insertions(+), 77 deletions(-) [+] |
line wrap: on
line diff
--- a/src/dmres.c Mon Mar 09 22:37:00 2020 +0200 +++ b/src/dmres.c Tue Mar 10 00:20:05 2020 +0200 @@ -315,6 +315,10 @@ { "Stdio", + dm_stdio_fopen, + dm_stdio_fclose, + dm_stdio_preload, + dm_stdio_freset, dm_stdio_ferror, dm_stdio_fseek, @@ -325,16 +329,16 @@ dm_stdio_fputc, dm_stdio_fread, dm_stdio_fwrite, - - dm_stdio_fopen, - dm_stdio_fclose, - dm_stdio_preload }; DMResourceOps dfStdioFHOps = { "StdioFH", + NULL, + NULL, + NULL, + dm_stdio_freset, dm_stdio_ferror, dm_stdio_fseek, @@ -346,9 +350,6 @@ dm_stdio_fread, dm_stdio_fwrite, - NULL, - NULL, - NULL }; #endif @@ -737,6 +738,10 @@ { "PackFS", + dm_pack_fopen, + dm_pack_fclose, + dm_pack_preload, + dm_mem_freset, dm_mem_ferror, dm_mem_fseek, @@ -748,9 +753,6 @@ dm_mem_fread, NULL, - dm_pack_fopen, - dm_pack_fclose, - dm_pack_preload, }; #endif @@ -759,6 +761,10 @@ { "MemIO", + NULL, + NULL, + NULL, + dm_mem_freset, dm_mem_ferror, dm_mem_fseek, @@ -769,10 +775,6 @@ dm_mem_fputc, dm_mem_fread, dm_mem_fwrite, - - NULL, - NULL, - NULL }; @@ -856,20 +858,7 @@ // Check if the data is preloaded if ((ret = handle->fops->fopen(handle)) == DMERR_OK) - { dmResourceRef(handle); - if (handle->flags & DMF_TEMPORARY) - { - handle->flags &= ~DMF_TEMPORARY; - dmResourceInsert(lib, handle); - } - } - else - if (handle->flags & DMF_TEMPORARY) - { - dmResourceFree(handle); - *phandle = handle = NULL; - } dmfreset(handle); return ret; @@ -966,63 +955,54 @@ int dmferror(DMResource *fh) { - fh->atime = time(NULL); return fh->fops->ferror(fh); } int dmfseek(DMResource *fh, const off_t offset, const int whence) { - fh->atime = time(NULL); return fh->fops->fseek(fh, offset, whence); } off_t dmfsize(DMResource *fh) { - fh->atime = time(NULL); return fh->fops->fsize(fh); } off_t dmftell(DMResource *fh) { - fh->atime = time(NULL); return fh->fops->ftell(fh); } BOOL dmfeof(DMResource *fh) { - fh->atime = time(NULL); return fh->fops->feof(fh); } int dmfgetc(DMResource *fh) { - fh->atime = time(NULL); return fh->fops->fgetc(fh); } int dmfputc(const int val, DMResource *fh) { - fh->atime = time(NULL); return fh->fops->fputc(val, fh); } size_t dmfread(void *ptr, size_t size, size_t nmemb, DMResource *fh) { - fh->atime = time(NULL); return fh->fops->fread(ptr, size, nmemb, fh); } size_t dmfwrite(const void *ptr, size_t size, size_t nmemb, DMResource *fh) { - fh->atime = time(NULL); return fh->fops->fwrite(ptr, size, nmemb, fh); } @@ -1058,7 +1038,6 @@ int res; dmLockLibMutex(node->lib); - node->atime = time(NULL); res = ++node->refcount; dmUnlockLibMutex(node->lib); @@ -1310,33 +1289,6 @@ } -void dmResourcePrune(DMResourceLib *lib, const int agems, int const flags) -{ - DMResource *node; - const int stamp = time(NULL); - dmLockLibMutex(lib); - - for (node = lib->resources; node != NULL; node = node->next) - { - // Check if node has refcount of 0 and is - // not marked as persistent resource - if (node->refcount == 0 && - (node->flags & DMF_PERSIST) == 0 && - (node->flags & (DMF_LOADED_RES | DMF_LOADED_RAW))) - { - if (((flags & DMPRUNE_ATIME) && stamp - node->atime >= agems) || - ((flags & DMPRUNE_MTIME) && stamp - node->mtime >= agems)) - { - dmResourceFreeResData(node); - dmResourceFreeRawData(node); - } - } - } - - dmUnlockLibMutex(lib); -} - - /* Helper resource access routines */ int dmvfprintf(DMResource *fh, const char *fmt, va_list ap)
--- a/src/dmres.h Mon Mar 09 22:37:00 2020 +0200 +++ b/src/dmres.h Tue Mar 10 00:20:05 2020 +0200 @@ -22,12 +22,6 @@ */ enum { - DMPRUNE_ATIME = 0x0001, - DMPRUNE_MTIME = 0x0002, -}; - -enum -{ DRF_USE_PACK = 0x0001, DRF_USE_STDIO = 0x0002, DRF_PRELOAD_RAW = 0x0004, @@ -38,7 +32,6 @@ { DMF_PERSIST = 0x0001, // Persist loaded RAW resource DMF_COMPRESSED = 0x0002, // Resource is compressed in PACK file, otherwise raw - DMF_TEMPORARY = 0x0004, DMF_PACK_MASK = 0x00ff, // Mask for flags that may be specified in PACK DMF_UNALLOCATED = 0x1000, // The raw data is not allocated, so do not free it @@ -57,8 +50,6 @@ typedef struct DMResource { // Timestamps (in seconds from time()) - int mtime, // When resource was loaded - atime; // Last accessed (dmResourceRef()/unref) int refcount; // Reference count int flags; // Resource flags (DMF_*) @@ -116,6 +107,10 @@ { char *name; + int (*fopen)(DMResource *); + void (*fclose)(DMResource *); + int (*preload)(DMResource *); + int (*freset)(DMResource *); int (*ferror)(DMResource *); int (*fseek)(DMResource *, const off_t, const int); @@ -127,9 +122,6 @@ size_t (*fread)(void *, const size_t, const size_t, DMResource *); size_t (*fwrite)(const void *, const size_t, const size_t, DMResource *); - int (*fopen)(DMResource *); - void (*fclose)(DMResource *); - int (*preload)(DMResource *); } DMResourceOps; @@ -138,7 +130,6 @@ int dmResourcesInit(DMResourceLib **lib, const char *filename, const char *path, const int flags, int (*classifier)(DMResource *)); int dmResourcesClose(DMResourceLib *lib); -void dmResourcesPrune(DMResourceLib *lib, const int agems, int const flags); int dmResourcesPreload(DMResourceLib *lib, BOOL start, int *loaded, int *total); DMResource * dmResourceNew(DMResourceLib *lib, const char *filename, const size_t size, const int flags); @@ -146,6 +137,7 @@ void dmResourceInsert(DMResourceLib *lib, DMResource * node); void dmResourceDelete(DMResourceLib *lib, DMResource * node); DMResource * dmResourceFind(DMResourceLib *lib, const char *filename); + int dmResourceRef(DMResource *); int dmResourceUnref(DMResource *);