1 #include "common/files.h"
7 static long FILE_Stream_GetPos (Stream
*r
) {
9 FILE_Stream
*rd
= (FILE_Stream
*)r
;
11 assert(rd
->fp
!= NULL
);
13 assert(pos
!= -1); // fail
17 static void FILE_Stream_SetPos (Stream
*r
, long pos
) {
19 FILE_Stream
*rd
= (FILE_Stream
*)r
;
21 assert(rd
->fp
!= NULL
);
23 res
= fseek(rd
->fp
, pos
, SEEK_SET
);
24 assert(res
== 0); // fail
27 static long FILE_Stream_GetLen (Stream
*r
) {
30 FILE_Stream
*rd
= (FILE_Stream
*)r
;
32 assert(rd
->fp
!= NULL
);
34 assert(pos
!= -1); // fail get cur pos
35 res
= fseek(rd
->fp
, 0, SEEK_END
);
36 assert(res
== 0); // fail jump to end
38 res
= fseek(rd
->fp
, pos
, SEEK_SET
);
39 assert(res
== 0); // fail return
40 assert(len
!= -1); // fail get length
44 static void FILE_Stream_Read (Stream
*r
, void *data
, size_t size
, size_t n
) {
46 FILE_Stream
*rd
= (FILE_Stream
*)r
;
48 assert(rd
->fp
!= NULL
);
49 res
= fread(data
, size
, n
, rd
->fp
);
50 assert(res
== n
); // fail
53 static void FILE_Stream_Write (Stream
*w
, const void *data
, size_t size
, size_t n
) {
55 FILE_Stream
*wr
= (FILE_Stream
*)w
;
57 assert(wr
->fp
!= NULL
);
58 res
= fwrite(data
, size
, n
, wr
->fp
);
59 assert(res
== n
); // fail
62 void FILE_Assign (FILE_Stream
*r
, FILE *fp
) {
65 r
->base
.getpos
= FILE_Stream_GetPos
;
66 r
->base
.setpos
= FILE_Stream_SetPos
;
67 r
->base
.getlen
= FILE_Stream_GetLen
;
68 r
->base
.read
= FILE_Stream_Read
;
69 r
->base
.write
= FILE_Stream_Write
;
73 int FILE_Open (FILE_Stream
*r
, const char *name
, const char *mode
) {
77 fp
= fopen(name
, mode
);
84 void FILE_Close (FILE_Stream
*r
) {
89 r
->base
.getpos
= NULL
;
90 r
->base
.setpos
= NULL
;
91 r
->base
.getlen
= NULL
;