summaryrefslogtreecommitdiff
path: root/com32/modules/elf.c
diff options
context:
space:
mode:
Diffstat (limited to 'com32/modules/elf.c')
-rw-r--r--com32/modules/elf.c57
1 files changed, 2 insertions, 55 deletions
diff --git a/com32/modules/elf.c b/com32/modules/elf.c
index 0b4aa35a..a049bc83 100644
--- a/com32/modules/elf.c
+++ b/com32/modules/elf.c
@@ -42,6 +42,7 @@
#include <elf.h>
#include <console.h>
+#include <syslinux/loadfile.h>
#include <syslinux/movebits.h>
/* If we don't have this much memory for the stack, signal failure */
@@ -59,60 +60,6 @@ static inline void error(const char *msg)
fputs(msg, stderr);
}
-/*
- * Load a file into memory
- */
-int read_file(const char *filename, void **ptr, size_t *lenp)
-{
- int fd;
- size_t len;
- ssize_t rv;
- struct stat st;
- char *data = NULL;
-
- dprintf("filename = \"%s\"\n", filename);
-
- fd = open(filename, O_RDONLY);
- if (fd < 0)
- return -1;
-
- dprintf("file open...\n");
-
- if (fstat(fd, &st) < 0)
- goto bail;
-
- len = st.st_size;
-
- dprintf("Allocating %zu bytes...\n", len);
-
- data = malloc(len);
- if (!data)
- goto bail;
-
- *ptr = data;
- *lenp = len;
-
- while (len) {
- dprintf("Reading %zu bytes... ", len);
- rv = read(fd, data, len);
- dprintf("%zd bytes read\n", rv);
- if (rv <= 0)
- goto bail; /* Syslinux doesn't EINTR */
- data += rv;
- len -= rv;
- }
-
- close(fd);
-
- return 0; /* All data read */
-
- bail:
- if (data)
- free(data);
- close(fd);
- return -1;
-}
-
int boot_elf(void *ptr, size_t len, char **argv)
{
char *cptr = ptr;
@@ -328,7 +275,7 @@ int main(int argc, char *argv[])
return 1;
}
- if (read_file(argv[1], &data, &data_len)) {
+ if (loadfile(argv[1], &data, &data_len)) {
error("Unable to load file\n");
return 1;
}