32 lines
759 B
C
32 lines
759 B
C
static void * read_file(const char * filename)
|
|
{
|
|
int fd = open(filename, O_RDONLY);
|
|
if (fd == -1) {
|
|
fprintf(stderr, "open(%s): %s\n", filename, strerror(errno));
|
|
return NULL;
|
|
}
|
|
|
|
off_t size = lseek(fd, 0, SEEK_END);
|
|
if (size == (off_t)-1) {
|
|
fprintf(stderr, "lseek(%s, SEEK_END): %s\n", filename, strerror(errno));
|
|
return NULL;
|
|
}
|
|
|
|
off_t start = lseek(fd, 0, SEEK_SET);
|
|
if (start == (off_t)-1) {
|
|
fprintf(stderr, "lseek(%s, SEEK_SET): %s\n", filename, strerror(errno));
|
|
return NULL;
|
|
}
|
|
|
|
void * buf = malloc(size+1);
|
|
|
|
ssize_t read_size = read(fd, buf, size);
|
|
if (read_size == -1) {
|
|
fprintf(stderr, "read(%s): %s\n", filename, strerror(errno));
|
|
return NULL;
|
|
}
|
|
((char*)buf)[read_size] = 0;
|
|
|
|
return buf;
|
|
}
|