(ef_close): Reset member fd.
(ef_open): Catch attempt to open open file.
This commit is contained in:
parent
a3dd70f8c0
commit
bfd14661c5
2 changed files with 6 additions and 2 deletions
|
@ -46,7 +46,7 @@ struct empfile {
|
|||
void (*init) (int, char *); /* call this when object is created */
|
||||
int (*postread) (int, char *); /* specific massage routines for items */
|
||||
int (*prewrite) (int, char *);
|
||||
int fd; /* file descriptor */
|
||||
int fd; /* file descriptor, -1 if not open */
|
||||
int baseid; /* starting item in cache */
|
||||
int cids; /* # ids in cache */
|
||||
int csize; /* size of cache in bytes */
|
||||
|
|
|
@ -49,10 +49,11 @@
|
|||
static void fillcache(struct empfile *ep, int start);
|
||||
|
||||
/*
|
||||
* Open a the file for table TYPE (EF_SECTOR, ...).
|
||||
* Open the binary file for table TYPE (EF_SECTOR, ...).
|
||||
* MODE is passed to open().
|
||||
* HOW are EFF_OPEN flags to control operation.
|
||||
* Return non-zero on success, zero on failure.
|
||||
* You must call ef_close() before the next ef_open().
|
||||
*/
|
||||
int
|
||||
ef_open(int type, int mode, int how)
|
||||
|
@ -68,6 +69,8 @@ ef_open(int type, int mode, int how)
|
|||
if (CANT_HAPPEN(how & ~EFF_OPEN))
|
||||
how &= EFF_OPEN;
|
||||
ep = &empfile[type];
|
||||
if (CANT_HAPPEN(ep->fd >= 0))
|
||||
return 0;
|
||||
if ((ep->fd = open(ep->file, mode, 0660)) < 0) {
|
||||
logerror("%s: open failed", ep->file);
|
||||
return 0;
|
||||
|
@ -121,6 +124,7 @@ ef_close(int type)
|
|||
if ((r = close(ep->fd)) < 0) {
|
||||
logerror("ef_close: %s close(%d) -> %d", ep->name, ep->fd, r);
|
||||
}
|
||||
ep->fd = -1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue