(EFF_STATIC): New.

(empfile): Use it.
(ef_open): Oops on it (not implemented).
(ef_close): Implement it (trivial).
This commit is contained in:
Markus Armbruster 2005-10-24 23:35:18 +00:00
parent 62c80be94c
commit babf467e15
3 changed files with 27 additions and 17 deletions

View 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)

View 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;

View 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},