Use err(3) instead of local redefinition.
This commit is contained in:
parent
9e9c06cc6a
commit
c8ef4a7a48
@ -32,22 +32,28 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)compare.c 8.1 (Berkeley) 6/6/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/stat.h>
|
||||
#include <err.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <fts.h>
|
||||
#include <errno.h>
|
||||
#include <md5.h>
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
#include <md5.h>
|
||||
#include "mtree.h"
|
||||
#include "extern.h"
|
||||
|
||||
extern int uflag;
|
||||
extern int lineno;
|
||||
|
||||
static char *ftype __P((u_int));
|
||||
|
||||
@ -283,7 +289,7 @@ rlink(name)
|
||||
register int len;
|
||||
|
||||
if ((len = readlink(name, lbuf, sizeof(lbuf))) == -1)
|
||||
err("%s: %s", name, strerror(errno));
|
||||
err(1, "line %d: %s", lineno, name);
|
||||
lbuf[len] = '\0';
|
||||
return (lbuf);
|
||||
}
|
||||
|
@ -32,21 +32,26 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)create.c 8.1 (Berkeley) 6/6/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/stat.h>
|
||||
#include <time.h>
|
||||
#include <dirent.h>
|
||||
#include <err.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <fts.h>
|
||||
#include <dirent.h>
|
||||
#include <grp.h>
|
||||
#include <pwd.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <md5.h>
|
||||
#include <pwd.h>
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
#include "mtree.h"
|
||||
#include "extern.h"
|
||||
|
||||
@ -58,6 +63,7 @@ extern int ftsoptions;
|
||||
extern int dflag, iflag, nflag, sflag;
|
||||
extern u_short keys;
|
||||
extern char fullpath[MAXPATHLEN];
|
||||
extern int lineno;
|
||||
|
||||
static gid_t gid;
|
||||
static uid_t uid;
|
||||
@ -86,7 +92,7 @@ cwalk()
|
||||
argv[0] = ".";
|
||||
argv[1] = NULL;
|
||||
if ((t = fts_open(argv, ftsoptions, dsort)) == NULL)
|
||||
err("fts_open: %s", strerror(errno));
|
||||
err(1, "line %d: fts_open", lineno);
|
||||
while ((p = fts_read(t))) {
|
||||
if (iflag)
|
||||
indent = p->fts_level * 4;
|
||||
@ -109,8 +115,7 @@ cwalk()
|
||||
case FTS_DNR:
|
||||
case FTS_ERR:
|
||||
case FTS_NS:
|
||||
(void)fprintf(stderr, "mtree: %s: %s\n",
|
||||
p->fts_path, strerror(p->fts_errno));
|
||||
warnx("%s: %s", p->fts_path, strerror(p->fts_errno));
|
||||
break;
|
||||
default:
|
||||
if (!dflag)
|
||||
@ -121,8 +126,7 @@ cwalk()
|
||||
}
|
||||
(void)fts_close(t);
|
||||
if (sflag && keys & F_CKSUM)
|
||||
(void)fprintf(stderr,
|
||||
"mtree: %s checksum: %lu\n", fullpath, crc_total);
|
||||
warnx("%s checksum: %lu", fullpath, crc_total);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -152,8 +156,9 @@ statf(indent, p)
|
||||
if ((pw = getpwuid(p->fts_statp->st_uid)) != NULL) {
|
||||
output(indent, &offset, "uname=%s", pw->pw_name);
|
||||
} else {
|
||||
err("could not get uname for uid=%u",
|
||||
p->fts_statp->st_uid);
|
||||
errx(1,
|
||||
"line %d: could not get uname for uid=%u",
|
||||
lineno, p->fts_statp->st_uid);
|
||||
}
|
||||
}
|
||||
if (keys & F_UID)
|
||||
@ -164,8 +169,9 @@ statf(indent, p)
|
||||
if ((gr = getgrgid(p->fts_statp->st_gid)) != NULL) {
|
||||
output(indent, &offset, "gname=%s", gr->gr_name);
|
||||
} else {
|
||||
err("could not get gname for gid=%u",
|
||||
p->fts_statp->st_gid);
|
||||
errx(1,
|
||||
"line %d: could not get gname for gid=%u",
|
||||
lineno, p->fts_statp->st_gid);
|
||||
}
|
||||
}
|
||||
if (keys & F_GID)
|
||||
@ -184,7 +190,7 @@ statf(indent, p)
|
||||
if (keys & F_CKSUM && S_ISREG(p->fts_statp->st_mode)) {
|
||||
if ((fd = open(p->fts_accpath, O_RDONLY, 0)) < 0 ||
|
||||
crc(fd, &val, &len))
|
||||
err("%s: %s", p->fts_accpath, strerror(errno));
|
||||
err(1, "line %d: %s", lineno, p->fts_accpath);
|
||||
(void)close(fd);
|
||||
output(indent, &offset, "cksum=%lu", val);
|
||||
}
|
||||
@ -193,7 +199,7 @@ statf(indent, p)
|
||||
|
||||
md5digest = MD5File(p->fts_accpath,buf);
|
||||
if (!md5digest) {
|
||||
err("%s: %s", p->fts_accpath, strerror(errno));
|
||||
err(1, "line %d: %s", lineno, p->fts_accpath);
|
||||
} else {
|
||||
output(indent, &offset, "md5digest=%s", md5digest);
|
||||
}
|
||||
@ -230,7 +236,7 @@ statd(t, parent, puid, pgid, pmode)
|
||||
|
||||
if ((p = fts_children(t, 0)) == NULL) {
|
||||
if (errno)
|
||||
err("%s: %s", RP(parent), strerror(errno));
|
||||
err(1, "line %d: %s", lineno, RP(parent));
|
||||
return (1);
|
||||
}
|
||||
|
||||
@ -275,14 +281,18 @@ statd(t, parent, puid, pgid, pmode)
|
||||
if ((pw = getpwuid(saveuid)) != NULL)
|
||||
(void)printf(" uname=%s", pw->pw_name);
|
||||
else
|
||||
err("could not get uname for uid=%u", saveuid);
|
||||
errx(1,
|
||||
"line %d: could not get uname for uid=%u",
|
||||
lineno, saveuid);
|
||||
if (keys & F_UID)
|
||||
(void)printf(" uid=%lu", saveuid);
|
||||
if (keys & F_GNAME)
|
||||
if ((gr = getgrgid(savegid)) != NULL)
|
||||
(void)printf(" gname=%s", gr->gr_name);
|
||||
else
|
||||
err("could not get gname for gid=%u", savegid);
|
||||
errx(1,
|
||||
"line %d: could not get gname for gid=%u",
|
||||
lineno, savegid);
|
||||
if (keys & F_GID)
|
||||
(void)printf(" gid=%lu", savegid);
|
||||
if (keys & F_MODE)
|
||||
|
@ -36,7 +36,6 @@
|
||||
int compare __P((char *, NODE *, FTSENT *));
|
||||
int crc __P((int, u_long *, u_long *));
|
||||
void cwalk __P((void));
|
||||
void err __P((const char *, ...));
|
||||
char *inotype __P((u_int));
|
||||
u_int parsekey __P((char *, int *));
|
||||
char *rlink __P((char *));
|
||||
|
@ -29,12 +29,19 @@
|
||||
* 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.
|
||||
*
|
||||
* @(#)misc.c 8.1 (Berkeley) 6/6/93
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)misc.c 8.1 (Berkeley) 6/6/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
#endif /*not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <err.h>
|
||||
#include <fts.h>
|
||||
#include <stdio.h>
|
||||
#include "mtree.h"
|
||||
@ -79,7 +86,7 @@ parsekey(name, needvaluep)
|
||||
k = (KEY *)bsearch(&tmp, keylist, sizeof(keylist) / sizeof(KEY),
|
||||
sizeof(KEY), keycompare);
|
||||
if (k == NULL)
|
||||
err("unknown keyword %s", name);
|
||||
errx(1, "line %d: unknown keyword %s", lineno, name);
|
||||
|
||||
if (needvaluep)
|
||||
*needvaluep = k->flags & NEEDVALUE ? 1 : 0;
|
||||
@ -92,36 +99,3 @@ keycompare(a, b)
|
||||
{
|
||||
return (strcmp(((KEY *)a)->name, ((KEY *)b)->name));
|
||||
}
|
||||
|
||||
#if __STDC__
|
||||
#include <stdarg.h>
|
||||
#else
|
||||
#include <varargs.h>
|
||||
#endif
|
||||
|
||||
void
|
||||
#if __STDC__
|
||||
err(const char *fmt, ...)
|
||||
#else
|
||||
err(fmt, va_alist)
|
||||
char *fmt;
|
||||
va_dcl
|
||||
#endif
|
||||
{
|
||||
va_list ap;
|
||||
#if __STDC__
|
||||
va_start(ap, fmt);
|
||||
#else
|
||||
va_start(ap);
|
||||
#endif
|
||||
(void)fflush(NULL);
|
||||
(void)fprintf(stderr, "\nmtree: ");
|
||||
(void)vfprintf(stderr, fmt, ap);
|
||||
va_end(ap);
|
||||
(void)fprintf(stderr, "\n");
|
||||
if (lineno)
|
||||
(void)fprintf(stderr,
|
||||
"mtree: failed at line %d of the specification\n", lineno);
|
||||
exit(1);
|
||||
/* NOTREACHED */
|
||||
}
|
||||
|
@ -30,7 +30,7 @@
|
||||
.\" SUCH DAMAGE.
|
||||
.\"
|
||||
.\" From: @(#)mtree.8 8.2 (Berkeley) 12/11/93
|
||||
.\" $Id$
|
||||
.\" $Id: mtree.8,v 1.10 1997/02/22 16:07:52 peter Exp $
|
||||
.\"
|
||||
.Dd February 9, 1995
|
||||
.Dt MTREE 8
|
||||
@ -64,38 +64,40 @@ Ignore everything except directory type files.
|
||||
.It Fl e
|
||||
Don't complain about files that are in the file hierarchy, but not in the
|
||||
specification.
|
||||
.It Fl f
|
||||
.It Fl f Ar file
|
||||
Read the specification from
|
||||
.Ar file ,
|
||||
instead of from the standard input.
|
||||
.It Fl i
|
||||
Indents the output 4 spaces each time a directory level is descended when
|
||||
Indent the output 4 spaces each time a directory level is descended when
|
||||
create a specification with the
|
||||
.Fl c
|
||||
option.
|
||||
This does not effect either the /set statements or the comment before each
|
||||
directory.
|
||||
It does however effect the comment before the close of each directory.
|
||||
.It Fl K
|
||||
Add the specified (whitespace or comma separated) keywords to the current
|
||||
set of keywords.
|
||||
.It Fl k
|
||||
.It Fl K Ar keywords
|
||||
Add the specified (whitespace or comma separated)
|
||||
.Ar keywords
|
||||
to the current set of keywords.
|
||||
.It Fl k Ar keywords
|
||||
Use the ``type'' keyword plus the specified (whitespace or comma separated)
|
||||
keywords instead of the current set of keywords.
|
||||
.Ar keywords
|
||||
instead of the current set of keywords.
|
||||
.It Fl n
|
||||
Do not emit pathname comments when creating a specification. Normally
|
||||
a comment is emitted before each directory and before the close of that
|
||||
directory when using the
|
||||
.Fl c
|
||||
option.
|
||||
.It Fl p
|
||||
.It Fl p Ar path
|
||||
Use the file hierarchy rooted in
|
||||
.Ar path ,
|
||||
instead of the current directory.
|
||||
.It Fl r
|
||||
Remove any files in the file hierarchy that are not described in the
|
||||
specification.
|
||||
.It Fl s
|
||||
.It Fl s Ar seed
|
||||
Display a single checksum to the standard error output that represents all
|
||||
of the files for which the keyword
|
||||
.Cm cksum
|
||||
@ -225,7 +227,7 @@ Empty lines and lines whose first non-whitespace character is a hash
|
||||
mark (``#'') are ignored.
|
||||
.Pp
|
||||
The
|
||||
.Nm mtree
|
||||
.Nm
|
||||
utility exits with a status of 0 on success, 1 if any error occurred,
|
||||
and 2 if the file hierarchy did not match the specification.
|
||||
A status of 2 is converted to a status of 0 if the
|
||||
@ -234,7 +236,7 @@ option is used.
|
||||
.Sh EXAMPLES
|
||||
To detect system binaries that have been ``trojan horsed'', it is recommended
|
||||
that
|
||||
.Nm mtree
|
||||
.Nm
|
||||
.Fl K
|
||||
.Cm md5digest
|
||||
be run on the file systems, and a copy of the results stored on a different
|
||||
@ -243,7 +245,7 @@ The output file itself should be digested using the
|
||||
.Xr md5 1
|
||||
utility.
|
||||
Then, periodically,
|
||||
.Nm mtree
|
||||
.Nm
|
||||
and
|
||||
.Xr md5 1
|
||||
should be run against the on-line specifications.
|
||||
@ -278,11 +280,11 @@ system specification directory
|
||||
.Xr chown 8
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Nm mtree
|
||||
.Nm
|
||||
utility appeared in
|
||||
.Bx 4.3 Reno .
|
||||
The MD5 digest capability was added in
|
||||
.Tn FreeBSD
|
||||
2.1, in response to the widespread use of programs which can spoof
|
||||
.Fx 2.1 ,
|
||||
in response to the widespread use of programs which can spoof
|
||||
.Xr cksum 1 .
|
||||
|
||||
|
@ -32,21 +32,26 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char copyright[] =
|
||||
static const char copyright[] =
|
||||
"@(#) Copyright (c) 1989, 1990, 1993\n\
|
||||
The Regents of the University of California. All rights reserved.\n";
|
||||
#endif /* not lint */
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)mtree.c 8.1 (Berkeley) 6/6/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/stat.h>
|
||||
#include <err.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <fts.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include "mtree.h"
|
||||
#include "extern.h"
|
||||
|
||||
@ -64,8 +69,6 @@ main(argc, argv)
|
||||
int argc;
|
||||
char *argv[];
|
||||
{
|
||||
extern int optind;
|
||||
extern char *optarg;
|
||||
int ch;
|
||||
char *dir, *p;
|
||||
int status;
|
||||
@ -85,7 +88,7 @@ main(argc, argv)
|
||||
break;
|
||||
case 'f':
|
||||
if (!(freopen(optarg, "r", stdin)))
|
||||
err("%s: %s", optarg, strerror(errno));
|
||||
err(1, "%s", optarg);
|
||||
break;
|
||||
case 'i':
|
||||
iflag = 1;
|
||||
@ -114,7 +117,7 @@ main(argc, argv)
|
||||
sflag = 1;
|
||||
crc_total = ~strtol(optarg, &p, 0);
|
||||
if (*p)
|
||||
err("illegal seed value -- %s", optarg);
|
||||
errx(1, "illegal seed value -- %s", optarg);
|
||||
case 'U':
|
||||
Uflag = 1;
|
||||
uflag = 1;
|
||||
@ -136,10 +139,10 @@ main(argc, argv)
|
||||
usage();
|
||||
|
||||
if (dir && chdir(dir))
|
||||
err("%s: %s", dir, strerror(errno));
|
||||
err(1, "%s", dir);
|
||||
|
||||
if ((cflag || sflag) && !getwd(fullpath))
|
||||
err("%s", fullpath);
|
||||
errx(1, "%s", fullpath);
|
||||
|
||||
if (cflag) {
|
||||
cwalk();
|
||||
|
@ -32,18 +32,23 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)spec.c 8.1 (Berkeley) 6/6/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fts.h>
|
||||
#include <pwd.h>
|
||||
#include <grp.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
#include <err.h>
|
||||
#include <errno.h>
|
||||
#include <fts.h>
|
||||
#include <grp.h>
|
||||
#include <pwd.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include "mtree.h"
|
||||
#include "extern.h"
|
||||
|
||||
@ -72,7 +77,7 @@ spec()
|
||||
|
||||
/* Find end of line. */
|
||||
if ((p = index(buf, '\n')) == NULL)
|
||||
err("line %d too long", lineno);
|
||||
errx(1, "line %d too long", lineno);
|
||||
|
||||
/* See if next line is continuation line. */
|
||||
if (p[-1] == '\\') {
|
||||
@ -100,7 +105,7 @@ spec()
|
||||
|
||||
/* Grab file name, "$", "set", or "unset". */
|
||||
if ((p = strtok(p, "\n\t ")) == NULL)
|
||||
err("missing field");
|
||||
errx(1, "line %d: missing field", lineno);
|
||||
|
||||
if (p[0] == '/')
|
||||
switch(p[1]) {
|
||||
@ -117,7 +122,8 @@ spec()
|
||||
}
|
||||
|
||||
if (index(p, '/'))
|
||||
err("slash character in file name");
|
||||
errx(1, "line %d: slash character in file name",
|
||||
lineno);
|
||||
|
||||
if (!strcmp(p, "..")) {
|
||||
/* Don't go up, if haven't gone down. */
|
||||
@ -131,11 +137,11 @@ spec()
|
||||
last->flags |= F_DONE;
|
||||
continue;
|
||||
|
||||
noparent: err("no parent node");
|
||||
noparent: errx(1, "line %d: no parent node", lineno);
|
||||
}
|
||||
|
||||
if ((centry = calloc(1, sizeof(NODE) + strlen(p))) == NULL)
|
||||
err("%s", strerror(errno));
|
||||
errx(1, "calloc");
|
||||
*centry = ginfo;
|
||||
(void)strcpy(centry->name, p);
|
||||
#define MAGIC "?*["
|
||||
@ -174,27 +180,28 @@ set(t, ip)
|
||||
for (; (kw = strtok(t, "= \t\n")); t = NULL) {
|
||||
ip->flags |= type = parsekey(kw, &value);
|
||||
if (value && (val = strtok(NULL, " \t\n")) == NULL)
|
||||
err("missing value");
|
||||
errx(1, "line %d: missing value", lineno);
|
||||
switch(type) {
|
||||
case F_CKSUM:
|
||||
ip->cksum = strtoul(val, &ep, 10);
|
||||
if (*ep)
|
||||
err("invalid checksum %s", val);
|
||||
errx(1, "line %d: invalid checksum %s",
|
||||
lineno, val);
|
||||
break;
|
||||
case F_MD5:
|
||||
ip->md5digest = strdup(val);
|
||||
if(!ip->md5digest) {
|
||||
err("%s", strerror(errno));
|
||||
errx(1, "strdup");
|
||||
}
|
||||
break;
|
||||
case F_GID:
|
||||
ip->st_gid = strtoul(val, &ep, 10);
|
||||
if (*ep)
|
||||
err("invalid gid %s", val);
|
||||
errx(1, "line %d: invalid gid %s", lineno, val);
|
||||
break;
|
||||
case F_GNAME:
|
||||
if ((gr = getgrnam(val)) == NULL)
|
||||
err("unknown group %s", val);
|
||||
errx(1, "line %d: unknown group %s", lineno, val);
|
||||
ip->st_gid = gr->gr_gid;
|
||||
break;
|
||||
case F_IGN:
|
||||
@ -202,31 +209,36 @@ set(t, ip)
|
||||
break;
|
||||
case F_MODE:
|
||||
if ((m = setmode(val)) == NULL)
|
||||
err("invalid file mode %s", val);
|
||||
errx(1, "line %d: invalid file mode %s",
|
||||
lineno, val);
|
||||
ip->st_mode = getmode(m, 0);
|
||||
break;
|
||||
case F_NLINK:
|
||||
ip->st_nlink = strtoul(val, &ep, 10);
|
||||
if (*ep)
|
||||
err("invalid link count %s", val);
|
||||
errx(1, "line %d: invalid link count %s",
|
||||
lineno, val);
|
||||
break;
|
||||
case F_SIZE:
|
||||
ip->st_size = strtoq(val, &ep, 10);
|
||||
if (*ep)
|
||||
err("invalid size %s", val);
|
||||
errx(1, "line %d: invalid size %s",
|
||||
lineno, val);
|
||||
break;
|
||||
case F_SLINK:
|
||||
if ((ip->slink = strdup(val)) == NULL)
|
||||
err("%s", strerror(errno));
|
||||
errx(1, "strdup");
|
||||
break;
|
||||
case F_TIME:
|
||||
ip->st_mtimespec.tv_sec = strtoul(val, &ep, 10);
|
||||
if (*ep != '.')
|
||||
err("invalid time %s", val);
|
||||
errx(1, "line %d: invalid time %s",
|
||||
lineno, val);
|
||||
val = ep + 1;
|
||||
ip->st_mtimespec.tv_nsec = strtoul(val, &ep, 10);
|
||||
if (*ep)
|
||||
err("invalid time %s", val);
|
||||
errx(1, "line %d: invalid time %s",
|
||||
lineno, val);
|
||||
break;
|
||||
case F_TYPE:
|
||||
switch(*val) {
|
||||
@ -257,17 +269,18 @@ set(t, ip)
|
||||
ip->type = F_SOCK;
|
||||
break;
|
||||
default:
|
||||
err("unknown file type %s", val);
|
||||
errx(1, "line %d: unknown file type %s",
|
||||
lineno, val);
|
||||
}
|
||||
break;
|
||||
case F_UID:
|
||||
ip->st_uid = strtoul(val, &ep, 10);
|
||||
if (*ep)
|
||||
err("invalid uid %s", val);
|
||||
errx(1, "line %d: invalid uid %s", lineno, val);
|
||||
break;
|
||||
case F_UNAME:
|
||||
if ((pw = getpwnam(val)) == NULL)
|
||||
err("unknown user %s", val);
|
||||
errx(1, "line %d: unknown user %s", lineno, val);
|
||||
ip->st_uid = pw->pw_uid;
|
||||
break;
|
||||
}
|
||||
|
@ -32,17 +32,22 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)verify.c 8.1 (Berkeley) 6/6/93";
|
||||
#endif
|
||||
static const char rcsid[] =
|
||||
"$Id$";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/stat.h>
|
||||
#include <dirent.h>
|
||||
#include <err.h>
|
||||
#include <errno.h>
|
||||
#include <fts.h>
|
||||
#include <fnmatch.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include "mtree.h"
|
||||
#include "extern.h"
|
||||
|
||||
@ -50,6 +55,7 @@ extern long int crc_total;
|
||||
extern int ftsoptions;
|
||||
extern int dflag, eflag, rflag, sflag, uflag;
|
||||
extern char fullpath[MAXPATHLEN];
|
||||
extern int lineno;
|
||||
|
||||
static NODE *root;
|
||||
static char path[MAXPATHLEN];
|
||||
@ -80,7 +86,7 @@ vwalk()
|
||||
argv[0] = ".";
|
||||
argv[1] = NULL;
|
||||
if ((t = fts_open(argv, ftsoptions, NULL)) == NULL)
|
||||
err("fts_open: %s", strerror(errno));
|
||||
err(1, "line %d: fts_open", lineno);
|
||||
level = root;
|
||||
specdepth = rval = 0;
|
||||
while ((p = fts_read(t))) {
|
||||
@ -97,8 +103,7 @@ vwalk()
|
||||
case FTS_DNR:
|
||||
case FTS_ERR:
|
||||
case FTS_NS:
|
||||
(void)fprintf(stderr, "mtree: %s: %s\n",
|
||||
RP(p), strerror(p->fts_errno));
|
||||
warnx("%s: %s", RP(p), strerror(p->fts_errno));
|
||||
continue;
|
||||
default:
|
||||
if (dflag)
|
||||
@ -143,8 +148,7 @@ extra:
|
||||
}
|
||||
(void)fts_close(t);
|
||||
if (sflag)
|
||||
(void)fprintf(stderr,
|
||||
"mtree: %s checksum: %lu\n", fullpath, crc_total);
|
||||
warnx("%s checksum: %lu", fullpath, crc_total);
|
||||
return (rval);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user