diff --git a/mixer/src/Mixer_Strip.C b/mixer/src/Mixer_Strip.C index 2c95b31..55bea84 100644 --- a/mixer/src/Mixer_Strip.C +++ b/mixer/src/Mixer_Strip.C @@ -818,9 +818,8 @@ Mixer_Strip::export_strip ( const char *filename ) { MESSAGE( "Exporting chain state" ); Loggable::snapshot_callback( &Mixer_Strip::snapshot, this ); - Loggable::snapshot( filename ); - return true; -} + return Loggable::snapshot( filename ); + } bool Mixer_Strip::import_strip ( const char *filename ) @@ -893,9 +892,12 @@ Mixer_Strip::menu_cb ( const Fl_Menu_ *m ) free( suggested_name ); if ( s ) - export_strip( s ); - - fl_message( "Strip exported." ); + { + if ( export_strip( s ) ) + fl_message( "Strip exported." ); + else + fl_alert("Failed to export strip"); + } } else if ( ! strcmp( picked, "/Remove" ) ) { diff --git a/nonlib/Loggable.C b/nonlib/Loggable.C index e89c7d7..6677585 100644 --- a/nonlib/Loggable.C +++ b/nonlib/Loggable.C @@ -590,20 +590,30 @@ Loggable::snapshot ( const char *name ) { FILE *fp; - char *tmpname; + char *tmp = NULL; + + { + const char *filename = basename(name); + char *dir = (char*)malloc( (strlen(name) - strlen(filename)) + 1 ); + strncpy( dir, name, strlen(name) - strlen(filename) ); + + asprintf( &tmp, "%s#%s", dir, filename ); + free(dir); + } - asprintf( &tmpname, ".#%s", name ); - - if ( ! ( fp = fopen( tmpname, "w" ) )) + if ( ! ( fp = fopen( tmp, "w" ) )) + { + DWARNING( "Could not open file for writing: %s", tmp ); return false; + } bool r = snapshot( fp ); fclose( fp ); - rename( tmpname, name ); + rename( tmp, name ); - free(tmpname); + free(tmp); return r; }