vm: factor out embedded image detection code
parent
63c4bb40e3
commit
26226d460e
16
vm/image.cpp
16
vm/image.cpp
|
@ -219,6 +219,13 @@ void factor_vm::fixup_code(cell data_offset, cell code_offset)
|
||||||
code->allocator->iterate(updater,fixup);
|
code->allocator->iterate(updater,fixup);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool factor_vm::read_embedded_image_footer(FILE *file, embedded_image_footer *footer)
|
||||||
|
{
|
||||||
|
safe_fseek(file, -(off_t)sizeof(embedded_image_footer), SEEK_END);
|
||||||
|
safe_fread(footer, (off_t)sizeof(embedded_image_footer), 1, file);
|
||||||
|
return footer->magic == image_magic;
|
||||||
|
}
|
||||||
|
|
||||||
FILE* factor_vm::open_image(vm_parameters *p)
|
FILE* factor_vm::open_image(vm_parameters *p)
|
||||||
{
|
{
|
||||||
if (p->embedded_image)
|
if (p->embedded_image)
|
||||||
|
@ -230,10 +237,8 @@ FILE* factor_vm::open_image(vm_parameters *p)
|
||||||
std::cout << strerror(errno) << std::endl;
|
std::cout << strerror(errno) << std::endl;
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
safe_fseek(file, -sizeof(embedded_image_footer), SEEK_END);
|
|
||||||
embedded_image_footer footer;
|
embedded_image_footer footer;
|
||||||
safe_fread(&footer, sizeof(embedded_image_footer), 1, file);
|
if (!read_embedded_image_footer(file, &footer))
|
||||||
if (footer.magic != image_magic)
|
|
||||||
{
|
{
|
||||||
std::cout << "No embedded image" << std::endl;
|
std::cout << "No embedded image" << std::endl;
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -373,11 +378,10 @@ bool factor_vm::embedded_image_p()
|
||||||
FILE *file = OPEN_READ(vm_path);
|
FILE *file = OPEN_READ(vm_path);
|
||||||
if (!file)
|
if (!file)
|
||||||
return false;
|
return false;
|
||||||
safe_fseek(file, -sizeof(embedded_image_footer), SEEK_END);
|
|
||||||
embedded_image_footer footer;
|
embedded_image_footer footer;
|
||||||
safe_fread(&footer, sizeof(embedded_image_footer), 1, file);
|
bool embedded_p = read_embedded_image_footer(file, &footer);
|
||||||
fclose(file);
|
fclose(file);
|
||||||
return footer.magic == image_magic;
|
return embedded_p;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -612,6 +612,7 @@ struct factor_vm
|
||||||
void fixup_code(cell data_offset, cell code_offset);
|
void fixup_code(cell data_offset, cell code_offset);
|
||||||
FILE *open_image(vm_parameters *p);
|
FILE *open_image(vm_parameters *p);
|
||||||
void load_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();
|
bool embedded_image_p();
|
||||||
|
|
||||||
// callstack
|
// callstack
|
||||||
|
|
Loading…
Reference in New Issue