[PATCH] sbin/dump bug fixing
Sepherosa Ziehau
sepherosa at softhome.net
Thu Mar 31 23:45:22 PST 2005
some patch for sbin/dump extracted from FreeBSD
sbin/dump/dump.h 1.7.6.4 -> 1.7.6.5
sbin/dump/itime.c 1.3.2.1 -> 1.3.2.2
sbin/dump/traverse.c 1.10.2.6 -> 1.10.2.8
We probably need them
Best Regards,
sepheIndex: dump.h
===================================================================
RCS file: /opt/df_cvs/src/sbin/dump/dump.h,v
retrieving revision 1.5
diff -u -r1.5 dump.h
--- dump.h 4 Feb 2004 17:39:59 -0000 1.5
+++ dump.h 1 Apr 2005 07:41:36 -0000
@@ -168,13 +168,13 @@
time_t dd_ddate;
};
int nddates; /* number of records (might be zero) */
-int ddates_in; /* we have read the increment file */
struct dumpdates **ddatev; /* the arrayfied version */
void initdumptimes(void);
void getdumptime(void);
void putdumptime(void);
-#define ITITERATE(i, ddp) \
- for (ddp = ddatev[i = 0]; i < nddates; ddp = ddatev[++i])
+#define ITITERATE(i, ddp) \
+ if (ddatev != NULL) \
+ for (ddp = ddatev[i = 0]; i < nddates; ddp = ddatev[++i])
void sig(int signo);
Index: itime.c
===================================================================
RCS file: /opt/df_cvs/src/sbin/dump/itime.c,v
retrieving revision 1.7
diff -u -r1.7 itime.c
--- itime.c 27 Dec 2004 22:36:37 -0000 1.7
+++ itime.c 1 Apr 2005 07:41:36 -0000
@@ -67,7 +67,6 @@
SLIST_HEAD(dthead, dumptime) dthead = SLIST_HEAD_INITIALIZER(dthead);
struct dumpdates **ddatev = 0;
int nddates = 0;
-int ddates_in = 0;
static void dumprecout(FILE *, struct dumpdates *);
static int getrecord(FILE *, struct dumpdates *);
@@ -120,7 +119,6 @@
SLIST_INSERT_HEAD(&dthead, dtwalk, dt_list);
}
- ddates_in = 1;
/*
* arrayify the list, leaving enough room for the additional
* record that we may have to add to the ddate structure
@@ -183,7 +181,6 @@
free((char *)ddatev);
ddatev = 0;
nddates = 0;
- ddates_in = 0;
readdumptimes(df);
if (fseek(df, 0L, 0) < 0)
quit("fseek: %s\n", strerror(errno));
Index: traverse.c
===================================================================
RCS file: /opt/df_cvs/src/sbin/dump/traverse.c,v
retrieving revision 1.8
diff -u -r1.8 traverse.c
--- traverse.c 27 Dec 2004 22:36:37 -0000 1.8
+++ traverse.c 1 Apr 2005 07:41:36 -0000
@@ -223,7 +223,7 @@
for (ret = 0, i = 0; filesize > 0 && i < NDADDR; i++) {
if (di.di_db[i] != 0)
ret |= searchdir(ino, di.di_db[i],
- (long)dblksize(sblock, dp, i),
+ (long)dblksize(sblock, &di, i),
filesize, tapesize, nodump);
if (ret & HASDUMPEDFILE)
filesize = 0;
@@ -238,7 +238,7 @@
}
if (ret & HASDUMPEDFILE) {
SETINO(ino, dumpinomap);
- *tapesize += blockest(dp);
+ *tapesize += blockest(&di);
change = 1;
continue;
}
@@ -328,12 +328,15 @@
ip = getino(dp->d_ino);
if (TSTINO(dp->d_ino, dumpinomap)) {
CLRINO(dp->d_ino, dumpinomap);
- CLRINO(dp->d_ino, usedinomap);
*tapesize -= blockest(ip);
}
- /* Add back to dumpdirmap to propagate nodump. */
+ /*
+ * Add back to dumpdirmap and remove from usedinomap
+ * to propagate nodump.
+ */
if ((ip->di_mode & IFMT) == IFDIR) {
SETINO(dp->d_ino, dumpdirmap);
+ CLRINO(dp->d_ino, usedinomap);
ret |= HASSUBDIRS;
}
} else {
More information about the Submit
mailing list