listed/extracted from a text file).
-$Id: CHANGES,v 1.49 2000/03/08 10:51:29 stelian Exp $
+$Id: CHANGES,v 1.50 2000/03/08 11:25:58 stelian Exp $
Changes between versions 0.4b15 and 0.4b16 (released ?????????????)
===================================================================
Changes between versions 0.4b15 and 0.4b16 (released ?????????????)
===================================================================
tape at the end of run. Thanks to W. Reilly Cooley
<wcooley@nakedape.cc> for the patch.
tape at the end of run. Thanks to W. Reilly Cooley
<wcooley@nakedape.cc> for the patch.
+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.
+
Changes between versions 0.4b14 and 0.4b15 (released March 2, 2000)
===================================================================
Changes between versions 0.4b14 and 0.4b15 (released March 2, 2000)
===================================================================
-$Id: THANKS,v 1.24 2000/03/08 10:51:29 stelian Exp $
+$Id: THANKS,v 1.25 2000/03/08 11:25:58 stelian Exp $
Dump and restore were written by the people of the CSRG at the University
of California, Berkeley.
Dump and restore were written by the people of the CSRG at the University
of California, Berkeley.
Eric Maisonobe virnet@nat.fr
David Miller davem@caip.rutgers.edu
David Monro davidm@cs.su.oz.au
Eric Maisonobe virnet@nat.fr
David Miller davem@caip.rutgers.edu
David Monro davidm@cs.su.oz.au
+Dejan Muhamedagic dejan@quant-x.com
Lukas Nellen L.Nellen@ThPhys.Uni-Heidelberg.DE
Nuno Oliveira nuno@eq.uc.pt
Brent Olson night@halcyon.com
Lukas Nellen L.Nellen@ThPhys.Uni-Heidelberg.DE
Nuno Oliveira nuno@eq.uc.pt
Brent Olson night@halcyon.com
#ifndef lint
static const char rcsid[] =
#ifndef lint
static const char rcsid[] =
- "$Id: main.c,v 1.9 2000/03/02 11:34:51 stelian Exp $";
+ "$Id: main.c,v 1.10 2000/03/08 11:25:58 stelian Exp $";
#endif /* not lint */
#include <sys/param.h>
#endif /* not lint */
#include <sys/param.h>
char *inputdev = _PATH_DEFTAPE;
char *symtbl = "./restoresymtable";
char *p, name[MAXPATHLEN];
char *inputdev = _PATH_DEFTAPE;
char *symtbl = "./restoresymtable";
char *p, name[MAXPATHLEN];
+ FILE *filelist = NULL;
+ char fname[MAXPATHLEN];
/* Temp files should *not* be readable. We set permissions later. */
(void) umask(077);
/* Temp files should *not* be readable. We set permissions later. */
(void) umask(077);
;
obsolete(&argc, &argv);
#ifdef KERBEROS
;
obsolete(&argc, &argv);
#ifdef KERBEROS
-#define optlist "b:CcdD:f:hikmMNRrs:tT:uvxy"
+#define optlist "b:CcdD:f:hikmMNRrs:tT:uvxX:y"
-#define optlist "b:CcdD:f:himMNRrs:tT:uvxy"
+#define optlist "b:CcdD:f:himMNRrs:tT:uvxX:y"
#endif
while ((ch = getopt(argc, argv, optlist)) != -1)
switch(ch) {
#endif
while ((ch = getopt(argc, argv, optlist)) != -1)
switch(ch) {
case 'v':
vflag = 1;
break;
case 'v':
vflag = 1;
break;
+ case 'X':
+ if ( !(filelist=fopen(optarg,"r")) )
+ errx(1, "can't open file for reading -- %s", optarg);
+ break;
case 'y':
yflag = 1;
break;
case 'y':
yflag = 1;
break;
checkrestore();
dumpsymtable(symtbl, (long)1);
break;
checkrestore();
dumpsymtable(symtbl, (long)1);
break;
+
+#define NEXTFILE(p) \
+ if (filelist) { \
+ if ((p = fgets(fname, MAXPATHLEN, filelist))) \
+ *(p + strlen(p) - 1) = '\0'; \
+ } \
+ else { \
+ if (argc--) \
+ p = *argv++; \
+ else \
+ p = NULL; \
+ }
+
/*
* List contents of tape.
*/
/*
* List contents of tape.
*/
setup();
extractdirs(0);
initsymtable((char *)0);
setup();
extractdirs(0);
initsymtable((char *)0);
- while (argc--) {
- canon(*argv++, name, sizeof(name));
+ for (;;) {
+ NEXTFILE(p);
+ if (!p)
+ break;
+ canon(p, name, sizeof(name));
ino = dirlookup(name);
if (ino == 0)
continue;
ino = dirlookup(name);
if (ino == 0)
continue;
setup();
extractdirs(1);
initsymtable((char *)0);
setup();
extractdirs(1);
initsymtable((char *)0);
- while (argc--) {
- canon(*argv++, name, sizeof(name));
+ for (;;) {
+ NEXTFILE(p);
+ if (!p)
+ break;
+ canon(p, name, sizeof(name));
ino = dirlookup(name);
if (ino == 0)
continue;
ino = dirlookup(name);
if (ino == 0)
continue;
(void)fprintf(stderr,
"%s %s\n", __progname, _DUMP_VERSION);
(void)fprintf(stderr,
(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",
+ "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",
__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, " -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 ...]");
+ __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]");
case 'f':
case 's':
case 'T':
case 'f':
case 's':
case 'T':
if (*argv == NULL) {
warnx("option requires an argument -- %c", *ap);
usage();
if (*argv == NULL) {
warnx("option requires an argument -- %c", *ap);
usage();
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
-.\" $Id: restore.8.in,v 1.7 2000/01/21 10:23:30 stelian Exp $
+.\" $Id: restore.8.in,v 1.8 2000/03/08 11:25:58 stelian Exp $
.\"
.Dd __DATE__
.Dt RESTORE 8
.\"
.Dd __DATE__
.Dt RESTORE 8
.Op Fl T Ar directory
.Op file ...
.Nm restore
.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
.Fl x
.Op Fl chkmMNuvy
.Op Fl b Ar blocksize
.Op Fl s Ar fileno
.Op Fl T Ar directory
.Op file ...
.Op Fl s Ar fileno
.Op Fl T Ar directory
.Op file ...
+.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 Fl X Ar filelist
flag replaces the function of the old
.Xr dumpdir 8
program.
flag replaces the function of the old
.Xr dumpdir 8
program.
+See also the
+.Fl X
+option below.
.ne 1i
.It Fl x
The named files are read from the given media.
.ne 1i
.It Fl x
The named files are read from the given media.
unless the
.Fl h
flag has been specified.
unless the
.Fl h
flag has been specified.
+See also the
+.Fl X
+option below.
.El
.Pp
The following additional options may be specified:
.El
.Pp
The following additional options may be specified:
(verbose)
flag causes it to type the name of each file it treats
preceded by its file type.
(verbose)
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
+.Ar filelist
+instead of reading them on the command line. This can be used in
+conjunction with the
+.Fl t
+or
+.Fl x
+commands. The file
+.Ar filelist
+should contain file names separated by newlines.
.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.
.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.