X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=restore%2Fmain.c;h=344ec5cacf0567ea5561991e30dbc4473e033a9d;hb=6169d8400ef19c54b1a5ccc0fec865ade5344f7d;hp=6f9b0346e3ac07efa2e2d76b0416ae4a5698c6f8;hpb=08db2b8641b95d3059d59e9c8204c891f7c5eecc;p=dump.git diff --git a/restore/main.c b/restore/main.c index 6f9b034..344ec5c 100644 --- a/restore/main.c +++ b/restore/main.c @@ -40,7 +40,7 @@ #ifndef lint static const char rcsid[] = - "$Id: main.c,v 1.10 2000/03/08 11:25:58 stelian Exp $"; + "$Id: main.c,v 1.12 2000/05/28 16:52:21 stelian Exp $"; #endif /* not lint */ #include @@ -87,7 +87,9 @@ time_t dumpdate; FILE *terminal; char *tmpdir; int compare_ignore_not_found; +int compare_errors; char filesys[NAMELEN]; +static const char *stdin_opt = NULL; #ifdef __linux__ char *__progname; @@ -95,6 +97,7 @@ char *__progname; static void obsolete __P((int *, char **[])); static void usage __P((void)); +static void use_stdin __P((const char *)); int main(int argc, char *argv[]) @@ -156,6 +159,8 @@ main(int argc, char *argv[]) dflag = 1; break; case 'f': + if( !strcmp(optarg,"-") ) + use_stdin("-f"); inputdev = optarg; break; case 'h': @@ -202,8 +207,13 @@ main(int argc, char *argv[]) vflag = 1; break; case 'X': - if ( !(filelist=fopen(optarg,"r")) ) - errx(1, "can't open file for reading -- %s", optarg); + if( !strcmp(optarg,"-") ) { + use_stdin("-X"); + filelist = stdin; + } + else + if ( !(filelist = fopen(optarg,"r")) ) + errx(1, "can't open file for reading -- %s", optarg); break; case 'y': yflag = 1; @@ -227,7 +237,7 @@ main(int argc, char *argv[]) setinput(inputdev); - if (argc == 0) { + if (argc == 0 && !filelist) { argc = 1; *--argv = "."; } @@ -241,6 +251,7 @@ main(int argc, char *argv[]) Vprintf(stdout, "Begin compare restore\n"); compare_ignore_not_found = 0; + compare_errors = 0; setup(); printf("filesys = %s\n", filesys); if (stat(filesys, &stbuf) < 0) @@ -253,6 +264,10 @@ main(int argc, char *argv[]) treescan(".", ROOTINO, nodeupdates); compareleaves(); checkrestore(); + if (compare_errors) { + printf("Some files were modified!\n"); + exit(2); + } break; } @@ -315,17 +330,21 @@ main(int argc, char *argv[]) checkrestore(); dumpsymtable(symtbl, (long)1); break; - + +/* handle file names from either text file (-X) or the command line */ #define NEXTFILE(p) \ - if (filelist) { \ - if ((p = fgets(fname, MAXPATHLEN, filelist))) \ - *(p + strlen(p) - 1) = '\0'; \ + p = NULL; \ + if (argc) { \ + --argc; \ + p = *argv++; \ } \ - else { \ - if (argc--) \ - p = *argv++; \ - else \ - p = NULL; \ + else if (filelist) { \ + if ((p = fgets(fname, MAXPATHLEN, filelist))) { \ + if ( *p && *(p + strlen(p) - 1) == '\n' ) /* possible null string */ \ + *(p + strlen(p) - 1) = '\0'; \ + if ( !*p ) /* skip empty lines */ \ + continue; \ + } \ } /* @@ -388,14 +407,12 @@ usage(void) (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\t%s%s\n\t%s%s\n", + "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, " -x [-ch" kerbflag "mMuvy] [-b blocksize] [-f file] [-s fileno] [-X filelist]", - __progname, " -t [-ch" kerbflag "Muvy] [-b blocksize] [-f file] [-s fileno] [file ...]", - __progname, " -t [-ch" kerbflag "Muvy] [-b blocksize] [-f file] [-s fileno] [-X filelist]"); + __progname, " -x [-ch" kerbflag "mMuvy] [-b blocksize] [-f file] [-s fileno] [-X filelist] [file ...]", + __progname, " -t [-ch" kerbflag "Muvy] [-b blocksize] [-f file] [-s fileno] [-X filelist] [file ...]"); exit(1); } @@ -469,3 +486,16 @@ obsolete(int *argcp, char **argvp[]) /* Update argument count. */ *argcp = nargv - *argvp - 1; } + +/* + * use_stdin -- + * reserve stdin for opt (avoid conflicts) + */ +void +use_stdin(const char *opt) +{ + if (stdin_opt) + errx(1, "can't handle standard input for both %s and %s", + stdin_opt, opt); + stdin_opt = opt; +}