* Ported to Linux's Second Extended File System as part of the
* dump and restore backup suit
* Remy Card <card@Linux.EU.Org>, 1994-1997
- * Stelian Pop <pop@cybercable.fr>, 1999
+ * Stelian Pop <pop@cybercable.fr>, 1999-2000
*/
/*
#ifndef lint
static const char rcsid[] =
- "$Id: main.c,v 1.6 1999/10/13 09:57:21 stelian Exp $";
+ "$Id: main.c,v 1.10 2000/03/08 11:25:58 stelian Exp $";
#endif /* not lint */
#include <sys/param.h>
FILE *terminal;
char *tmpdir;
int compare_ignore_not_found;
-char *filesys = NULL;
+char filesys[NAMELEN];
#ifdef __linux__
char *__progname;
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);
-
+ filesys[0] = '\0';
#ifdef __linux__
__progname = argv[0];
#endif
;
obsolete(&argc, &argv);
#ifdef KERBEROS
-#define optlist "b:CcdD:f:hikmNRrs:tT:uvxy"
+#define optlist "b:CcdD:f:hikmMNRrs:tT:uvxX:y"
#else
-#define optlist "b:CcdD:f:himNRrs:tT:uvxy"
+#define optlist "b:CcdD:f:himMNRrs:tT:uvxX:y"
#endif
while ((ch = getopt(argc, argv, optlist)) != -1)
switch(ch) {
cvtflag = 1;
break;
case 'D':
- filesys = optarg;
+ strncpy(filesys, optarg, NAMELEN);
+ filesys[NAMELEN - 1] = '\0';
break;
case 'T':
tmpdir = optarg;
case 'm':
mflag = 0;
break;
+ case 'M':
+ Mflag = 1;
+ break;
case 'N':
Nflag = 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;
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.
*/
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;
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;
(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 "muvy] [-b blocksize] [-f file] [-s fileno]",
- __progname, " -r [-c" kerbflag "uvy] [-b blocksize] [-f file] [-s fileno]",
- __progname, " -R [-c" kerbflag "uvy] [-b blocksize] [-f file] [-s fileno]",
- __progname, " -x [-ch" kerbflag "muvy] [-b blocksize] [-f file] [-s fileno] [file ...]",
- __progname, " -t [-ch" kerbflag "kuvy] [-b blocksize] [-f file] [-s fileno] [file ...]");
+ "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, " -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]");
exit(1);
}
for (flags = 0; *ap; ++ap) {
switch (*ap) {
case 'b':
+ case 'D':
case 'f':
case 's':
+ case 'T':
+ case 'X':
if (*argv == NULL) {
warnx("option requires an argument -- %c", *ap);
usage();