]> git.pond.sub.org Git - empserver/commitdiff
(EFF_STATIC): New.
authorMarkus Armbruster <armbru@pond.sub.org>
Mon, 24 Oct 2005 23:35:18 +0000 (23:35 +0000)
committerMarkus Armbruster <armbru@pond.sub.org>
Mon, 24 Oct 2005 23:35:18 +0000 (23:35 +0000)
(empfile): Use it.
(ef_open): Oops on it (not implemented).
(ef_close): Implement it (trivial).

include/file.h
src/lib/common/file.c
src/lib/global/file.c

index 0485fe15ece8b44a398cf0f8e367659520c3d8c3..8eb292831b289574b2130438f32277faae4dbd97 100644 (file)
@@ -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)
index 51b9d222a5d90d08e46f90565caaefd5d333c073..a45e14011b24dc9a5182316a7d6835bd8ce0246f 100644 (file)
@@ -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;
index 945e6f248ef173d5dfa4ecb28dd9c2460a05c21a..f41a9878451ebd825d1633e27ec62894a6c67419 100644 (file)
@@ -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},