Merge branch 'master' of git://factorcode.org/git/factor
commit
ef16e3d3f8
|
@ -1,6 +1,6 @@
|
||||||
! Copyright (C) 2005, 2007 Slava Pestov.
|
! Copyright (C) 2005, 2007 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: alien.c-types arrays cpu.x86.assembler
|
USING: accessors alien.c-types arrays cpu.x86.assembler
|
||||||
cpu.x86.architecture cpu.x86.intrinsics cpu.x86.sse2
|
cpu.x86.architecture cpu.x86.intrinsics cpu.x86.sse2
|
||||||
cpu.x86.allot cpu.architecture kernel kernel.private math
|
cpu.x86.allot cpu.architecture kernel kernel.private math
|
||||||
namespaces sequences generator.registers generator.fixup system
|
namespaces sequences generator.registers generator.fixup system
|
||||||
|
|
20
vm/image.c
20
vm/image.c
|
@ -101,7 +101,7 @@ void load_image(F_PARAMETERS *p)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Save the current image to disk */
|
/* Save the current image to disk */
|
||||||
void save_image(const F_CHAR *filename)
|
bool save_image(const F_CHAR *filename)
|
||||||
{
|
{
|
||||||
FILE* file;
|
FILE* file;
|
||||||
F_HEADER h;
|
F_HEADER h;
|
||||||
|
@ -112,7 +112,7 @@ void save_image(const F_CHAR *filename)
|
||||||
if(file == NULL)
|
if(file == NULL)
|
||||||
{
|
{
|
||||||
fprintf(stderr,"Cannot open image file: %s\n",strerror(errno));
|
fprintf(stderr,"Cannot open image file: %s\n",strerror(errno));
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
F_ZONE *tenured = &data_heap->generations[TENURED];
|
F_ZONE *tenured = &data_heap->generations[TENURED];
|
||||||
|
@ -143,20 +143,22 @@ void save_image(const F_CHAR *filename)
|
||||||
if(fwrite((void*)tenured->start,h.data_size,1,file) != 1)
|
if(fwrite((void*)tenured->start,h.data_size,1,file) != 1)
|
||||||
{
|
{
|
||||||
fprintf(stderr,"Save data heap failed: %s\n",strerror(errno));
|
fprintf(stderr,"Save data heap failed: %s\n",strerror(errno));
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(fwrite(first_block(&code_heap),h.code_size,1,file) != 1)
|
if(fwrite(first_block(&code_heap),h.code_size,1,file) != 1)
|
||||||
{
|
{
|
||||||
fprintf(stderr,"Save code heap failed: %s\n",strerror(errno));
|
fprintf(stderr,"Save code heap failed: %s\n",strerror(errno));
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(fclose(file))
|
if(fclose(file))
|
||||||
{
|
{
|
||||||
fprintf(stderr,"Failed to close image file: %s\n",strerror(errno));
|
fprintf(stderr,"Failed to close image file: %s\n",strerror(errno));
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINE_PRIMITIVE(save_image)
|
DEFINE_PRIMITIVE(save_image)
|
||||||
|
@ -187,10 +189,10 @@ DEFINE_PRIMITIVE(save_image_and_exit)
|
||||||
UNREGISTER_C_STRING(path);
|
UNREGISTER_C_STRING(path);
|
||||||
|
|
||||||
/* Save the image */
|
/* Save the image */
|
||||||
save_image(path);
|
if(save_image(path))
|
||||||
|
exit(0);
|
||||||
/* now exit; we cannot continue executing like this */
|
else
|
||||||
exit(0);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void fixup_word(F_WORD *word)
|
void fixup_word(F_WORD *word)
|
||||||
|
|
Loading…
Reference in New Issue