From babf467e15b5530670bb7a509b4c0bff6c3d9bbf Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Mon, 24 Oct 2005 23:35:18 +0000 Subject: [PATCH] (EFF_STATIC): New. (empfile): Use it. (ef_open): Oops on it (not implemented). (ef_close): Implement it (trivial). --- include/file.h | 1 + src/lib/common/file.c | 12 ++++++++++-- src/lib/global/file.c | 31 ++++++++++++++++--------------- 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/include/file.h b/include/file.h index 0485fe15e..8eb292831 100644 --- a/include/file.h +++ b/include/file.h @@ -73,6 +73,7 @@ struct empfile { /* Create table file, clobbering any existing file */ #define EFF_CREATE bit(5) /* Table is allocated statically */ +#define EFF_STATIC bit(6) /* Flags that may be passed to ef_open() */ #define EFF_OPEN (EFF_MEM | EFF_RDONLY | EFF_CREATE) diff --git a/src/lib/common/file.c b/src/lib/common/file.c index 51b9d222a..a45e14011 100644 --- a/src/lib/common/file.c +++ b/src/lib/common/file.c @@ -94,6 +94,12 @@ ef_open(int type, int how) return 0; } ep->fids = fsiz / ep->size; + + /* allocate cache */ + if (CANT_HAPPEN(ep->flags & EFF_STATIC)) { + /* not implemented */ + ep->flags &= ~EFF_STATIC; + } if (how & EFF_MEM) ep->csize = ep->fids; else @@ -140,8 +146,10 @@ ef_close(int type) retval = ef_flush(type); ep = &empfile[type]; ep->flags &= ~EFF_OPEN; - free(ep->cache); - ep->cache = NULL; + if (!(ep->flags & EFF_STATIC)) { + free(ep->cache); + ep->cache = NULL; + } if (close(ep->fd) < 0) { logerror("Error closing %s (%s)", ep->name, strerror(errno)); retval = 0; diff --git a/src/lib/global/file.c b/src/lib/global/file.c index 945e6f248..f41a98784 100644 --- a/src/lib/global/file.c +++ b/src/lib/global/file.c @@ -103,52 +103,53 @@ struct empfile empfile[] = { -1, -1, 0, 0, NULL, 0, lost_ca}, /* Static game data (configuation) */ - {EF_SECTOR_CHR, "sect chr", NULL, EFF_MEM, +#define EFF_CFG (EFF_RDONLY | EFF_MEM | EFF_STATIC) + {EF_SECTOR_CHR, "sect chr", NULL, EFF_CFG, sizeof(dchr[0]), NULL, NULL, NULL, -1, -1, 0, 0, (char *)dchr, 0, dchr_ca}, - {EF_SHIP_CHR, "ship chr", NULL, EFF_MEM, + {EF_SHIP_CHR, "ship chr", NULL, EFF_CFG, sizeof(mchr[0]), NULL, NULL, NULL, -1, -1, 0, 0, (char *)mchr, 0, mchr_ca}, - {EF_PLANE_CHR, "plane chr", NULL, EFF_MEM, + {EF_PLANE_CHR, "plane chr", NULL, EFF_CFG, sizeof(plchr[0]), NULL, NULL, NULL, -1, -1, 0, 0, (char *)plchr, 0, plchr_ca}, - {EF_LAND_CHR, "land chr", NULL, EFF_MEM, + {EF_LAND_CHR, "land chr", NULL, EFF_CFG, sizeof(lchr[0]), NULL, NULL, NULL, -1, -1, 0, 0, (char *)lchr, 0, lchr_ca}, - {EF_NUKE_CHR, "nuke chr", NULL, EFF_MEM, + {EF_NUKE_CHR, "nuke chr", NULL, EFF_CFG, sizeof(nchr[0]), NULL, NULL, NULL, -1, -1, 0, 0, (char *)nchr, 0, nchr_ca}, #if 0 /* FIXME rpt[] lacks sentinel, xdchr() doesn't terminate */ - {EF_, "news chr", NULL, EFF_MEM, + {EF_, "news chr", NULL, EFF_CFG, sizeof(rpt[0]), NULL, NULL, NULL, -1, -1, 0, 0, (char *)rpt, 0, rpt_ca}, #endif - {EF_TREATY_CHR, "treaty chr", NULL, EFF_MEM, + {EF_TREATY_CHR, "treaty chr", NULL, EFF_CFG, sizeof(tchr[0]), NULL, NULL, NULL, -1, -1, 0, 0, (char *)tchr, 0, tchr_ca}, - {EF_ITEM, "item", NULL, EFF_MEM, + {EF_ITEM, "item", NULL, EFF_CFG, sizeof(ichr[0]), NULL, NULL, NULL, -1, -1, 0, 0, (char *)ichr, 0, ichr_ca}, - {EF_INFRASTRUCTURE, "infrastructure", NULL, EFF_MEM, + {EF_INFRASTRUCTURE, "infrastructure", NULL, EFF_CFG, sizeof(intrchr[0]), NULL, NULL, NULL, -1, -1, 0, 0, (char *)intrchr, 0, intrchr_ca}, - {EF_PRODUCT, "product", NULL, EFF_MEM, + {EF_PRODUCT, "product", NULL, EFF_CFG, sizeof(pchr[0]), NULL, NULL, NULL, -1, -1, 0, 0, (char *)pchr, 0, pchr_ca}, - {EF_TABLE, "table", NULL, EFF_MEM, + {EF_TABLE, "table", NULL, EFF_CFG, sizeof(empfile[0]), NULL, NULL, NULL, -1, -1, 0, 0, (char *)empfile, 0, empfile_ca}, - {EF_SHIP_CHR_FLAGS, "ship chr flags", NULL, EFF_MEM, + {EF_SHIP_CHR_FLAGS, "ship chr flags", NULL, EFF_CFG, sizeof(ship_chr_flags[0]), NULL, NULL, NULL, -1, -1, 0, 0, (char *)ship_chr_flags, 0, lookup_ca}, - {EF_PLANE_CHR_FLAGS, "plane chr flags", NULL, EFF_MEM, + {EF_PLANE_CHR_FLAGS, "plane chr flags", NULL, EFF_CFG, sizeof(plane_chr_flags[0]), NULL, NULL, NULL, -1, -1, 0, 0, (char *)plane_chr_flags, 0, lookup_ca}, - {EF_LAND_CHR_FLAGS, "land chr flags", NULL, EFF_MEM, + {EF_LAND_CHR_FLAGS, "land chr flags", NULL, EFF_CFG, sizeof(land_chr_flags[0]), NULL, NULL, NULL, -1, -1, 0, 0, (char *)land_chr_flags, 0, lookup_ca}, - {EF_NUKE_CHR_FLAGS, "nuke chr flags", NULL, EFF_MEM, + {EF_NUKE_CHR_FLAGS, "nuke chr flags", NULL, EFF_CFG, sizeof(nuke_chr_flags[0]), NULL, NULL, NULL, -1, -1, 0, 0, (char *)nuke_chr_flags, 0, lookup_ca}, -- 2.43.0