From: Stelian Pop Date: Thu, 9 Mar 2000 13:12:31 +0000 (+0000) Subject: updates to the -X option... X-Git-Tag: release_0_4b16~3 X-Git-Url: https://git.wh0rd.org/?a=commitdiff_plain;h=1a05d45daf5f6259b1aab68092daba0cad77f1ac;p=dump.git updates to the -X option... --- diff --git a/CHANGES b/CHANGES index c831520..005be8d 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,4 @@ -$Id: CHANGES,v 1.50 2000/03/08 11:25:58 stelian Exp $ +$Id: CHANGES,v 1.51 2000/03/09 13:12:31 stelian Exp $ Changes between versions 0.4b15 and 0.4b16 (released ?????????????) =================================================================== @@ -19,8 +19,9 @@ Changes between versions 0.4b15 and 0.4b16 (released ?????????????) 4. Added the -X option to restore giving the possibility to read the names of the files to be extracted/listed - from a text file (instead of the command line). Thanks - to Dejan Muhamedagic for the patch. + from a text file (in addition of the command line). + Thanks to Dejan Muhamedagic for the + patch. Changes between versions 0.4b14 and 0.4b15 (released March 2, 2000) =================================================================== diff --git a/restore/main.c b/restore/main.c index 6f9b034..1cd1a66 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.11 2000/03/09 13:12:31 stelian Exp $"; #endif /* not lint */ #include @@ -88,6 +88,7 @@ FILE *terminal; char *tmpdir; int compare_ignore_not_found; char filesys[NAMELEN]; +static const char *stdin_opt = NULL; #ifdef __linux__ char *__progname; @@ -95,6 +96,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 +158,8 @@ main(int argc, char *argv[]) dflag = 1; break; case 'f': + if( !strcmp(optarg,"-") ) + use_stdin("-f"); inputdev = optarg; break; case 'h': @@ -202,8 +206,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 +236,7 @@ main(int argc, char *argv[]) setinput(inputdev); - if (argc == 0) { + if (argc == 0 && !filelist) { argc = 1; *--argv = "."; } @@ -315,17 +324,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 +401,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 +480,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; +} diff --git a/restore/restore.8.in b/restore/restore.8.in index 073cc8e..89fbf40 100644 --- a/restore/restore.8.in +++ b/restore/restore.8.in @@ -29,7 +29,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.\" $Id: restore.8.in,v 1.8 2000/03/08 11:25:58 stelian Exp $ +.\" $Id: restore.8.in,v 1.9 2000/03/09 13:12:31 stelian Exp $ .\" .Dd __DATE__ .Dt RESTORE 8 @@ -74,22 +74,7 @@ .Op Fl f Ar file .Op Fl s Ar fileno .Op Fl T Ar directory -.Op file ... -.Nm restore -.Fl t -.Op Fl chkMNuvy -.Op Fl b Ar blocksize -.Op Fl f Ar file -.Op Fl s Ar fileno -.Op Fl T Ar directory .Op Fl X Ar filelist -.Nm restore -.Fl x -.Op Fl chkmMNuvy -.Op Fl b Ar blocksize -.Op Fl f Ar file -.Op Fl s Ar fileno -.Op Fl T Ar directory .Op file ... .Nm restore .Fl x @@ -99,6 +84,7 @@ .Op Fl s Ar fileno .Op Fl T Ar directory .Op Fl X Ar filelist +.Op file ... .Pp .in (The @@ -407,9 +393,9 @@ The flag causes it to type the name of each file it treats preceded by its file type. .It Fl X Ar filelist -Get the list of the files to be listed or extracted from the text file +Read list of files to be listed or extracted from the text file .Ar filelist -instead of reading them on the command line. This can be used in +in addition to those specified on the command line. This can be used in conjunction with the .Fl t or @@ -417,6 +403,10 @@ or commands. The file .Ar filelist should contain file names separated by newlines. +.Ar filelist +may be an ordinary file or +.Ql Fl +(the standard input). .It Fl y Do not ask the user whether to abort the restore in the event of an error. Always try to skip over the bad block(s) and continue.