Use atexit() rather than tweaking every exit() to call the cleanup function.
This commit is contained in:
parent
f7078d4f16
commit
d8b173be70
|
@ -38,7 +38,7 @@
|
|||
|
||||
#ifndef lint
|
||||
/*static char sccsid[] = "from: @(#)dirs.c 8.5 (Berkeley) 8/31/94";*/
|
||||
static char *rcsid = "$Id: dirs.c,v 1.11 1994/12/28 02:21:43 mycroft Exp $";
|
||||
static char *rcsid = "$Id: dirs.c,v 1.12 1995/02/20 19:43:51 mycroft Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/param.h>
|
||||
|
@ -153,7 +153,7 @@ extractdirs(genmode)
|
|||
"restore: %s - cannot create directory temporary\n",
|
||||
dirfile);
|
||||
fprintf(stderr, "fopen: %s\n", strerror(errno));
|
||||
done(1);
|
||||
exit(1);
|
||||
}
|
||||
if (genmode != 0) {
|
||||
(void) sprintf(modefile, "%s/rstmode%d", _PATH_TMP, dumpdate);
|
||||
|
@ -163,7 +163,7 @@ extractdirs(genmode)
|
|||
"restore: %s - cannot create modefile \n",
|
||||
modefile);
|
||||
fprintf(stderr, "fopen: %s\n", strerror(errno));
|
||||
done(1);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
nulldir.d_ino = 0;
|
||||
|
@ -657,14 +657,14 @@ genliteraldir(name, ino)
|
|||
"write error extracting inode %d, name %s\n",
|
||||
curfile.ino, curfile.name);
|
||||
fprintf(stderr, "read: %s\n", strerror(errno));
|
||||
done(1);
|
||||
exit(1);
|
||||
}
|
||||
if (!Nflag && write(ofile, buf, (int) size) == -1) {
|
||||
fprintf(stderr,
|
||||
"write error extracting inode %d, name %s\n",
|
||||
curfile.ino, curfile.name);
|
||||
fprintf(stderr, "write: %s\n", strerror(errno));
|
||||
done(1);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
(void) close(dp);
|
||||
|
@ -740,9 +740,8 @@ inotablookup(ino)
|
|||
/*
|
||||
* Clean up and exit
|
||||
*/
|
||||
__dead void
|
||||
done(exitcode)
|
||||
int exitcode;
|
||||
void
|
||||
cleanup()
|
||||
{
|
||||
|
||||
closemt();
|
||||
|
@ -750,5 +749,4 @@ done(exitcode)
|
|||
(void) unlink(modefile);
|
||||
if (dirfile[0] != '#')
|
||||
(void) unlink(dirfile);
|
||||
exit(exitcode);
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
* SUCH DAMAGE.
|
||||
*
|
||||
* from: @(#)extern.h 8.2 (Berkeley) 1/7/94
|
||||
* $Id: extern.h,v 1.2 1994/06/08 19:33:34 mycroft Exp $
|
||||
* $Id: extern.h,v 1.3 1995/02/20 19:43:52 mycroft Exp $
|
||||
*/
|
||||
|
||||
struct entry *addentry __P((char *, ino_t, int));
|
||||
|
@ -39,6 +39,7 @@ long addfile __P((char *, ino_t, int));
|
|||
void badentry __P((struct entry *, char *));
|
||||
void canon __P((char *, char *));
|
||||
void checkrestore __P((void));
|
||||
void cleanup __P((void));
|
||||
void closemt __P((void));
|
||||
void createfiles __P((void));
|
||||
void createleaves __P((char *));
|
||||
|
@ -46,7 +47,6 @@ void createlinks __P((void));
|
|||
long deletefile __P((char *, ino_t, int));
|
||||
void deleteino __P((ino_t));
|
||||
ino_t dirlookup __P((const char *));
|
||||
__dead void done __P((int));
|
||||
void dumpsymtable __P((char *, long));
|
||||
void extractdirs __P((int));
|
||||
int extractfile __P((char *));
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
|
||||
#ifndef lint
|
||||
/*static char sccsid[] = "from: @(#)interactive.c 8.3 (Berkeley) 9/13/94";*/
|
||||
static char *rcsid = "$Id: interactive.c,v 1.7 1995/01/30 20:37:25 mycroft Exp $";
|
||||
static char *rcsid = "$Id: interactive.c,v 1.8 1995/02/20 19:43:53 mycroft Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/param.h>
|
||||
|
@ -771,5 +771,5 @@ onintr(signo)
|
|||
if (command == 'i' && runshell)
|
||||
longjmp(reset, 1);
|
||||
if (reply("restore interrupted, continue") == FAIL)
|
||||
done(1);
|
||||
exit(1);
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@ static char copyright[] =
|
|||
|
||||
#ifndef lint
|
||||
/*static char sccsid[] = "from: @(#)main.c 8.3 (Berkeley) 9/13/94";*/
|
||||
static char *rcsid = "$Id: main.c,v 1.6 1995/02/20 18:42:14 mycroft Exp $";
|
||||
static char *rcsid = "$Id: main.c,v 1.7 1995/02/20 19:43:54 mycroft Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/param.h>
|
||||
|
@ -160,6 +160,8 @@ main(argc, argv)
|
|||
(void) signal(SIGTERM, SIG_IGN);
|
||||
setlinebuf(stderr);
|
||||
|
||||
atexit(cleanup);
|
||||
|
||||
setinput(inputdev);
|
||||
|
||||
if (argc == 0) {
|
||||
|
@ -265,7 +267,7 @@ main(argc, argv)
|
|||
checkrestore();
|
||||
break;
|
||||
}
|
||||
done(0);
|
||||
exit(0);
|
||||
/* NOTREACHED */
|
||||
}
|
||||
|
||||
|
@ -278,7 +280,7 @@ usage()
|
|||
"\trestore ifhmsvy\n",
|
||||
"\trestore rfsvy\n",
|
||||
"\trestore Rfsvy\n");
|
||||
done(1);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
|
||||
#ifndef lint
|
||||
/*static char sccsid[] = "from: @(#)symtab.c 8.2 (Berkeley) 9/13/94";*/
|
||||
static char *rcsid = "$Id: symtab.c,v 1.6 1994/12/28 02:21:52 mycroft Exp $";
|
||||
static char *rcsid = "$Id: symtab.c,v 1.7 1995/02/20 19:43:55 mycroft Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
|
@ -585,7 +585,7 @@ initsymtable(filename)
|
|||
fprintf(stderr, "Incremental tape too low\n");
|
||||
else
|
||||
fprintf(stderr, "Incremental tape too high\n");
|
||||
done(1);
|
||||
exit(1);
|
||||
}
|
||||
break;
|
||||
case 'R':
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
|
||||
#ifndef lint
|
||||
/*static char sccsid[] = "from: @(#)tape.c 8.6 (Berkeley) 9/13/94";*/
|
||||
static char *rcsid = "$Id: tape.c,v 1.14 1994/12/28 02:21:53 mycroft Exp $";
|
||||
static char *rcsid = "$Id: tape.c,v 1.15 1995/02/20 19:43:56 mycroft Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/param.h>
|
||||
|
@ -125,7 +125,7 @@ setinput(source)
|
|||
source = strchr(host, ':');
|
||||
*source++ = '\0';
|
||||
if (rmthost(host) == 0)
|
||||
done(1);
|
||||
exit(1);
|
||||
} else
|
||||
#endif
|
||||
if (strcmp(source, "-") == 0) {
|
||||
|
@ -141,7 +141,7 @@ setinput(source)
|
|||
if (terminal == NULL) {
|
||||
(void)fprintf(stderr, "cannot open %s: %s\n",
|
||||
_PATH_DEVNULL, strerror(errno));
|
||||
done(1);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
pipein++;
|
||||
|
@ -164,7 +164,7 @@ newtapebuf(size)
|
|||
tapebuf = malloc(size * TP_BSIZE);
|
||||
if (tapebuf == NULL) {
|
||||
fprintf(stderr, "Cannot allocate space for tape buffer\n");
|
||||
done(1);
|
||||
exit(1);
|
||||
}
|
||||
tapebufsize = size;
|
||||
}
|
||||
|
@ -191,7 +191,7 @@ setup()
|
|||
mt = open(magtape, O_RDONLY, 0);
|
||||
if (mt < 0) {
|
||||
fprintf(stderr, "%s: %s\n", magtape, strerror(errno));
|
||||
done(1);
|
||||
exit(1);
|
||||
}
|
||||
volno = 1;
|
||||
setdumpnum();
|
||||
|
@ -205,7 +205,7 @@ setup()
|
|||
cvtflag++;
|
||||
if (gethead(&spcl) == FAIL) {
|
||||
fprintf(stderr, "Tape is not a dump tape\n");
|
||||
done(1);
|
||||
exit(1);
|
||||
}
|
||||
fprintf(stderr, "Converting to new file system format.\n");
|
||||
}
|
||||
|
@ -226,17 +226,17 @@ setup()
|
|||
dumpdate = spcl.c_date;
|
||||
if (stat(".", &stbuf) < 0) {
|
||||
fprintf(stderr, "cannot stat .: %s\n", strerror(errno));
|
||||
done(1);
|
||||
exit(1);
|
||||
}
|
||||
if (stbuf.st_blksize > 0 && stbuf.st_blksize <= MAXBSIZE)
|
||||
fssize = stbuf.st_blksize;
|
||||
if (((fssize - 1) & fssize) != 0) {
|
||||
fprintf(stderr, "bad block size %d\n", fssize);
|
||||
done(1);
|
||||
exit(1);
|
||||
}
|
||||
if (spcl.c_volume != 1) {
|
||||
fprintf(stderr, "Tape is not volume 1 of the dump\n");
|
||||
done(1);
|
||||
exit(1);
|
||||
}
|
||||
if (gethead(&spcl) == FAIL) {
|
||||
dprintf(stdout, "header read failed at %d blocks\n", blksread);
|
||||
|
@ -245,7 +245,7 @@ setup()
|
|||
findinode(&spcl);
|
||||
if (spcl.c_type != TS_CLRI) {
|
||||
fprintf(stderr, "Cannot find file removal list\n");
|
||||
done(1);
|
||||
exit(1);
|
||||
}
|
||||
maxino = (spcl.c_count * TP_BSIZE * NBBY) + 1;
|
||||
dprintf(stdout, "maxino = %d\n", maxino);
|
||||
|
@ -257,7 +257,7 @@ setup()
|
|||
getfile(xtrmap, xtrmapskip);
|
||||
if (spcl.c_type != TS_BITS) {
|
||||
fprintf(stderr, "Cannot find file dump list\n");
|
||||
done(1);
|
||||
exit(1);
|
||||
}
|
||||
map = calloc((unsigned)1, (unsigned)howmany(maxino, NBBY));
|
||||
if (map == (char *)NULL)
|
||||
|
@ -304,7 +304,7 @@ getvol(nextvol)
|
|||
savecnt = blksread;
|
||||
again:
|
||||
if (pipein)
|
||||
done(1); /* pipes do not get a second chance */
|
||||
exit(1); /* pipes do not get a second chance */
|
||||
if (command == 'R' || command == 'r' || curfile.action != SKIP) {
|
||||
newvol = nextvol;
|
||||
wantnext = 1;
|
||||
|
@ -336,7 +336,7 @@ again:
|
|||
(void) fgets(buf, BUFSIZ, terminal);
|
||||
} while (!feof(terminal) && buf[0] == '\n');
|
||||
if (feof(terminal))
|
||||
done(1);
|
||||
exit(1);
|
||||
newvol = atoi(buf);
|
||||
if (newvol <= 0) {
|
||||
fprintf(stderr,
|
||||
|
@ -354,7 +354,7 @@ again:
|
|||
(void) fflush(stderr);
|
||||
(void) fgets(buf, BUFSIZ, terminal);
|
||||
if (feof(terminal))
|
||||
done(1);
|
||||
exit(1);
|
||||
if (!strcmp(buf, "none\n")) {
|
||||
terminateinput();
|
||||
return;
|
||||
|
@ -478,7 +478,7 @@ setdumpnum()
|
|||
return;
|
||||
if (pipein) {
|
||||
fprintf(stderr, "Cannot have multiple dumps on pipe input\n");
|
||||
done(1);
|
||||
exit(1);
|
||||
}
|
||||
tcom.mt_op = MTFSF;
|
||||
tcom.mt_count = dumpnum - 1;
|
||||
|
@ -720,7 +720,7 @@ xtrfile(buf, size)
|
|||
fprintf(stderr,
|
||||
"write error extracting inode %d, name %s\nwrite: %s\n",
|
||||
curfile.ino, curfile.name, strerror(errno));
|
||||
done(1);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -738,7 +738,7 @@ xtrskip(buf, size)
|
|||
fprintf(stderr,
|
||||
"seek error extracting inode %d, name %s\nlseek: %s\n",
|
||||
curfile.ino, curfile.name, strerror(errno));
|
||||
done(1);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -755,7 +755,7 @@ xtrlnkfile(buf, size)
|
|||
if (pathlen > MAXPATHLEN) {
|
||||
fprintf(stderr, "symbolic link name: %s->%s%s; too long %d\n",
|
||||
curfile.name, lnkbuf, buf, pathlen);
|
||||
done(1);
|
||||
exit(1);
|
||||
}
|
||||
(void) strcat(lnkbuf, buf);
|
||||
}
|
||||
|
@ -772,7 +772,7 @@ xtrlnkskip(buf, size)
|
|||
|
||||
fprintf(stderr, "unallocated block in symbolic link %s\n",
|
||||
curfile.name);
|
||||
done(1);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -897,7 +897,7 @@ getmore:
|
|||
break;
|
||||
}
|
||||
if (!yflag && !reply("continue"))
|
||||
done(1);
|
||||
exit(1);
|
||||
i = ntrec * TP_BSIZE;
|
||||
memset(tapebuf, 0, i);
|
||||
#ifdef RRESTORE
|
||||
|
@ -910,7 +910,7 @@ getmore:
|
|||
if (seek_failed) {
|
||||
fprintf(stderr,
|
||||
"continuation failed: %s\n", strerror(errno));
|
||||
done(1);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
/*
|
||||
|
@ -955,12 +955,12 @@ findtapeblksize()
|
|||
|
||||
if (i <= 0) {
|
||||
fprintf(stderr, "tape read error: %s\n", strerror(errno));
|
||||
done(1);
|
||||
exit(1);
|
||||
}
|
||||
if (i % TP_BSIZE != 0) {
|
||||
fprintf(stderr, "Tape block size (%d) %s (%d)\n",
|
||||
i, "is not a multiple of dump block size", TP_BSIZE);
|
||||
done(1);
|
||||
exit(1);
|
||||
}
|
||||
ntrec = i / TP_BSIZE;
|
||||
numtrec = ntrec;
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
|
||||
#ifndef lint
|
||||
/*static char sccsid[] = "from: @(#)utilities.c 8.4 (Berkeley) 10/18/94";*/
|
||||
static char *rcsid = "$Id: utilities.c,v 1.7 1994/12/28 02:21:55 mycroft Exp $";
|
||||
static char *rcsid = "$Id: utilities.c,v 1.8 1995/02/20 19:43:58 mycroft Exp $";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/param.h>
|
||||
|
@ -430,6 +430,6 @@ panic(fmt, va_alist)
|
|||
if (reply("abort") == GOOD) {
|
||||
if (reply("dump core") == GOOD)
|
||||
abort();
|
||||
done(1);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue