mirror of
https://github.com/vivier/EMILE.git
synced 2025-08-15 07:27:41 +00:00
Add load_chainloader()
This commit is contained in:
@@ -262,3 +262,33 @@ char *load_ramdisk(char* path, unsigned long *ramdisk_size)
|
|||||||
|
|
||||||
return ramdisk_start;
|
return ramdisk_start;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char* load_chainloader(char *path)
|
||||||
|
{
|
||||||
|
stream_t *stream;
|
||||||
|
struct stream_stat stat;
|
||||||
|
char *loader;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
stream = stream_open(path);
|
||||||
|
if (stream == NULL)
|
||||||
|
{
|
||||||
|
printf("Cannot load chainloader\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
stream_fstat(stream, &stat);
|
||||||
|
loader = (char*)malloc(stat.st_size + 4);
|
||||||
|
loader = (char*)(((unsigned long)loader + 3) & 0xFFFFFFFC);
|
||||||
|
|
||||||
|
ret = stream_read(stream, loader, stat.st_size);
|
||||||
|
|
||||||
|
stream_close(stream);
|
||||||
|
|
||||||
|
if (ret != stat.st_size)
|
||||||
|
{
|
||||||
|
free(loader);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return loader;
|
||||||
|
}
|
||||||
|
@@ -6,3 +6,4 @@
|
|||||||
|
|
||||||
extern char* load_kernel(char* path, int bootstrap_size, unsigned long *base, unsigned long *entry, unsigned long *size);
|
extern char* load_kernel(char* path, int bootstrap_size, unsigned long *base, unsigned long *entry, unsigned long *size);
|
||||||
extern char* load_ramdisk(char* path, unsigned long *ramdisk_size);
|
extern char* load_ramdisk(char* path, unsigned long *ramdisk_size);
|
||||||
|
extern char* load_chainloader(char *path);
|
||||||
|
Reference in New Issue
Block a user