VM: simplifying the load_image() code
parent
fd801e7946
commit
b2bb1f8ff4
33
vm/image.cpp
33
vm/image.cpp
|
@ -210,31 +210,11 @@ char *threadsafe_strerror(int errnum) {
|
|||
return buf;
|
||||
}
|
||||
|
||||
FILE* factor_vm::open_image(vm_parameters* p) {
|
||||
if (!p->embedded_image)
|
||||
return OPEN_READ(p->image_path);
|
||||
|
||||
FILE* file = OPEN_READ(p->executable_path);
|
||||
if (file == NULL) {
|
||||
std::cout << "Cannot open embedded image" << std::endl;
|
||||
char *msg = threadsafe_strerror(errno);
|
||||
std::cout << "strerror:1: " << msg << std::endl;
|
||||
free(msg);
|
||||
exit(1);
|
||||
}
|
||||
embedded_image_footer footer;
|
||||
if (!read_embedded_image_footer(file, &footer)) {
|
||||
std::cout << "No embedded image" << std::endl;
|
||||
exit(1);
|
||||
}
|
||||
safe_fseek(file, (off_t)footer.image_offset, SEEK_SET);
|
||||
return file;
|
||||
}
|
||||
|
||||
// Read an image file from disk, only done once during startup
|
||||
// This function also initializes the data and code heaps
|
||||
void factor_vm::load_image(vm_parameters* p) {
|
||||
FILE* file = open_image(p);
|
||||
|
||||
FILE* file = OPEN_READ(p->image_path);
|
||||
if (file == NULL) {
|
||||
std::cout << "Cannot open image file: " << p->image_path << std::endl;
|
||||
char *msg = threadsafe_strerror(errno);
|
||||
|
@ -242,6 +222,15 @@ void factor_vm::load_image(vm_parameters* p) {
|
|||
free(msg);
|
||||
exit(1);
|
||||
}
|
||||
if (p->embedded_image) {
|
||||
embedded_image_footer footer;
|
||||
if (!read_embedded_image_footer(file, &footer)) {
|
||||
std::cout << "No embedded image" << std::endl;
|
||||
exit(1);
|
||||
}
|
||||
safe_fseek(file, (off_t)footer.image_offset, SEEK_SET);
|
||||
}
|
||||
|
||||
image_header h;
|
||||
if (raw_fread(&h, sizeof(image_header), 1, file) != 1)
|
||||
fatal_error("Cannot read image header", 0);
|
||||
|
|
|
@ -592,7 +592,6 @@ struct factor_vm {
|
|||
bool save_image(const vm_char* saving_filename, const vm_char* filename);
|
||||
void primitive_save_image();
|
||||
void fixup_heaps(cell data_offset, cell code_offset);
|
||||
FILE* open_image(vm_parameters* p);
|
||||
void load_image(vm_parameters* p);
|
||||
bool read_embedded_image_footer(FILE* file, embedded_image_footer* footer);
|
||||
bool embedded_image_p();
|
||||
|
|
Loading…
Reference in New Issue