Use getfsspecname() to fill the filesystem argument in dumpdates.

While here, make sure that the error strings terminate with newline
consistently, and add a function that adds the system error string.
This commit is contained in:
christos 2019-03-01 16:42:11 +00:00
parent b14a651935
commit c8d11eb8cc
7 changed files with 86 additions and 60 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: dump.h,v 1.55 2019/02/03 12:17:14 mrg Exp $ */
/* $NetBSD: dump.h,v 1.56 2019/03/01 16:42:11 christos Exp $ */
/*-
* Copyright (c) 1980, 1993
@ -185,10 +185,11 @@ void fs_mapinodes(ino_t, u_int64_t *, int *);
/* operator interface functions */
void broadcast(const char *);
void lastdump(char);
void msg(const char *fmt, ...) __printflike(1, 2);
void msgtail(const char *fmt, ...) __printflike(1, 2);
void msg(const char *, ...) __printflike(1, 2);
void msgtail(const char *, ...) __printflike(1, 2);
int query(const char *);
void quit(const char *fmt, ...) __printflike(1, 2);
void quit(const char *, ...) __printflike(1, 2);
void quite(int, const char *, ...) __printflike(2, 3);
time_t do_stats(void);
void statussig(int);
void timeest(void);

View File

@ -1,4 +1,4 @@
/* $NetBSD: ffs_inode.c,v 1.22 2013/06/23 02:06:04 dholland Exp $ */
/* $NetBSD: ffs_inode.c,v 1.23 2019/03/01 16:42:11 christos Exp $ */
/*-
* Copyright (c) 1980, 1991, 1993, 1994
@ -36,7 +36,7 @@ __COPYRIGHT("@(#) Copyright (c) 1980, 1991, 1993, 1994\
#endif /* not lint */
#ifndef lint
__RCSID("$NetBSD: ffs_inode.c,v 1.22 2013/06/23 02:06:04 dholland Exp $");
__RCSID("$NetBSD: ffs_inode.c,v 1.23 2019/03/01 16:42:11 christos Exp $");
#endif /* not lint */
#include <sys/param.h>
@ -79,7 +79,7 @@ fs_read_sblock(char *superblock)
sblock = (struct fs *)superblock;
for (i = 0; ; i++) {
if (sblock_try[i] == -1)
quit("can't find superblock\n");
quit("can't find superblock");
rawread(sblock_try[i], (char *)superblock, MAXBSIZE);
switch(sblock->fs_magic) {
@ -169,7 +169,7 @@ fs_mapinodes(ino_t maxino __unused, u_int64_t *tape_size, int *anydirskipped)
char *cp;
if ((cgp = malloc(sblock->fs_cgsize)) == NULL)
quit("fs_mapinodes: cannot allocate memory.\n");
quite(errno, "fs_mapinodes: cannot allocate memory.");
for (cg = 0; cg < sblock->fs_ncg; cg++) {
ino = cg * sblock->fs_ipg;
@ -190,7 +190,8 @@ fs_mapinodes(ino_t maxino __unused, u_int64_t *tape_size, int *anydirskipped)
*/
if (sblock->fs_flags & FS_DOSOFTDEP) {
if (!cg_chkmagic(cgp, 0))
quit("mapfiles: cg %d: bad magic number\n", cg);
quit("%s: cg %d: bad magic number\n",
__func__, cg);
cp = &cg_inosused(cgp, 0)[(inosused - 1) / CHAR_BIT];
for ( ; inosused > 0; inosused -= CHAR_BIT, cp--) {
if (*cp == 0)
@ -225,7 +226,7 @@ getino(ino_t inum)
struct ufs2_dinode *dp2;
if (inoblock == NULL && (inoblock = malloc(ufsib->ufs_bsize)) == NULL)
quit("cannot allocate inode memory.\n");
quite(errno, "cannot allocate inode memory.");
curino = inum;
if (inum >= minino && inum < maxino)
goto gotit;

View File

@ -1,4 +1,4 @@
/* $NetBSD: itime.c,v 1.20 2013/06/15 01:27:19 christos Exp $ */
/* $NetBSD: itime.c,v 1.21 2019/03/01 16:42:11 christos Exp $ */
/*-
* Copyright (c) 1980, 1993
@ -34,7 +34,7 @@
#if 0
static char sccsid[] = "@(#)itime.c 8.1 (Berkeley) 6/5/93";
#else
__RCSID("$NetBSD: itime.c,v 1.20 2013/06/15 01:27:19 christos Exp $");
__RCSID("$NetBSD: itime.c,v 1.21 2019/03/01 16:42:11 christos Exp $");
#endif
#endif /* not lint */
@ -87,8 +87,8 @@ initdumptimes(void)
}
(void) fclose(df);
if ((df = fopen(dumpdates, "r")) == NULL) {
quit("cannot read %s even after creating it: %s\n",
dumpdates, strerror(errno));
quite(errno, "cannot read %s even after creating it",
dumpdates);
/* NOTREACHED */
}
}
@ -175,7 +175,7 @@ putdumptime(void)
if(uflag == 0)
return;
if ((df = fopen(dumpdates, "r+")) == NULL)
quit("cannot rewrite %s: %s\n", dumpdates, strerror(errno));
quite(errno, "cannot rewrite %s", dumpdates);
fd = fileno(df);
(void) flock(fd, LOCK_EX);
fname = disk;
@ -184,7 +184,7 @@ putdumptime(void)
nddates = 0;
readdumptimes(df);
if (fseek(df, 0L, 0) < 0)
quit("fseek: %s\n", strerror(errno));
quite(errno, "can't fseek %s", dumpdates);
spcl.c_ddate = 0;
ITITERATE(i, dtwalk) {
if (strncmp(fname, dtwalk->dd_name,
@ -211,9 +211,9 @@ putdumptime(void)
dumprecout(df, dtwalk);
}
if (fflush(df))
quit("%s: %s\n", dumpdates, strerror(errno));
quite(errno, "can't flush %s", dumpdates);
if (ftruncate(fd, ftell(df)))
quit("ftruncate (%s): %s\n", dumpdates, strerror(errno));
quite(errno, "can't ftruncate %s", dumpdates);
(void) fclose(df);
msg("level %c dump on %s", level,
spcl.c_date == 0 ? "the epoch\n" : ctime(&dtfound->dd_ddate));
@ -227,7 +227,7 @@ dumprecout(FILE *file, struct dumpdates *what)
what->dd_name,
what->dd_level,
ctime(&what->dd_ddate)) < 0)
quit("%s: %s\n", dumpdates, strerror(errno));
quite(errno, "can't write %s", dumpdates);
}
int recno;

View File

@ -1,4 +1,4 @@
/* $NetBSD: main.c,v 1.73 2015/08/24 17:37:10 bouyer Exp $ */
/* $NetBSD: main.c,v 1.74 2019/03/01 16:42:11 christos Exp $ */
/*-
* Copyright (c) 1980, 1991, 1993, 1994
@ -39,7 +39,7 @@ __COPYRIGHT("@(#) Copyright (c) 1980, 1991, 1993, 1994\
#if 0
static char sccsid[] = "@(#)main.c 8.6 (Berkeley) 5/1/95";
#else
__RCSID("$NetBSD: main.c,v 1.73 2015/08/24 17:37:10 bouyer Exp $");
__RCSID("$NetBSD: main.c,v 1.74 2019/03/01 16:42:11 christos Exp $");
#endif
#endif /* not lint */
@ -124,7 +124,7 @@ main(int argc, char *argv[])
temp = _PATH_DTMP;
strcpy(labelstr, "none"); /* XXX safe strcpy. */
if (TP_BSIZE / DEV_BSIZE == 0 || TP_BSIZE % DEV_BSIZE != 0)
quit("TP_BSIZE must be a multiple of DEV_BSIZE\n");
quit("TP_BSIZE must be a multiple of DEV_BSIZE");
level = '0';
timestamp = 0;
@ -286,11 +286,12 @@ main(int argc, char *argv[])
error = lstat(argv[i], &sb);
if (Fflag || (!error && (S_ISCHR(sb.st_mode) || S_ISBLK(sb.st_mode)))) {
if (error)
quit("Cannot stat %s: %s\n", argv[i], strerror(errno));
quite(errno, "can't stat %s", argv[i]);
disk = argv[i];
multicheck:
if (dirc != 0)
quit("Can't dump a disk or image at the same time as a file list\n");
quit("can't dump a disk or image at the same"
" time as a file list");
break;
}
if ((dt = fstabsearch(argv[i])) != NULL) {
@ -299,8 +300,7 @@ main(int argc, char *argv[])
goto multicheck;
}
if (statvfs(argv[i], &fsbuf) == -1)
quit("Cannot statvfs %s: %s\n", argv[i],
strerror(errno));
quite(errno, "can't statvfs %s", argv[i]);
disk = fsbuf.f_mntfromname;
if (strcmp(argv[i], fsbuf.f_mntonname) == 0)
goto multicheck;
@ -318,7 +318,7 @@ main(int argc, char *argv[])
mountpoint);
} else {
if (strcmp(mountpoint, fsbuf.f_mntonname) != 0)
quit("%s is not on %s\n", argv[i], mountpoint);
quit("%s is not on %s", argv[i], mountpoint);
}
msg("Dumping file/directory %s\n", argv[i]);
dirc++;
@ -403,18 +403,18 @@ main(int argc, char *argv[])
mntinfo = mntinfosearch(disk);
if ((dt = fstabsearch(disk)) != NULL) {
if (getfsspecname(buf, sizeof(buf), dt->fs_spec) == NULL)
quit("%s (%s)", buf, strerror(errno));
quite(errno, "can't resolve mount %s (%s)", dt->fs_spec,
buf);
if (getdiskrawname(rbuf, sizeof(rbuf), buf) == NULL)
quit("Can't get disk raw name for `%s' (%s)",
buf, strerror(errno));
quite(errno, "can't get disk raw name for %s", buf);
disk = rbuf;
mountpoint = dt->fs_file;
msg("Found %s on %s in %s\n", disk, mountpoint, _PATH_FSTAB);
} else if (mntinfo != NULL) {
if (getdiskrawname(rbuf, sizeof(rbuf), mntinfo->f_mntfromname)
== NULL)
quit("Can't get disk raw name for `%s' (%s)",
mntinfo->f_mntfromname, strerror(errno));
quite(errno, "can't get disk raw name for %s",
mntinfo->f_mntfromname);
disk = rbuf;
mountpoint = mntinfo->f_mntonname;
msg("Found %s on %s in mount table\n", disk, mountpoint);
@ -592,7 +592,8 @@ main(int argc, char *argv[])
* Allocate tape buffer.
*/
if (!alloctape())
quit("can't allocate tape buffers - try a smaller blocking factor.\n");
quit("can't allocate tape buffers - try a smaller"
" blocking factor.");
startnewtape(1);
(void)time((time_t *)&(tstart_writing));
@ -709,7 +710,7 @@ sig(int signo)
case SIGTERM:
case SIGTRAP:
if (pipeout)
quit("Signal on pipe: cannot recover\n");
quit("Signal on pipe: cannot recover");
msg("Rewriting attempted as response to signal %s.\n", sys_siglist[signo]);
(void)fflush(stderr);
(void)fflush(stdout);
@ -805,7 +806,7 @@ xcalloc(size_t number, size_t size)
p = calloc(number, size);
if (p == NULL)
quit("%s\n", strerror(errno));
quite(errno, "Can't allocate %zu bytes", size * number);
return (p);
}
@ -816,7 +817,7 @@ xmalloc(size_t size)
p = malloc(size);
if (p == NULL)
quit("%s\n", strerror(errno));
quite(errno, "Can't allocate %zu bytes", size);
return (p);
}
@ -827,6 +828,6 @@ xstrdup(const char *str)
p = strdup(str);
if (p == NULL)
quit("%s\n", strerror(errno));
quite(errno, "Can't copy %s", str);
return (p);
}

View File

@ -1,4 +1,4 @@
/* $NetBSD: optr.c,v 1.42 2013/09/08 13:26:05 mlelstv Exp $ */
/* $NetBSD: optr.c,v 1.43 2019/03/01 16:42:11 christos Exp $ */
/*-
* Copyright (c) 1980, 1988, 1993
@ -34,7 +34,7 @@
#if 0
static char sccsid[] = "@(#)optr.c 8.2 (Berkeley) 1/6/94";
#else
__RCSID("$NetBSD: optr.c,v 1.42 2013/09/08 13:26:05 mlelstv Exp $");
__RCSID("$NetBSD: optr.c,v 1.43 2019/03/01 16:42:11 christos Exp $");
#endif
#endif /* not lint */
@ -94,7 +94,7 @@ query(const char *question)
firstprompt = time((time_t *)0);
if ((mytty = fopen(_PATH_TTY, "r")) == NULL)
quit("fopen on %s fails: %s\n", _PATH_TTY, strerror(errno));
quite(errno, "fopen on %s fails", _PATH_TTY);
attnmessage = question;
timeout = 0;
alarmcatch(0);
@ -104,7 +104,7 @@ query(const char *question)
if (fgets(replybuffer, 63, mytty) == NULL) {
clearerr(mytty);
if (++errcount > 30) /* XXX ugly */
quit("excessive operator query failures\n");
quit("excessive operator query failures");
} else if (replybuffer[0] == 'y' || replybuffer[0] == 'Y') {
back = 1;
} else if (replybuffer[0] == 'n' || replybuffer[0] == 'N') {
@ -294,6 +294,24 @@ msgtail(const char *fmt, ...)
va_end(ap);
}
void
quite(int e, const char *fmt, ...)
{
va_list ap;
(void) fprintf(stderr," DUMP: ");
#ifdef TDEBUG
(void) fprintf(stderr, "pid=%d ", getpid());
#endif
va_start(ap, fmt);
(void) vfprintf(stderr, fmt, ap);
va_end(ap);
(void) fprintf(stderr, ": %s\n", strerror(e));
(void) fflush(stdout);
(void) fflush(stderr);
dumpabort(0);
}
void
quit(const char *fmt, ...)
{
@ -306,6 +324,7 @@ quit(const char *fmt, ...)
va_start(ap, fmt);
(void) vfprintf(stderr, fmt, ap);
va_end(ap);
(void) fprintf(stderr, "\n");
(void) fflush(stdout);
(void) fflush(stderr);
dumpabort(0);
@ -324,10 +343,13 @@ allocfsent(const struct fstab *fs)
new = xmalloc(sizeof (*fs));
new->fs_file = xstrdup(fs->fs_file);
new->fs_type = xstrdup(fs->fs_type);
new->fs_spec = xstrdup(fs->fs_spec);
new->fs_spec = xmalloc(FILENAME_MAX);
if (getfsspecname(new->fs_spec, FILENAME_MAX, fs->fs_spec) == NULL)
quite(errno, "can't resolve mount point %s (%s)",
fs->fs_spec, new->fs_spec);
new->fs_passno = fs->fs_passno;
new->fs_freq = fs->fs_freq;
return (new);
return new;
}
struct pfstab {
@ -426,7 +448,7 @@ mntinfosearch(const char *key)
char buf[MAXPATHLEN];
if ((mntbufc = getmntinfo(&mntbuf, MNT_NOWAIT)) == 0)
quit("Can't get mount list: %s", strerror(errno));
quite(errno, "Can't get mount list");
for (fs = mntbuf, i = 0; i < mntbufc; i++, fs++) {
#ifdef DUMP_LFS
if (strcmp(fs->f_fstypename, "lfs") != 0)

View File

@ -1,4 +1,4 @@
/* $NetBSD: tape.c,v 1.54 2015/08/24 17:37:10 bouyer Exp $ */
/* $NetBSD: tape.c,v 1.55 2019/03/01 16:42:11 christos Exp $ */
/*-
* Copyright (c) 1980, 1991, 1993
@ -34,7 +34,7 @@
#if 0
static char sccsid[] = "@(#)tape.c 8.4 (Berkeley) 5/1/95";
#else
__RCSID("$NetBSD: tape.c,v 1.54 2015/08/24 17:37:10 bouyer Exp $");
__RCSID("$NetBSD: tape.c,v 1.55 2019/03/01 16:42:11 christos Exp $");
#endif
#endif /* not lint */
@ -196,7 +196,7 @@ tperror(int signo __unused)
if (pipeout) {
msg("write error on %s\n", tape);
quit("Cannot recover\n");
quit("Cannot recover");
/* NOTREACHED */
}
msg("write error %ld blocks into volume %d\n", blocksthisvol, tapeno);
@ -215,7 +215,7 @@ static void
sigpipe(int signo __unused)
{
quit("Broken pipe\n");
quit("Broken pipe");
}
/*
@ -284,7 +284,7 @@ flushtape(void)
slp->req[trecno].count = 0; /* Sentinel */
if (atomic_write(slp->fd, slp->req, siz) != siz)
quit("error writing command pipe: %s\n", strerror(errno));
quite(errno, "error writing command pipe");
slp->sent = 1; /* we sent a request, read the response later */
lastfirstrec = slp->firstrec;
@ -375,7 +375,7 @@ trewind(int eject)
if (got != writesize) {
msg("EOT detected in last 2 tape records!\n");
msg("Use a longer tape, decrease the size estimate\n");
quit("or use no size estimate at all.\n");
quit("or use no size estimate at all");
}
}
(void) close(slaves[f].fd);
@ -554,7 +554,7 @@ rollforward(void)
slp->sent = 0;
if (got != writesize) {
quit("EOT detected at start of the tape!\n");
quit("EOT detected at start of the tape");
}
}
}
@ -768,8 +768,8 @@ enslave(void)
if (socketpair(AF_LOCAL, SOCK_STREAM, 0, cmd) < 0 ||
(slaves[i].pid = fork()) < 0)
quit("too many slaves, %d (recompile smaller): %s\n",
i, strerror(errno));
quite(errno, "too many slaves, %d (recompile smaller)",
i);
slaves[i].fd = cmd[1];
slaves[i].sent = 0;
@ -822,14 +822,15 @@ doslave(int cmd, int slave_number __unused)
*/
(void) close(diskfd);
if ((diskfd = open(disk_dev, O_RDONLY)) < 0)
quit("slave couldn't reopen disk: %s\n", strerror(errno));
quite(errno, "slave couldn't reopen disk");
/*
* Need the pid of the next slave in the loop...
*/
if ((nread = atomic_read(cmd, &nextslave, sizeof nextslave))
!= sizeof nextslave) {
quit("master/slave protocol botched - didn't get pid of next slave.\n");
quit("master/slave protocol botched - didn't get pid"
" of next slave");
}
/*
@ -847,7 +848,7 @@ doslave(int cmd, int slave_number __unused)
if (p->count != 1 || atomic_read(cmd,
slp->tblock[trecno],
TP_BSIZE) != TP_BSIZE)
quit("master/slave protocol botched.\n");
quit("master/slave protocol botched");
}
}
@ -924,7 +925,7 @@ doslave(int cmd, int slave_number __unused)
}
printcachestats();
if (nread != 0)
quit("error reading command pipe: %s\n", strerror(errno));
quite(errno, "error reading command pipe");
}
/*

View File

@ -1,4 +1,4 @@
/* $NetBSD: traverse.c,v 1.51 2019/02/03 12:17:14 mrg Exp $ */
/* $NetBSD: traverse.c,v 1.52 2019/03/01 16:42:11 christos Exp $ */
/*-
* Copyright (c) 1980, 1988, 1991, 1993
@ -34,7 +34,7 @@
#if 0
static char sccsid[] = "@(#)traverse.c 8.7 (Berkeley) 6/15/95";
#else
__RCSID("$NetBSD: traverse.c,v 1.51 2019/02/03 12:17:14 mrg Exp $");
__RCSID("$NetBSD: traverse.c,v 1.52 2019/03/01 16:42:11 christos Exp $");
#endif
#endif /* not lint */
@ -414,7 +414,7 @@ searchdir(ino_t dino, daddr_t blkno, long size, off_t filesize,
dblk = malloc(size);
if (dblk == NULL)
quit("searchdir: cannot allocate directory memory.\n");
quit("%s: cannot allocate directory memory", __func__);
bread(fsatoda(ufsib, blkno), dblk, (int)size);
if (filesize < size)
size = filesize;