diff options
Diffstat (limited to 'nerv/lib/io/chunk_file.c')
-rw-r--r-- | nerv/lib/io/chunk_file.c | 18 |
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); } |