From 5b3817c60b5d4e7ac21b4576f820cad7e853b5d9 Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Sun, 28 Oct 2001 20:01:38 +0000 Subject: [PATCH] Make the protocol/dumprestore.h header match restore's idea of the dump header for the case where sizeof(time_t) != sizeof(int). dumprestore.h was embedding time_t when it should have been embedding int32_t. Use time_to_time32() and time32_to_time() to convert between the protocoll/file-format time and time_t. --- include/protocols/dumprestore.h | 6 ++++-- sbin/dump/itime.c | 16 +++++++++++----- sbin/dump/main.c | 23 +++++++++++++++++------ sbin/restore/tape.c | 22 +++++++++++++--------- 4 files changed, 45 insertions(+), 22 deletions(-) diff --git a/include/protocols/dumprestore.h b/include/protocols/dumprestore.h index 98704e7a580b..b4a45fe0814c 100644 --- a/include/protocols/dumprestore.h +++ b/include/protocols/dumprestore.h @@ -36,6 +36,8 @@ * SUCH DAMAGE. * * @(#)dumprestore.h 8.2 (Berkeley) 1/21/94 + * + * $FreeBSD$ */ #ifndef _PROTOCOLS_DUMPRESTORE_H_ @@ -68,8 +70,8 @@ union u_spcl { char dummy[TP_BSIZE]; struct s_spcl { int32_t c_type; /* record type (see below) */ - time_t c_date; /* date of this dump */ - time_t c_ddate; /* date of previous dump */ + int32_t c_date; /* date of this dump */ + int32_t c_ddate; /* date of previous dump */ int32_t c_volume; /* dump volume number */ daddr_t c_tapea; /* logical block of this record */ ino_t c_inumber; /* number of inode */ diff --git a/sbin/dump/itime.c b/sbin/dump/itime.c index c1824c285956..593edee24545 100644 --- a/sbin/dump/itime.c +++ b/sbin/dump/itime.c @@ -162,9 +162,9 @@ getdumptime() continue; if (ddp->dd_level >= level) continue; - if (ddp->dd_ddate <= spcl.c_ddate) + if (ddp->dd_ddate <= time32_to_time(spcl.c_ddate)) continue; - spcl.c_ddate = ddp->dd_ddate; + spcl.c_ddate = time_to_time32(ddp->dd_ddate); lastlevel = ddp->dd_level; } } @@ -177,6 +177,7 @@ putdumptime() register int i; int fd; char *fname; + char *tmsg; if(uflag == 0) return; @@ -211,7 +212,7 @@ putdumptime() found: (void) strncpy(dtwalk->dd_name, fname, sizeof (dtwalk->dd_name)); dtwalk->dd_level = level; - dtwalk->dd_ddate = spcl.c_date; + dtwalk->dd_ddate = time32_to_time(spcl.c_date); ITITERATE(i, dtwalk) { dumprecout(df, dtwalk); @@ -221,8 +222,13 @@ putdumptime() if (ftruncate(fd, ftell(df))) quit("ftruncate (%s): %s\n", dumpdates, strerror(errno)); (void) fclose(df); - msg("level %c dump on %s", level, - spcl.c_date == 0 ? "the epoch\n" : ctime(&spcl.c_date)); + if (spcl.c_date == 0) { + tmsg = "the epoch\n"; + } else { + time_t t = time32_to_time(spcl.c_date); + tmsg = ctime(&t); + } + msg("level %c dump on %s", level, tmsg); } static void diff --git a/sbin/dump/main.c b/sbin/dump/main.c index be639b7b881b..0e3b3f6f0e1a 100644 --- a/sbin/dump/main.c +++ b/sbin/dump/main.c @@ -105,9 +105,10 @@ main(argc, argv) register int ch; int i, anydirskipped, bflag = 0, Tflag = 0, honorlevel = 1; ino_t maxino; + char *tmsg; + time_t t; - spcl.c_date = 0; - (void)time((time_t *)&spcl.c_date); + spcl.c_date = time_to_time32(time(NULL)); tsize = 0; /* Default later, based on 'c' option for cart tapes */ if ((tape = getenv("TAPE")) == NULL) @@ -313,10 +314,20 @@ main(argc, argv) if (!Tflag) getdumptime(); /* /etc/dumpdates snarfed */ - msg("Date of this level %c dump: %s", level, - spcl.c_date == 0 ? "the epoch\n" : ctime(&spcl.c_date)); - msg("Date of last level %c dump: %s", lastlevel, - spcl.c_ddate == 0 ? "the epoch\n" : ctime(&spcl.c_ddate)); + if (spcl.c_date == 0) { + tmsg = "the epoch\n"; + } else { + time_t t = time32_to_time(spcl.c_date); + tmsg = ctime(&t); + } + msg("Date of this level %c dump: %s", level, tmsg); + if (spcl.c_ddate == 0) { + tmsg = "the epoch\n"; + } else { + time_t t = time32_to_time(spcl.c_ddate); + tmsg = ctime(&t); + } + msg("Date of last level %c dump: %s", lastlevel, tmsg); msg("Dumping %s ", disk); if (dt != NULL) msgtail("(%s) ", dt->fs_file); diff --git a/sbin/restore/tape.c b/sbin/restore/tape.c index 5b8129d54236..9be7d43c730a 100644 --- a/sbin/restore/tape.c +++ b/sbin/restore/tape.c @@ -232,8 +232,8 @@ setup() } if (vflag || command == 't') printdumpinfo(); - dumptime = spcl.c_ddate; - dumpdate = spcl.c_date; + dumptime = time32_to_time(spcl.c_ddate); + dumpdate = time32_to_time(spcl.c_date); if (stat(".", &stbuf) < 0) { fprintf(stderr, "cannot stat .: %s\n", strerror(errno)); done(1); @@ -404,9 +404,10 @@ getvol(nextvol) volno = 0; goto again; } - if (tmpbuf.c_date != dumpdate || tmpbuf.c_ddate != dumptime) { - fprintf(stderr, "Wrong dump date\n\tgot: %s", - ctime(&tmpbuf.c_date)); + if (time32_to_time(tmpbuf.c_date) != dumpdate || + time32_to_time(tmpbuf.c_ddate) != dumptime) { + time_t t = time32_to_time(tmpbuf.c_date); + fprintf(stderr, "Wrong dump date\n\tgot: %s", ctime(&t)); fprintf(stderr, "\twanted: %s", ctime(&dumpdate)); volno = 0; goto again; @@ -508,9 +509,12 @@ setdumpnum() void printdumpinfo() { - fprintf(stdout, "Dump date: %s", ctime(&spcl.c_date)); + time_t t; + t = time32_to_time(spcl.c_date); + fprintf(stdout, "Dump date: %s", ctime(&t)); + t = time32_to_time(spcl.c_ddate); fprintf(stdout, "Dumped from: %s", - (spcl.c_ddate == 0) ? "the epoch\n" : ctime(&spcl.c_ddate)); + (spcl.c_ddate == 0) ? "the epoch\n" : ctime(&t)); if (spcl.c_host[0] == '\0') return; fprintf(stderr, "Level %ld dump of %s on %s:%s\n", @@ -1227,7 +1231,7 @@ findinode(header) if (header->c_magic != NFS_MAGIC) { skipcnt++; while (gethead(header) == FAIL || - header->c_date != dumpdate) + time32_to_time(header->c_date) != dumpdate) skipcnt++; } switch (header->c_type) { @@ -1240,7 +1244,7 @@ findinode(header) if (header->c_addr[i]) readtape(buf); while (gethead(header) == FAIL || - header->c_date != dumpdate) + time32_to_time(header->c_date) != dumpdate) skipcnt++; break;