aboutsummaryrefslogtreecommitdiff
path: root/sbin/dumpfs/dumpfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'sbin/dumpfs/dumpfs.c')
-rw-r--r--sbin/dumpfs/dumpfs.c84
1 files changed, 40 insertions, 44 deletions
diff --git a/sbin/dumpfs/dumpfs.c b/sbin/dumpfs/dumpfs.c
index 7c43cf4489a8..c4988ded88d8 100644
--- a/sbin/dumpfs/dumpfs.c
+++ b/sbin/dumpfs/dumpfs.c
@@ -44,20 +44,6 @@
* SUCH DAMAGE.
*/
-#ifndef lint
-static const char copyright[] =
-"@(#) Copyright (c) 1983, 1992, 1993\n\
- The Regents of the University of California. All rights reserved.\n";
-#endif /* not lint */
-
-#ifndef lint
-#if 0
-static char sccsid[] = "@(#)dumpfs.c 8.5 (Berkeley) 4/29/95";
-#endif
-static const char rcsid[] =
- "$FreeBSD$";
-#endif /* not lint */
-
#include <sys/param.h>
#include <sys/time.h>
#include <sys/disklabel.h>
@@ -74,6 +60,7 @@ static const char rcsid[] =
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include <unistd.h>
#define afs disk.d_fs
@@ -89,7 +76,7 @@ static void dumpfreespacecg(int);
static int marshal(const char *);
static void pbits(void *, int);
static void pblklist(void *, int, off_t, int);
-static void ufserr(const char *);
+static const char *ufserr(void);
static void usage(void) __dead2;
int
@@ -130,8 +117,9 @@ main(int argc, char *argv[])
usage();
while ((name = *argv++) != NULL) {
- if (ufs_disk_fillout(&disk, name) == -1) {
- ufserr(name);
+ if (ufs_disk_fillout_blank(&disk, name) == -1 ||
+ sbfind(&disk, 0) == -1) {
+ printf("\n%s: %s\n", name, ufserr());
eval |= 1;
continue;
}
@@ -162,7 +150,7 @@ dumpfs(const char *name, int dosb)
time_t fstime, fsmtime;
int64_t fssize;
int32_t fsflags;
- int i;
+ int i, ret;
switch (disk.d_ufs) {
case 2:
@@ -187,7 +175,8 @@ dumpfs(const char *name, int dosb)
afs.fs_ncg, (intmax_t)fssize, (intmax_t)afs.fs_dsize);
break;
default:
- goto err;
+ printf("Unknown filesystem type %d\n", disk.d_ufs);
+ return (1);
}
printf("bsize\t%d\tshift\t%d\tmask\t0x%08x\n",
afs.fs_bsize, afs.fs_bshift, afs.fs_bmask);
@@ -233,8 +222,8 @@ dumpfs(const char *name, int dosb)
printf("sbsize\t%d\tcgsize\t%d\tcgoffset %d\tcgmask\t0x%08x\n",
afs.fs_sbsize, afs.fs_cgsize, afs.fs_old_cgoffset,
afs.fs_old_cgmask);
- printf("csaddr\t%d\tcssize\t%d\n",
- afs.fs_old_csaddr, afs.fs_cssize);
+ printf("csaddr\t%jd\tcssize\t%d\n",
+ (intmax_t)afs.fs_csaddr, afs.fs_cssize);
printf("rotdelay %dms\trps\t%d\ttrackskew %d\tinterleave %d\n",
afs.fs_old_rotdelay, afs.fs_old_rps, afs.fs_old_trackskew,
afs.fs_old_interleave);
@@ -242,8 +231,11 @@ dumpfs(const char *name, int dosb)
afs.fs_old_nsect, afs.fs_old_npsect, afs.fs_old_spc);
break;
default:
- goto err;
+ printf("Unknown filesystem type %d\n", disk.d_ufs);
+ return (1);
}
+ printf("old_cpg\t%d\tsize_cg\t%zu\tCGSIZE\t%zu\n",
+ afs.fs_old_cpg, sizeof(struct cg), CGSIZE(&afs));
printf("sblkno\t%d\tcblkno\t%d\tiblkno\t%d\tdblkno\t%d\n",
afs.fs_sblkno, afs.fs_cblkno, afs.fs_iblkno, afs.fs_dblkno);
printf("cgrotor\t%d\tfmod\t%d\tronly\t%d\tclean\t%d\n",
@@ -308,9 +300,6 @@ dumpfs(const char *name, int dosb)
afs.fs_volname, (uintmax_t)afs.fs_swuid,
(uintmax_t)afs.fs_providersize);
printf("\ncs[].cs_(nbfree,ndir,nifree,nffree):\n\t");
- afs.fs_csp = calloc(1, afs.fs_cssize);
- if (bread(&disk, fsbtodb(&afs, afs.fs_csaddr), afs.fs_csp, afs.fs_cssize) == -1)
- goto err;
for (i = 0; i < afs.fs_ncg; i++) {
struct csum *cs = &afs.fs_cs(&afs, i);
if (i && i % 4 == 0)
@@ -329,14 +318,15 @@ dumpfs(const char *name, int dosb)
}
if (dosb)
return (0);
+ ret = 0;
while ((i = cgread(&disk)) != 0) {
- if (i == -1 || dumpcg())
- goto err;
+ if (i == -1) {
+ ret = 1;
+ printf("\ncg %d: %s\n", disk.d_lcg, ufserr());
+ } else if (dumpcg())
+ ret = 1;
}
- return (0);
-
-err: ufserr(name);
- return (1);
+ return (ret);
}
static int
@@ -402,17 +392,22 @@ dumpcg(void)
static int
dumpfreespace(const char *name, int fflag)
{
- int i;
+ intmax_t startblkno;
+ int i, ret;
+ ret = 0;
while ((i = cgread(&disk)) != 0) {
- if (i == -1)
- goto err;
- dumpfreespacecg(fflag);
+ if (i != -1) {
+ dumpfreespacecg(fflag);
+ } else {
+ startblkno = disk.d_lcg * afs.fs_fpg;
+ printf("\nBlocks %jd-%jd of cg %d skipped: %s\n",
+ startblkno, startblkno + afs.fs_fpg - 1,
+ disk.d_lcg, ufserr());
+ ret = 1;
+ }
}
- return (0);
-err:
- ufserr(name);
- return (1);
+ return (ret);
}
static void
@@ -521,13 +516,14 @@ pblklist(void *vp, int max, off_t offset, int fflag)
}
}
-static void
-ufserr(const char *name)
+static const char *
+ufserr(void)
{
if (disk.d_error != NULL)
- warnx("%s: %s", name, disk.d_error);
- else if (errno)
- warn("%s", name);
+ return(disk.d_error);
+ if (errno)
+ return (strerror(errno));
+ return ("unknown error");
}
static void