better save_image that doesn't corrupt your factor image if you're out of disk space. should throw exception instead of printing error messages if saving fails..

db4
Doug Coleman 2009-01-21 15:02:27 -06:00
parent 2df61fd78d
commit 99cd664961
3 changed files with 15 additions and 1 deletions

View File

@ -112,7 +112,9 @@ bool save_image(const F_CHAR *filename)
FILE* file;
F_HEADER h;
file = OPEN_WRITE(filename);
F_CHAR temporary_filename[] = "##saving-factor-image##";
file = OPEN_WRITE(temporary_filename);
if(file == NULL)
{
print_string("Cannot open image file: "); print_native_string(filename); nl();
@ -163,6 +165,14 @@ bool save_image(const F_CHAR *filename)
return false;
}
if(MOVE_FILE_FAILS(temporary_filename, filename))
{
print_string("Failed to rename tempoarary image file: "); print_string(strerror(errno)); nl();
if(DELETE_FILE_FAILS(temporary_filename))
print_string("Failed to clean up temporary image file: "); print_string(strerror(errno)); nl();
return false;
}
return true;
}

View File

@ -22,6 +22,8 @@ typedef char F_SYMBOL;
#define STRCMP strcmp
#define STRNCMP strncmp
#define STRDUP strdup
#define MOVE_FILE_FAILS(old,new) (rename((old),(new)) < 0)
#define DELETE_FILE_FAILS(old) (unlink((old)) < 0)
#define FIXNUM_FORMAT "%ld"
#define CELL_FORMAT "%lu"

View File

@ -19,6 +19,8 @@ typedef wchar_t F_CHAR;
#define STRCMP wcscmp
#define STRNCMP wcsncmp
#define STRDUP _wcsdup
#define MOVE_FILE_FAILS(old,new) (MoveFile((old),(new)) == 0)
#define DELETE_FILE_FAILS(old) (DeleteFile((old)) == 0)
#ifdef WIN64
#define CELL_FORMAT "%Iu"