]> gitweb.factorcode.org Git - factor.git/commitdiff
vm: factor out embedded image detection code
authorJoe Groff <arcata@gmail.com>
Sun, 27 Nov 2011 22:39:21 +0000 (14:39 -0800)
committerJoe Groff <arcata@gmail.com>
Sun, 27 Nov 2011 22:39:21 +0000 (14:39 -0800)
vm/image.cpp
vm/vm.hpp

index d8c9f9f4701c987054019cd670473693518426a6..f34968a594882b40aa252778a56150f9cfad9213 100755 (executable)
@@ -219,6 +219,13 @@ void factor_vm::fixup_code(cell data_offset, cell code_offset)
        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)
 {
        if (p->embedded_image)
@@ -230,10 +237,8 @@ FILE* factor_vm::open_image(vm_parameters *p)
                        std::cout << strerror(errno) << std::endl;
                        exit(1);
                }
-               safe_fseek(file, -sizeof(embedded_image_footer), SEEK_END);
                embedded_image_footer footer;
-               safe_fread(&footer, sizeof(embedded_image_footer), 1, file);
-               if (footer.magic != image_magic)
+               if (!read_embedded_image_footer(file, &footer))
                {
                        std::cout << "No embedded image" << std::endl;
                        exit(1);
@@ -373,11 +378,10 @@ bool factor_vm::embedded_image_p()
        FILE *file = OPEN_READ(vm_path);
        if (!file)
                return false;
-       safe_fseek(file, -sizeof(embedded_image_footer), SEEK_END);
        embedded_image_footer footer;
-       safe_fread(&footer, sizeof(embedded_image_footer), 1, file);
+       bool embedded_p = read_embedded_image_footer(file, &footer);
        fclose(file);
-       return footer.magic == image_magic;
+       return embedded_p;
 }
 
 }
index f3bf5a06eff86c8aaad3fd1a764db5575843ddfa..1a96362900c93b1033e15695f30bc9ea2998d64d 100755 (executable)
--- a/vm/vm.hpp
+++ b/vm/vm.hpp
@@ -612,6 +612,7 @@ struct factor_vm
        void fixup_code(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();
 
        // callstack