summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fileio.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/fileio.c b/fileio.c
index bd5da1e6c..9baa5ed79 100644
--- a/fileio.c
+++ b/fileio.c
@@ -83,16 +83,20 @@ void FioReadBlock(void *ptr, uint size)
fread(ptr, 1, size, _fio.cur_fh);
}
+static inline void FioCloseFile(int slot)
+{
+ if (_fio.handles[slot] != NULL) {
+ fclose(_fio.handles[slot]);
+ _fio.handles[slot] = NULL;
+ }
+}
+
void FioCloseAll(void)
{
int i;
- for (i = 0; i != lengthof(_fio.handles); i++) {
- if (_fio.handles[i] != NULL) {
- fclose(_fio.handles[i]);
- _fio.handles[i] = NULL;
- }
- }
+ for (i = 0; i != lengthof(_fio.handles); i++)
+ FioCloseFile(i);
}
void FioOpenFile(int slot, const char *filename)
@@ -126,6 +130,7 @@ void FioOpenFile(int slot, const char *filename)
if (f == NULL)
error("Cannot open file '%s'", buf);
+ FioCloseFile(slot); // if file was opened before, close it
_fio.handles[slot] = f;
FioSeekToFile(slot << 24);
}