diff -urN fsarchiver-0.6.5-a/src/archwriter.c fsarchiver-0.6.5-b/src/archwriter.c --- fsarchiver-0.6.5-a/src/archwriter.c 2010-01-07 19:16:54.000000000 +0000 +++ fsarchiver-0.6.5-b/src/archwriter.c 2010-01-21 18:40:37.000000000 +0000 @@ -41,6 +41,7 @@ { assert(ai); memset(ai, 0, sizeof(struct s_archwriter)); + ai->newarch=false; ai->archfd=-1; ai->archid=0; ai->curvol=0; @@ -85,6 +86,7 @@ { sysprintf ("cannot create archive %s\n", ai->volpath); return -1; } + ai->newarch=true; if (lockf(ai->archfd, F_LOCK, 0)!=0) { sysprintf("Cannot lock archive file: %s\n", ai->volpath); @@ -117,10 +119,14 @@ assert(ai); if (ai->archfd >= 0) + { archwriter_close(ai); - - unlink(ai->basepath); - msgprintf(MSG_FORCE, "removing %s\n", ai->basepath); + } + if (ai->newarch==true) + { + unlink(ai->basepath); + msgprintf(MSG_FORCE, "removed %s\n", ai->basepath); + } return 0; } diff -urN fsarchiver-0.6.5-a/src/archwriter.h fsarchiver-0.6.5-b/src/archwriter.h --- fsarchiver-0.6.5-a/src/archwriter.h 2010-01-04 19:52:00.000000000 +0000 +++ fsarchiver-0.6.5-b/src/archwriter.h 2010-01-21 18:40:37.000000000 +0000 @@ -31,6 +31,7 @@ { int archfd; // file descriptor of the current volume (set to -1 when closed) u32 archid; // 32bit archive id for checking (random number generated at creation) u32 curvol; // current volume number, starts at 0, incremented when we change the volume + bool newarch; // true when the archive has been created by then current process char filefmt[FSA_MAX_FILEFMTLEN]; // file format of that archive char creatver[FSA_MAX_PROGVERLEN]; // fsa version used to create archive char label[FSA_MAX_LABELLEN]; // archive label defined by the user