X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=restore%2Fmain.c;h=36ee2a4eb85123e068b90c11421f5901c2105e32;hb=ebcbe7f6c10482913b60fc792e72e494b439b242;hp=e1e9790ec9d499c76969e354f8dd49c4b9906d09;hpb=b45f51d61e911ac8a040bef1efda6afd82261e03;p=dump.git diff --git a/restore/main.c b/restore/main.c index e1e9790..36ee2a4 100644 --- a/restore/main.c +++ b/restore/main.c @@ -2,8 +2,7 @@ * Ported to Linux's Second Extended File System as part of the * dump and restore backup suit * Remy Card , 1994-1997 - * Stelian Pop , 1999 - * + * Stelian Pop , 1999-2000 */ /* @@ -40,17 +39,8 @@ */ #ifndef lint -static const char copyright[] = -"@(#) Copyright (c) 1983, 1993\n\ - The Regents of the University of California. All rights reserved.\n"; -#endif /* not lint */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)main.c 8.6 (Berkeley) 5/4/95"; -#endif static const char rcsid[] = - "$Id: main.c,v 1.2 1999/10/11 12:53:23 stelian Exp $"; + "$Id: main.c,v 1.8 2000/01/21 10:17:41 stelian Exp $"; #endif /* not lint */ #include @@ -67,7 +57,7 @@ static const char rcsid[] = #endif /* __linux__ */ #include -#include +#include #include #include #include @@ -95,9 +85,9 @@ ino_t maxino; time_t dumptime; time_t dumpdate; FILE *terminal; +char *tmpdir; int compare_ignore_not_found; char *filesys = NULL; -char *tmpdir = _PATH_TMP; #ifdef __linux__ char *__progname; @@ -107,13 +97,11 @@ static void obsolete __P((int *, char **[])); static void usage __P((void)); int -main(argc, argv) - int argc; - char *argv[]; +main(int argc, char *argv[]) { int ch; ino_t ino; - char *inputdev; + char *inputdev = _PATH_DEFTAPE; char *symtbl = "./restoresymtable"; char *p, name[MAXPATHLEN]; @@ -129,11 +117,17 @@ main(argc, argv) if ((inputdev = getenv("TAPE")) == NULL) inputdev = _PATH_DEFTAPE; + if ((tmpdir = getenv("TMPDIR")) == NULL) + tmpdir = _PATH_TMP; + if ((tmpdir = strdup(tmpdir)) == NULL) + err(1, "malloc tmpdir"); + for (p = tmpdir + strlen(tmpdir) - 1; p >= tmpdir && *p == '/'; p--) + ; obsolete(&argc, &argv); #ifdef KERBEROS -#define optlist "b:CcdDf:hikmNRrs:tTuvxy" +#define optlist "b:CcdD:f:hikmMNRrs:tT:uvxy" #else -#define optlist "b:CcdDf:himNRrs:tTuvxy" +#define optlist "b:CcdD:f:himMNRrs:tT:uvxy" #endif while ((ch = getopt(argc, argv, optlist)) != -1) switch(ch) { @@ -184,6 +178,9 @@ main(argc, argv) case 'm': mflag = 0; break; + case 'M': + Mflag = 1; + break; case 'N': Nflag = 1; break; @@ -219,6 +216,8 @@ main(argc, argv) (void) signal(SIGTERM, SIG_IGN); setlinebuf(stderr); + atexit(cleanup); + setinput(inputdev); if (argc == 0) { @@ -233,21 +232,14 @@ main(argc, argv) case 'C': { struct stat stbuf; - vprintf(stdout, "Begin compare restore\n"); + Vprintf(stdout, "Begin compare restore\n"); compare_ignore_not_found = 0; setup(); printf("filesys = %s\n", filesys); - if (stat(filesys, &stbuf) < 0) { - fprintf(stderr, "cannot stat directory %s: %s\n", - filesys, strerror(errno)); - exit(1); - } else { - if (chdir(filesys) < 0) { - fprintf(stderr, "cannot cd to %s: %s\n", - filesys, strerror(errno)); - exit(1); - } - } + if (stat(filesys, &stbuf) < 0) + err(1, "cannot stat directory %s", filesys); + if (chdir(filesys) < 0) + err(1, "cannot cd to %s", filesys); compare_ignore_not_found = dumptime > 0; initsymtable((char *)0); extractdirs(0); @@ -275,11 +267,11 @@ main(argc, argv) /* * This is an incremental dump tape. */ - vprintf(stdout, "Begin incremental restore\n"); + Vprintf(stdout, "Begin incremental restore\n"); initsymtable(symtbl); extractdirs(1); removeoldleaves(); - vprintf(stdout, "Calculate node updates.\n"); + Vprintf(stdout, "Calculate node updates.\n"); treescan(".", ROOTINO, nodeupdates); findunreflinks(); removeoldnodes(); @@ -287,10 +279,10 @@ main(argc, argv) /* * This is a level zero dump tape. */ - vprintf(stdout, "Begin level 0 restore\n"); + Vprintf(stdout, "Begin level 0 restore\n"); initsymtable((char *)0); extractdirs(1); - vprintf(stdout, "Calculate extraction list.\n"); + Vprintf(stdout, "Calculate extraction list.\n"); treescan(".", ROOTINO, nodeupdates); } createleaves(symtbl); @@ -298,7 +290,7 @@ main(argc, argv) setdirmodes(FORCE); checkrestore(); if (dflag) { - vprintf(stdout, "Verify the directory structure\n"); + Vprintf(stdout, "Verify the directory structure\n"); treescan(".", ROOTINO, verifyfile); } dumpsymtable(symtbl, (long)1); @@ -354,21 +346,29 @@ main(argc, argv) checkrestore(); break; } - done(0); + exit(0); /* NOTREACHED */ - exit(1); /* gcc shut up */ + return 0; /* gcc shut up */ } static void -usage() +usage(void) { - (void)fprintf(stderr, "usage:\t%s\n\t%s\n\t%s\n\t%s\n\t%s\n", - "restore -i [-chkmuvy] [-b blocksize] [-f file] [-s fileno]", - "restore -r [-ckuvy] [-b blocksize] [-f file] [-s fileno]", - "restore -R [-ckuvy] [-b blocksize] [-f file] [-s fileno]", - "restore -x [-chkmuvy] [-b blocksize] [-f file] [-s fileno] [file ...]", - "restore -t [-chkuvy] [-b blocksize] [-f file] [-s fileno] [file ...]"); - done(1); +#ifdef KERBEROS +#define kerbflag "k" +#else +#define kerbflag +#endif + (void)fprintf(stderr, + "%s %s\n", __progname, _DUMP_VERSION); + (void)fprintf(stderr, + "usage:\t%s%s\n\t%s%s\n\t%s%s\n\t%s%s\n\t%s%s\n", + __progname, " -i [-ch" kerbflag "mMuvy] [-b blocksize] [-f file] [-s fileno]", + __progname, " -r [-c" kerbflag "Muvy] [-b blocksize] [-f file] [-s fileno]", + __progname, " -R [-c" kerbflag "Muvy] [-b blocksize] [-f file] [-s fileno]", + __progname, " -x [-ch" kerbflag "mMuvy] [-b blocksize] [-f file] [-s fileno] [file ...]", + __progname, " -t [-ch" kerbflag "Muvy] [-b blocksize] [-f file] [-s fileno] [file ...]"); + exit(1); } /* @@ -377,12 +377,10 @@ usage() * getopt(3) will like. */ static void -obsolete(argcp, argvp) - int *argcp; - char **argvp[]; +obsolete(int *argcp, char **argvp[]) { int argc, flags; - char *ap, **argv, *flagsp=NULL, **nargv, *p=NULL; + char *ap, **argv, *flagsp = NULL, **nargv, *p = NULL; /* Setup. */ argv = *argvp; @@ -396,7 +394,7 @@ obsolete(argcp, argvp) /* Allocate space for new arguments. */ if ((*argvp = nargv = malloc((argc + 1) * sizeof(char *))) == NULL || (p = flagsp = malloc(strlen(ap) + 2)) == NULL) - err(1, NULL); + err(1, "malloc args"); *nargv++ = *argv; argv += 2, argc -= 2; @@ -411,7 +409,7 @@ obsolete(argcp, argvp) usage(); } if ((nargv[0] = malloc(strlen(*argv) + 2 + 1)) == NULL) - err(1, NULL); + err(1, "malloc arg"); nargv[0][0] = '-'; nargv[0][1] = *ap; (void)strcpy(&nargv[0][2], *argv);