]> git.wh0rd.org - dump.git/blobdiff - dump/main.c
Documented the -d option in restore.
[dump.git] / dump / main.c
index 3d4e693fc4ea6cb8672edd8a38716cd1959f0121..173ec03a38026b54edb60f51a0594169080f2492 100644 (file)
@@ -41,7 +41,7 @@
 
 #ifndef lint
 static const char rcsid[] =
-       "$Id: main.c,v 1.70 2002/03/11 10:17:43 stelian Exp $";
+       "$Id: main.c,v 1.72 2002/06/05 13:29:15 stelian Exp $";
 #endif /* not lint */
 
 #include <config.h>
@@ -96,6 +96,8 @@ int   mapsize;        /* size of the state maps */
 char   *usedinomap;    /* map of allocated inodes */
 char   *dumpdirmap;    /* map of directories to be dumped */
 char   *dumpinomap;    /* map of files to be dumped */
+char   *metainomap;    /* which of the inodes in dumpinomap will get
+                          only their metadata dumped */
 
 const char *disk;      /* name of the disk file */
 char   tape[MAXPATHLEN];/* name of the tape file */
@@ -106,8 +108,10 @@ char       level;          /* dump level of this dump */
 int    bzipflag;       /* compression is done using bzlib */
 int    Afile = 0;      /* archive file descriptor */
 int    uflag;          /* update flag */
+int    mflag;          /* dump metadata only if possible */
 int    Mflag;          /* multi-volume flag */
 int    qflag;          /* quit on errors flag */
+int    vflag;          /* verbose flag */
 int     breademax = 32; /* maximum number of bread errors before we quit */
 char   *eot_script;    /* end of volume script fiag */
 int    diskfd;         /* disk file descriptor */
@@ -248,11 +252,11 @@ main(int argc, char *argv[])
 #ifdef KERBEROS
                            "k"
 #endif
-                           "Mnq"
+                           "mMnq"
 #ifdef USE_QFA
                            "Q:"
 #endif
-                           "s:ST:uWw"
+                           "s:ST:uvWw"
 #ifdef HAVE_ZLIB
                            "z::"
 #endif
@@ -377,6 +381,10 @@ main(int argc, char *argv[])
                        }
                        break;
 
+               case 'm':               /* metadata only flag */
+                       mflag = 1;
+                       break;
+
                case 'M':               /* multi-volume flag */
                        Mflag = 1;
                        break;
@@ -420,6 +428,10 @@ main(int argc, char *argv[])
                        uflag = 1;
                        break;
 
+               case 'v':               /* verbose */
+                       vflag = 1;
+                       break;
+
                case 'W':               /* what to do */
                case 'w':
                        lastdump(ch);
@@ -730,7 +742,9 @@ main(int argc, char *argv[])
        usedinomap = (char *)calloc((unsigned) mapsize, sizeof(char));
        dumpdirmap = (char *)calloc((unsigned) mapsize, sizeof(char));
        dumpinomap = (char *)calloc((unsigned) mapsize, sizeof(char));
-       if (usedinomap == NULL || dumpdirmap == NULL || dumpinomap == NULL)
+       metainomap = (char *)calloc((unsigned) mapsize, sizeof(char));
+       if (usedinomap == NULL || dumpdirmap == NULL || 
+           dumpinomap == NULL || metainomap == NULL)
                quit("out of memory allocating inode maps\n");
        tapesize = 2 * (howmany(mapsize * sizeof(char), TP_BSIZE) + 1);
 
@@ -907,6 +921,8 @@ main(int argc, char *argv[])
                 */
                if (dp->di_nlink == 0 || dp->di_dtime != 0)
                        continue;
+               if (vflag)
+                       msg("dumping directory inode %lu\n", ino);
                (void)dumpdirino(dp, ino);
 #else
                (void)dumpino(dp, ino);
@@ -933,7 +949,13 @@ main(int argc, char *argv[])
                 * inodes since this is done in dumpino().
                 */
 #endif
-               (void)dumpino(dp, ino);
+               if (vflag) {
+                       if (mflag && TSTINO(ino, metainomap))
+                               msg("dumping regular inode %lu (meta only)\n", ino);
+                       else
+                               msg("dumping regular inode %lu\n", ino);
+               }
+               (void)dumpino(dp, ino, mflag && TSTINO(ino, metainomap));
        }
 
        tend_writing = time(NULL);
@@ -1016,7 +1038,7 @@ usage(void)
 #ifdef KERBEROS
                "k"
 #endif
-               "MnqSu"
+               "mMnqSuv"
                "] [-A file] [-B records] [-b blocksize]\n"
                "\t%s [-d density] [-e inode#,inode#,...] [-E file] [-f file]\n"
                "\t%s [-h level] [-I nr errors] "