Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 21 Sep 2012 19:26:22 +0000 (UTC)
From:      Brooks Davis <brooks@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r240786 - projects/mtree/contrib/mtree
Message-ID:  <201209211926.q8LJQMBG091688@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: brooks
Date: Fri Sep 21 19:26:21 2012
New Revision: 240786
URL: http://svn.freebsd.org/changeset/base/240786

Log:
  Implement the ability to compare two spec files with -f spec1 -f spec2.
  
  Obtained from:	FreeBSD (phk)

Added:
  projects/mtree/contrib/mtree/specspec.c   (contents, props changed)
     - copied, changed from r240785, projects/mtree/usr.sbin/mtree/specspec.c
Modified:
  projects/mtree/contrib/mtree/Makefile
  projects/mtree/contrib/mtree/extern.h
  projects/mtree/contrib/mtree/mtree.c
  projects/mtree/contrib/mtree/mtree.h
  projects/mtree/contrib/mtree/verify.c

Modified: projects/mtree/contrib/mtree/Makefile
==============================================================================
--- projects/mtree/contrib/mtree/Makefile	Fri Sep 21 19:22:43 2012	(r240785)
+++ projects/mtree/contrib/mtree/Makefile	Fri Sep 21 19:26:21 2012	(r240786)
@@ -7,7 +7,8 @@ PROG=	mtree
 #CPPFLAGS+=-DDEBUG
 CPPFLAGS+= -DMTREE
 MAN=	mtree.8
-SRCS=	compare.c crc.c create.c excludes.c misc.c mtree.c spec.c verify.c \
+SRCS=	compare.c crc.c create.c excludes.c misc.c mtree.c spec.c specspec.c \
+	verify.c \
 	getid.c pack_dev.c
 .if (${HOSTPROG:U} == "")
 DPADD+= ${LIBUTIL}

Modified: projects/mtree/contrib/mtree/extern.h
==============================================================================
--- projects/mtree/contrib/mtree/extern.h	Fri Sep 21 19:22:43 2012	(r240785)
+++ projects/mtree/contrib/mtree/extern.h	Fri Sep 21 19:26:21 2012	(r240786)
@@ -67,7 +67,7 @@ void	 parsetags(slist_t *, char *);
 u_int	 parsetype(const char *);
 void	 read_excludes_file(const char *);
 const char *rlink(const char *);
-int	 verify(void);
+int	 verify(FILE *);
 
 extern int	dflag, eflag, iflag, jflag, lflag, mflag,
 		nflag, qflag, rflag, sflag, tflag, uflag;

Modified: projects/mtree/contrib/mtree/mtree.c
==============================================================================
--- projects/mtree/contrib/mtree/mtree.c	Fri Sep 21 19:22:43 2012	(r240785)
+++ projects/mtree/contrib/mtree/mtree.c	Fri Sep 21 19:26:21 2012	(r240786)
@@ -70,11 +70,14 @@ main(int argc, char **argv)
 {
 	int	ch, status;
 	char	*dir, *p;
+	FILE	*spec1, *spec2;
 
 	setprogname(argv[0]);
 
 	dir = NULL;
 	init_excludes();
+	spec1 = stdin;
+	spec2 = NULL;
 
 	while ((ch = getopt(argc, argv,
 	    "cCdDeE:f:I:ijk:K:lLmMnN:p:PqrR:s:StuUwWxX:"))
@@ -99,8 +102,18 @@ main(int argc, char **argv)
 			eflag = 1;
 			break;
 		case 'f':
-			if (!(freopen(optarg, "r", stdin)))
-				mtree_err("%s: %s", optarg, strerror(errno));
+			if (spec1 == stdin) {
+				spec1 = fopen(optarg, "r");
+				if (spec1 == NULL)
+					mtree_err("%s: %s", optarg,
+					    strerror(errno));
+			} else if (spec2 == NULL) {
+				spec2 = fopen(optarg, "r");
+				if (spec2 == NULL)
+					mtree_err("%s: %s", optarg,
+					    strerror(errno));
+			} else
+				usage();
 			break;
 		case 'i':
 			iflag = 1;
@@ -223,10 +236,13 @@ main(int argc, char **argv)
 		exit(0);
 	}
 	if (Cflag || Dflag) {
-		dump_nodes("", spec(stdin), Dflag);
+		dump_nodes("", spec(spec1), Dflag);
 		exit(0);
 	}
-	status = verify();
+	if (spec2 != NULL)
+		status = mtree_specspec(spec1, spec2);
+	else
+		status = verify(spec1);
 	if (Uflag && (status == MISMATCHEXIT))
 		status = 0;
 	exit(status);
@@ -237,7 +253,8 @@ usage(void)
 {
 
 	fprintf(stderr,
-	    "usage: %s [-CcDdeLlMnPrSUuWx] [-i|-m] [-E tags] [-f spec]\n"
+	    "usage: %s [-CcDdeLlMnPrSUuWx] [-i|-m] [-E tags]\n"
+	    "\t\t[-f spec] [-f spec]\n"
 	    "\t\t[-I tags] [-K keywords] [-k keywords] [-N dbdir] [-p path]\n"
 	    "\t\t[-R keywords] [-s seed] [-X exclude-file]\n",
 	    getprogname());

Modified: projects/mtree/contrib/mtree/mtree.h
==============================================================================
--- projects/mtree/contrib/mtree/mtree.h	Fri Sep 21 19:22:43 2012	(r240785)
+++ projects/mtree/contrib/mtree/mtree.h	Fri Sep 21 19:26:21 2012	(r240786)
@@ -120,6 +120,7 @@ const char	*inotype(u_int);
 u_int		 nodetoino(u_int);
 int		 setup_getid(const char *);
 NODE		*spec(FILE *);
+int		 mtree_specspec(FILE *, FILE *);
 void		 free_nodes(NODE *);
 char		*vispath(const char *);
 

Copied and modified: projects/mtree/contrib/mtree/specspec.c (from r240785, projects/mtree/usr.sbin/mtree/specspec.c)
==============================================================================
--- projects/mtree/usr.sbin/mtree/specspec.c	Fri Sep 21 19:22:43 2012	(r240785, copy source)
+++ projects/mtree/contrib/mtree/specspec.c	Fri Sep 21 19:26:21 2012	(r240786)
@@ -32,6 +32,8 @@ __FBSDID("$FreeBSD$");
 #include <pwd.h>
 #include <stdio.h>
 #include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
 #include <unistd.h>
 #include "mtree.h"
 #include "extern.h"
@@ -49,7 +51,7 @@ shownode(NODE *n, int f, char const *pat
 	struct group *gr;
 	struct passwd *pw;
 
-	printf("%s%s %s", path, n->name, ftype(n->type));
+	printf("%s%s %s", path, n->name, inotype(nodetoino(n->type)));
 	if (f & F_CKSUM)
 		printf(" cksum=%lu", n->cksum);
 	if (f & F_GID)
@@ -85,7 +87,7 @@ shownode(NODE *n, int f, char const *pat
 	if (f & F_SHA256)
 		printf(" sha256digest=%s", n->sha256digest);
 	if (f & F_FLAGS)
-		printf(" flags=%s", flags_to_string(n->st_flags));
+		printf(" flags=%s", flags_to_string(n->st_flags, "none"));
 	printf("\n");
 }
 
@@ -246,8 +248,8 @@ mtree_specspec(FILE *fi, FILE *fj)
 	int rval;
 	NODE *root1, *root2;
 
-	root1 = mtree_readspec(fi);
-	root2 = mtree_readspec(fj);
+	root1 = spec(fi);
+	root2 = spec(fj);
 	rval = walk_in_the_forest(root1, root2, "");
 	rval += compare_nodes(root1, root2, "");
 	if (rval > 0)

Modified: projects/mtree/contrib/mtree/verify.c
==============================================================================
--- projects/mtree/contrib/mtree/verify.c	Fri Sep 21 19:22:43 2012	(r240785)
+++ projects/mtree/contrib/mtree/verify.c	Fri Sep 21 19:26:21 2012	(r240786)
@@ -64,11 +64,11 @@ static void	miss(NODE *, char *);
 static int	vwalk(void);
 
 int
-verify(void)
+verify(FILE *fi)
 {
 	int rval;
 
-	root = spec(stdin);
+	root = spec(fi);
 	rval = vwalk();
 	miss(root, path);
 	return (rval);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201209211926.q8LJQMBG091688>