if (read_write(f_in,fd,i) != i) {
fprintf(stderr,"write failed on %s : %s\n",fname,strerror(errno));
- exit(1);
+ exit_cleanup(1);
}
offset += i;
} else {
if (write_sparse(fd,map_ptr(buf,offset2,len),len) != len) {
fprintf(stderr,"write failed on %s : %s\n",fname,strerror(errno));
- exit(1);
+ exit_cleanup(1);
}
offset += len;
}
if (offset > 0 && sparse_end(fd) != 0) {
fprintf(stderr,"write failed on %s : %s\n",fname,strerror(errno));
- exit(1);
+ exit_cleanup(1);
}
}
static char *cleanup_fname = NULL;
-void sig_int(void)
+void exit_cleanup(int code)
{
if (cleanup_fname)
unlink(cleanup_fname);
- exit(1);
+ exit(code);
+}
+
+void sig_int(void)
+{
+ exit_cleanup(1);
}
sprintf(fnamebak,"%s%s",fname,backup_suffix);
if (rename(fname,fnamebak) != 0 && errno != ENOENT) {
fprintf(stderr,"rename %s %s : %s\n",fname,fnamebak,strerror(errno));
- exit(1);
+ exit_cleanup(1);
}
}