diff --git a/src/common/files.c b/src/common/files.c
index 7443ca7c18c4f3a58a3a29e8f326de2b148aa84a..91789f638b829061d41efe480276582e8dea2286 100644 (file)
--- a/src/common/files.c
+++ b/src/common/files.c
#include <stdint.h>
#include <assert.h>
-static void FILE_Reader_SetPos (Reader *r, int pos) {
+static long FILE_Reader_GetPos (Reader *r) {
+ FILE_Reader *rd = (FILE_Reader*)r;
+ assert(rd != NULL);
+ assert(rd->fp != NULL);
+ long pos = ftell(rd->fp);
+ assert(pos != -1); // fail
+ return pos;
+}
+
+static void FILE_Reader_SetPos (Reader *r, long pos) {
FILE_Reader *rd = (FILE_Reader*)r;
assert(rd != NULL);
assert(rd->fp != NULL);
void FILE_AssignReader (FILE_Reader *r, FILE *fp) {
assert(r != NULL);
assert(fp != NULL);
+ r->base.getpos = FILE_Reader_GetPos;
r->base.setpos = FILE_Reader_SetPos;
r->base.read = FILE_Reader_Read;
r->fp = fp;
if (r->fp != NULL) {
fclose(r->fp);
}
+ r->base.getpos = NULL;
r->base.setpos = NULL;
r->base.read = NULL;
r->fp = NULL;
}
-static void FILE_Writer_SetPos (Writer *w, int pos) {
+static long FILE_Writer_GetPos (Writer *w) {
+ FILE_Writer *wr = (FILE_Writer*)w;
+ assert(wr != NULL);
+ assert(wr->fp != NULL);
+ long pos = ftell(wr->fp);
+ assert(pos != -1); // fail
+ return pos;
+}
+
+static void FILE_Writer_SetPos (Writer *w, long pos) {
FILE_Writer *wr = (FILE_Writer*)w;
assert(wr != NULL);
assert(wr->fp != NULL);
void FILE_AssignWriter (FILE_Writer *w, FILE *fp) {
assert(w != NULL);
assert(fp != NULL);
+ w->base.getpos = FILE_Writer_GetPos;
w->base.setpos = FILE_Writer_SetPos;
w->base.write = FILE_Writer_Write;
w->fp = fp;
if (w->fp != NULL) {
fclose(w->fp);
}
+ w->base.getpos = NULL;
w->base.setpos = NULL;
w->base.write = NULL;
w->fp = NULL;