ed28bb8716018632481cc10a6e402f1bcc60485a
9 /* Read binary or text assets in full from file */
10 static void *cxr_asset_read_s( const char *path
, i64
*size
);
11 static void *cxr_asset_read( const char *path
);
12 static char *cxr_textasset_read_s( const char *path
, i64
*size
);
13 static char *cxr_textasset_read( const char *name
);
15 static i64
cxr_file_size( FILE *fileptr
);
18 /* Returns pointer to the extension in path */
19 static char *cxr_findext( char *path
, char const delim
);
20 static char *cxr_findsep( char *path
);
22 static void cxr_stripext( char *path
);
23 static int cxr_path_is_abs( char const *path
);
24 static char *cxr_filename( char *path
);
26 /* Remove one level (nop if can't) eg: /home/harry/test.file -> /home/harry/ */
27 static void cxr_downlvl( char *path
);
30 #define CXR_FOLDER_CHAR '\\'
32 #define CXR_FOLDER_CHAR '/'
35 static i64
cxr_file_size( FILE *fileptr
)
37 fseek( fileptr
, 0, SEEK_END
);
38 i64 fsize
= ftell( fileptr
);
39 fseek( fileptr
, 0, SEEK_SET
);
44 static void *fs_disk_open_read( const char *path
, int reserve_end
, i64
*size
)
46 FILE *f
= fopen( path
, "rb" );
49 i64 fsize
= cxr_file_size( f
);
50 void *buf
= malloc( fsize
+ reserve_end
);
54 if( fread( buf
, 1, fsize
, f
) != fsize
)
72 static char *fs_disk_load_text( const char *path
, i64
*size
)
77 if( (buf
= fs_disk_open_read( path
, 1, &fsize
)) )
88 static void *cxr_asset_read_s( const char *path
, i64
*size
)
90 return fs_disk_open_read( path
, 0, size
);
93 static void *cxr_asset_read( const char *path
)
96 return fs_disk_open_read( path
, 0, &size
);
99 static char *cxr_textasset_read_s( const char *path
, i64
*size
)
101 return fs_disk_load_text( path
, size
);
104 static char *cxr_textasset_read( const char *name
)
107 return fs_disk_load_text( name
, &size
);
110 static char *cxr_findext( char *path
, char const delim
)
130 static char *cxr_findsep( char *path
)
139 if( *c
== '/' || *c
== '\\' )
150 static void cxr_stripext( char *path
)
155 if( !(start
= cxr_findsep( path
)) )
160 if( (point
= cxr_findext( start
, '.' )) )
169 static void cxr_downlvl( char *path
)
171 char *start_name
, *c
;
179 path
[ len
-1 ] = 0x00;
181 if( (start_name
= cxr_findsep( path
) ))
187 static char *cxr_filename( char *path
)
190 if( (base_name
= cxr_findsep( path
) ))
196 static int cxr_path_is_abs( char const *path
)
199 if( strlen( path
) < 2 ) return 0;
200 return path
[1] == ':';
202 if( strlen( path
) < 1 ) return 0;
203 return path
[0] == '/';
207 static char *cxr_str_clone( char const *str
, int extra
)
209 char *newstr
= malloc(strlen(str
)+1+extra
);
210 strcpy( newstr
, str
);
215 #endif /* CXR_IO_H */