]> git.wh0rd.org - dump.git/blobdiff - dump/itime.c
Added CVS Id.
[dump.git] / dump / itime.c
index f83459c511531d5e1a8fafd078c1453ab2992237..2529865cb06da1e02d5a52aa035c75ada3bbf621 100644 (file)
@@ -1,7 +1,8 @@
 /*
  *     Ported to Linux's Second Extended File System as part of the
  *     dump and restore backup suit
- *     Remy Card <card@Linux.EU.Org>, 1994, 1995, 1996
+ *     Remy Card <card@Linux.EU.Org>, 1994-1997
+ *      Stelian Pop <pop@cybercable.fr>, 1999 
  *
  */
 
  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
+ *
+ * $Id: itime.c,v 1.5 1999/10/11 13:31:11 stelian Exp $
  */
 
-#ifndef lint
-static char sccsid[] = "@(#)itime.c    8.1 (Berkeley) 6/5/93";
-#endif /* not lint */
-
 #include <sys/param.h>
 #include <sys/time.h>
 #ifdef __linux__
 #include <linux/ext2_fs.h>
 #include <bsdcompat.h>
 #include <sys/file.h>
+#include <unistd.h>
 #else
 #ifdef sunos
 #include <sys/vnode.h>
@@ -68,7 +68,6 @@ static char sccsid[] = "@(#)itime.c   8.1 (Berkeley) 6/5/93";
 #ifdef __STDC__
 #include <stdlib.h>
 #include <string.h>
-#include <unistd.h>
 #endif
 
 #ifdef __linux__
@@ -88,7 +87,7 @@ static        int makedumpdate __P((struct dumpdates *, char *));
 static void readdumptimes __P((FILE *));
 
 void
-initdumptimes()
+initdumptimes(int createdumpdates)
 {
        FILE *df;
 
@@ -98,30 +97,35 @@ initdumptimes()
                            strerror(errno));
                        /* NOTREACHED */
                }
-               /*
-                * Dumpdates does not exist, make an empty one.
-                */
-               msg("WARNING: no file `%s', making an empty one\n", dumpdates);
-               if ((df = fopen(dumpdates, "w")) == NULL) {
-                       quit("cannot create %s: %s\n", dumpdates,
-                           strerror(errno));
-                       /* NOTREACHED */
+               if (createdumpdates) {
+                       /*
+                        * Dumpdates does not exist, make an empty one.
+                        */
+                       msg("WARNING: no file `%s', making an empty one\n", dumpdates);
+                       if ((df = fopen(dumpdates, "w")) == NULL) {
+                               quit("cannot create %s: %s\n", dumpdates,
+                               strerror(errno));
+                               /* NOTREACHED */
+                       }
+                       (void) fclose(df);
+                       if ((df = fopen(dumpdates, "r")) == NULL) {
+                               quit("cannot read %s even after creating it: %s\n",
+                               dumpdates, strerror(errno));
+                               /* NOTREACHED */
+                       }
                }
+               else
+                       msg("WARNING: no file `%s'\n", dumpdates);
+       }
+       if (df != NULL) {
+               (void) flock(fileno(df), LOCK_SH);
+               readdumptimes(df);
                (void) fclose(df);
-               if ((df = fopen(dumpdates, "r")) == NULL) {
-                       quit("cannot read %s even after creating it: %s\n",
-                           dumpdates, strerror(errno));
-                       /* NOTREACHED */
-               }
        }
-       (void) flock(fileno(df), LOCK_SH);
-       readdumptimes(df);
-       (void) fclose(df);
 }
 
 static void
-readdumptimes(df)
-       FILE *df;
+readdumptimes(FILE *df)
 {
        register int i;
        register struct dumptime *dtwalk;
@@ -148,7 +152,7 @@ readdumptimes(df)
 }
 
 void
-getdumptime()
+getdumptime(int createdumpdates)
 {
        register struct dumpdates *ddp;
        register int i;
@@ -162,7 +166,14 @@ getdumptime()
        spcl.c_ddate = 0;
        lastlevel = '0';
 
-       initdumptimes();
+       /* if we're not going to update dumpdates, there's no point in reading
+          it, particularly since /var might not be mounted... wait until here
+          to benefit from the initialization of variables needed by parent */
+       if (!uflag && level == lastlevel)
+               return;
+       initdumptimes(createdumpdates);
+       if (ddatev == NULL)
+               return;
        /*
         *      Go find the entry with the same name for a lower increment
         *      and older date
@@ -184,7 +195,7 @@ getdumptime()
 }
 
 void
-putdumptime()
+putdumptime(void)
 {
        FILE *df;
        register struct dumpdates *dtwalk;
@@ -245,9 +256,7 @@ putdumptime()
 }
 
 static void
-dumprecout(file, what)
-       FILE *file;
-       struct dumpdates *what;
+dumprecout(FILE *file, struct dumpdates *what)
 {
 
        if (fprintf(file, DUMPOUTFMT,
@@ -260,14 +269,12 @@ dumprecout(file, what)
 int    recno;
 
 static int
-getrecord(df, ddatep)
-       FILE *df;
-       struct dumpdates *ddatep;
+getrecord(FILE *df, struct dumpdates *ddatep)
 {
        char tbuf[BUFSIZ];
 
        recno = 0;
-       if ( (fgets(tbuf, sizeof (tbuf), df)) != tbuf)
+       if (fgets(tbuf, sizeof (tbuf), df) == NULL)
                return(-1);
        recno++;
        if (makedumpdate(ddatep, tbuf) < 0)
@@ -282,11 +289,9 @@ getrecord(df, ddatep)
 }
 
 static int
-makedumpdate(ddp, tbuf)
-       struct dumpdates *ddp;
-       char *tbuf;
+makedumpdate(struct dumpdates *ddp, char *tbuf)
 {
-       char un_buf[128];
+       char un_buf[BUFSIZ];
 
        (void) sscanf(tbuf, DUMPINFMT, ddp->dd_name, &ddp->dd_level, un_buf);
        ddp->dd_ddate = unctime(un_buf);