X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fcommon%2Ffiles.c;h=792df2d1afc70188946e986328309447002732ff;hb=65130d9f6581e4bd39ceae50d820c9774e4972a9;hp=91789f638b829061d41efe480276582e8dea2286;hpb=10bdd396f0cd0ff1fc0a504cd41949ff39937b30;p=flatwaifu.git diff --git a/src/common/files.c b/src/common/files.c index 91789f6..792df2d 100644 --- a/src/common/files.c +++ b/src/common/files.c @@ -4,8 +4,8 @@ #include #include -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; -}