7 static void FILE_Reader_SetPos (Reader
*r
, int pos
) {
8 FILE_Reader
*rd
= (FILE_Reader
*)r
;
10 assert(rd
->fp
!= NULL
);
12 int res
= fseek(rd
->fp
, pos
, SEEK_SET
);
13 assert(res
== 0); // fail
16 static void FILE_Reader_Read (Reader
*r
, void *data
, size_t size
, size_t n
) {
17 FILE_Reader
*rd
= (FILE_Reader
*)r
;
19 assert(rd
->fp
!= NULL
);
20 size_t res
= fread(data
, size
, n
, rd
->fp
);
21 assert(res
== n
); // fail
24 void FILE_AssignReader (FILE_Reader
*r
, FILE *fp
) {
27 r
->base
.setpos
= FILE_Reader_SetPos
;
28 r
->base
.read
= FILE_Reader_Read
;
32 int FILE_OpenReader (FILE_Reader
*r
, const char *name
) {
35 FILE *fp
= fopen(name
, "rb");
37 FILE_AssignReader(r
, fp
);
42 void FILE_CloseReader (FILE_Reader
*r
) {
47 r
->base
.setpos
= NULL
;
52 static void FILE_Writer_SetPos (Writer
*w
, int pos
) {
53 FILE_Writer
*wr
= (FILE_Writer
*)w
;
55 assert(wr
->fp
!= NULL
);
57 int res
= fseek(wr
->fp
, pos
, SEEK_SET
);
58 assert(res
== 0); // fail
61 static void FILE_Writer_Write (Writer
*w
, const void *data
, size_t size
, size_t n
) {
62 FILE_Writer
*wr
= (FILE_Writer
*)w
;
64 assert(wr
->fp
!= NULL
);
65 size_t res
= fwrite(data
, size
, n
, wr
->fp
);
66 assert(res
== n
); // fail
69 void FILE_AssignWriter (FILE_Writer
*w
, FILE *fp
) {
72 w
->base
.setpos
= FILE_Writer_SetPos
;
73 w
->base
.write
= FILE_Writer_Write
;
77 int FILE_OpenWriter (FILE_Writer
*w
, const char *name
) {
80 FILE *fp
= fopen(name
, "wb");
82 FILE_AssignWriter(w
, fp
);
87 void FILE_CloseWriter (FILE_Writer
*w
) {
92 w
->base
.setpos
= NULL
;