-$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 ?????????????)
===================================================================
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 <dejan@quant-x.com> for the patch.
+ from a text file (in addition of the command line).
+ Thanks to Dejan Muhamedagic <dejan@quant-x.com> for the
+ patch.
Changes between versions 0.4b14 and 0.4b15 (released March 2, 2000)
===================================================================
#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 <sys/param.h>
char *tmpdir;
int compare_ignore_not_found;
char filesys[NAMELEN];
+static const char *stdin_opt = NULL;
#ifdef __linux__
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[])
dflag = 1;
break;
case 'f':
+ if( !strcmp(optarg,"-") )
+ use_stdin("-f");
inputdev = optarg;
break;
case 'h':
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;
setinput(inputdev);
- if (argc == 0) {
+ if (argc == 0 && !filelist) {
argc = 1;
*--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; \
+ } \
}
/*
(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);
}
/* 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;
+}
.\" 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
.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
.Op Fl s Ar fileno
.Op Fl T Ar directory
.Op Fl X Ar filelist
+.Op file ...
.Pp
.in
(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
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.