Use atexit() rather than tweaking every exit() to call the cleanup function.

This commit is contained in:
mycroft 1995-02-20 19:43:51 +00:00
parent f7078d4f16
commit d8b173be70
7 changed files with 43 additions and 43 deletions

View File

@ -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);
}

View File

@ -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 *));

View File

@ -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);
}

View File

@ -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);
}
/*

View File

@ -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':

View File

@ -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;

View File

@ -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);
}
}