7 static long FILE_Stream_GetPos (Stream
*r
) {
8 FILE_Stream
*rd
= (FILE_Stream
*)r
;
10 assert(rd
->fp
!= NULL
);
11 long pos
= ftell(rd
->fp
);
12 assert(pos
!= -1); // fail
16 static void FILE_Stream_SetPos (Stream
*r
, long pos
) {
17 FILE_Stream
*rd
= (FILE_Stream
*)r
;
19 assert(rd
->fp
!= NULL
);
21 int res
= fseek(rd
->fp
, pos
, SEEK_SET
);
22 assert(res
== 0); // fail
25 static void FILE_Stream_Read (Stream
*r
, void *data
, size_t size
, size_t n
) {
26 FILE_Stream
*rd
= (FILE_Stream
*)r
;
28 assert(rd
->fp
!= NULL
);
29 size_t res
= fread(data
, size
, n
, rd
->fp
);
30 assert(res
== n
); // fail
33 static void FILE_Stream_Write (Stream
*w
, const void *data
, size_t size
, size_t n
) {
34 FILE_Stream
*wr
= (FILE_Stream
*)w
;
36 assert(wr
->fp
!= NULL
);
37 size_t res
= fwrite(data
, size
, n
, wr
->fp
);
38 assert(res
== n
); // fail
41 void FILE_Assign (FILE_Stream
*r
, FILE *fp
) {
44 r
->base
.getpos
= FILE_Stream_GetPos
;
45 r
->base
.setpos
= FILE_Stream_SetPos
;
46 r
->base
.read
= FILE_Stream_Read
;
47 r
->base
.write
= FILE_Stream_Write
;
51 int FILE_Open (FILE_Stream
*r
, const char *name
, const char *mode
) {
54 FILE *fp
= fopen(name
, mode
);
61 void FILE_Close (FILE_Stream
*r
) {
66 r
->base
.getpos
= NULL
;
67 r
->base
.setpos
= NULL
;