-
Notifications
You must be signed in to change notification settings - Fork 1
/
FileSys.c
59 lines (45 loc) · 1.21 KB
/
FileSys.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// MT, 2016mar19
#include <stdlib.h>
#include <assert.h>
#include <sys/stat.h>
#include "Deb.h"
#include "FileSys.h"
/** Source: http://stackoverflow.com/questions/8236/how-do-you-determine-the-size-of-a-file-in-c
*/
off_t FileSys_GetFileSize(char const * const inPath)
{
struct stat s;
assert(inPath!=NULL);
if(stat(inPath, &s)==0)
{
return s.st_size; // *** RETURN ***
}
return -1;
}
unsigned char * FileSys_loadFile(
char const * const inPath, off_t * const inOutSize)
{
*inOutSize = -1;
off_t const signed_size = FileSys_GetFileSize(inPath);
if(signed_size==-1)
{
Deb_line("Error: Failed to get size of file \"%s\"!", inPath)
return NULL;
}
FILE * const file = fopen(inPath, "rb");
if(file==NULL)
{
Deb_line("Error: Failed to open source file \"%s\"!", inPath)
return NULL;
}
size_t const size = (size_t)signed_size;
unsigned char * const buf = malloc(size*sizeof(*buf));
if(fread(buf, sizeof(*buf), size, file)!=size)
{
Deb_line("Error: Failed to completely load character ROM file content!")
return NULL;
}
fclose(file);
*inOutSize = signed_size;
return buf;
}