DEADSOFTWARE

streams: use single stram object for read and write
[flatwaifu.git] / src / common / files.c
index 91789f638b829061d41efe480276582e8dea2286..792df2d1afc70188946e986328309447002732ff 100644 (file)
@@ -4,8 +4,8 @@
 #include <stdint.h>
 #include <assert.h>
 
-static long FILE_Reader_GetPos (Reader *r) {
-  FILE_Reader *rd = (FILE_Reader*)r;
+static long FILE_Stream_GetPos (Stream *r) {
+  FILE_Stream *rd = (FILE_Stream*)r;
   assert(rd != NULL);
   assert(rd->fp != NULL);
   long pos = ftell(rd->fp);
@@ -13,8 +13,8 @@ static long FILE_Reader_GetPos (Reader *r) {
   return pos;
 }
 
-static void FILE_Reader_SetPos (Reader *r, long pos) {
-  FILE_Reader *rd = (FILE_Reader*)r;
+static void FILE_Stream_SetPos (Stream *r, long pos) {
+  FILE_Stream *rd = (FILE_Stream*)r;
   assert(rd != NULL);
   assert(rd->fp != NULL);
   assert(pos >= 0);
@@ -22,96 +22,50 @@ static void FILE_Reader_SetPos (Reader *r, long pos) {
   assert(res == 0); // fail
 }
 
-static void FILE_Reader_Read (Reader *r, void *data, size_t size, size_t n) {
-  FILE_Reader *rd = (FILE_Reader*)r;
+static void FILE_Stream_Read (Stream *r, void *data, size_t size, size_t n) {
+  FILE_Stream *rd = (FILE_Stream*)r;
   assert(rd != NULL);
   assert(rd->fp != NULL);
   size_t res = fread(data, size, n, rd->fp);
   assert(res == n); // fail
 }
 
-void FILE_AssignReader (FILE_Reader *r, FILE *fp) {
+static void FILE_Stream_Write (Stream *w, const void *data, size_t size, size_t n) {
+  FILE_Stream *wr = (FILE_Stream*)w;
+  assert(wr != NULL);
+  assert(wr->fp != NULL);
+  size_t res = fwrite(data, size, n, wr->fp);
+  assert(res == n); // fail
+}
+
+void FILE_Assign (FILE_Stream *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->base.getpos = FILE_Stream_GetPos;
+  r->base.setpos = FILE_Stream_SetPos;
+  r->base.read   = FILE_Stream_Read;
+  r->base.write  = FILE_Stream_Write;
   r->fp = fp;
 }
 
-int FILE_OpenReader (FILE_Reader *r, const char *name) {
+int FILE_Open (FILE_Stream *r, const char *name, const char *mode) {
   assert(r != NULL);
   assert(name != NULL);
-  FILE *fp = fopen(name, "rb");
+  FILE *fp = fopen(name, mode);
   if (fp) {
-    FILE_AssignReader(r, fp);
+    FILE_Assign(r, fp);
   }
   return fp != NULL;
 }
 
-void FILE_CloseReader (FILE_Reader *r) {
+void FILE_Close (FILE_Stream *r) {
   assert(r != NULL);
   if (r->fp != NULL) {
     fclose(r->fp);
   }
   r->base.getpos = NULL;
   r->base.setpos = NULL;
-  r->base.read = NULL;
+  r->base.read   = NULL;
+  r->base.write  = NULL;
   r->fp = NULL;
 }
-
-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);
-  assert(pos >= 0);
-  int res = fseek(wr->fp, pos, SEEK_SET);
-  assert(res == 0); // fail
-}
-
-static void FILE_Writer_Write (Writer *w, const void *data, size_t size, size_t n) {
-  FILE_Writer *wr = (FILE_Writer*)w;
-  assert(wr != NULL);
-  assert(wr->fp != NULL);
-  size_t res = fwrite(data, size, n, wr->fp);
-  assert(res == n); // fail
-}
-
-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;
-}
-
-int FILE_OpenWriter (FILE_Writer *w, const char *name) {
-  assert(w != NULL);
-  assert(name != NULL);
-  FILE *fp = fopen(name, "wb");
-  if (fp) {
-    FILE_AssignWriter(w, fp);
-  }
-  return fp != NULL;
-}
-
-void FILE_CloseWriter (FILE_Writer *w) {
-  assert(w != NULL);
-  if (w->fp != NULL) {
-    fclose(w->fp);
-  }
-  w->base.getpos = NULL;
-  w->base.setpos = NULL;
-  w->base.write = NULL;
-  w->fp = NULL;
-}