aboutsummaryrefslogtreecommitdiff
path: root/nerv/lib/io/chunk_file.c
diff options
context:
space:
mode:
authorDeterminant <ted.sybil@gmail.com>2015-06-24 22:48:24 +0800
committerDeterminant <ted.sybil@gmail.com>2015-06-24 22:48:24 +0800
commit5e407d74130accfbbf94d2cabcb03fc126a89410 (patch)
tree6d8998e904a31a95f85a6e64ac7f3940fb61af80 /nerv/lib/io/chunk_file.c
parent8f13607cba9d6cf4fc4a213ba5ae4bcd46f7e18d (diff)
separate non-Lua part of matrix code to a dedicated dir
Diffstat (limited to 'nerv/lib/io/chunk_file.c')
-rw-r--r--nerv/lib/io/chunk_file.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/nerv/lib/io/chunk_file.c b/nerv/lib/io/chunk_file.c
index a305962..e70ffc9 100644
--- a/nerv/lib/io/chunk_file.c
+++ b/nerv/lib/io/chunk_file.c
@@ -91,6 +91,7 @@ static ChunkFile *open_write(const char *fn, int *status) {
}
cfp = (ChunkFile *)malloc(sizeof(ChunkFile));
cfp->fp = fp;
+ cfp->info = NULL;
cfp->status = CF_WRITE;
*status = CF_NORMAL;
return cfp;
@@ -111,8 +112,6 @@ static ChunkFile *open_read(const char *fn, int *status) {
return NULL;
}
cfp = (ChunkFile *)malloc(sizeof(ChunkFile));
- cfp->fp = fp;
- cfp->status = CF_READ;
offset = ftello(fp);
/* fprintf(stderr, "%d\n", (int)offset); */
for (i = 0;; offset += chunk_len, i++)
@@ -144,7 +143,9 @@ static ChunkFile *open_read(const char *fn, int *status) {
head = cip;
}
*status = CF_NORMAL;
+ cfp->fp = fp;
cfp->info = head;
+ cfp->status = CF_READ;
return cfp;
}
@@ -208,13 +209,16 @@ void nerv_chunk_file_close(ChunkFile *cfp) {
void nerv_chunk_file_destroy(ChunkFile *cfp) {
ChunkInfo *i, *ni;
- if (cfp->status != CF_CLOSED) fclose(cfp->fp);
- for (i = cfp->info; i; i = ni)
+ if (cfp->info)
{
- ni = i->next;
- free(i->metadata);
- free(i);
+ for (i = cfp->info; i; i = ni)
+ {
+ ni = i->next;
+ free(i->metadata);
+ free(i);
+ }
}
+ if (cfp->status != CF_CLOSED) fclose(cfp->fp);
free(cfp);
}