Module Name:    src
Committed By:   christos
Date:           Sat Dec 24 17:43:45 UTC 2016

Modified Files:
        src/usr.bin/xlint/lint1: externs1.h main1.c mem1.c scan.l
        src/usr.bin/xlint/xlint: lint.1 xlint.c

Log Message:
Add -R (source filename remapping) for MKREPRO


To generate a diff of this commit:
cvs rdiff -u -r1.32 -r1.33 src/usr.bin/xlint/lint1/externs1.h
cvs rdiff -u -r1.25 -r1.26 src/usr.bin/xlint/lint1/main1.c
cvs rdiff -u -r1.17 -r1.18 src/usr.bin/xlint/lint1/mem1.c
cvs rdiff -u -r1.67 -r1.68 src/usr.bin/xlint/lint1/scan.l
cvs rdiff -u -r1.37 -r1.38 src/usr.bin/xlint/xlint/lint.1
cvs rdiff -u -r1.45 -r1.46 src/usr.bin/xlint/xlint/xlint.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.bin/xlint/lint1/externs1.h
diff -u src/usr.bin/xlint/lint1/externs1.h:1.32 src/usr.bin/xlint/lint1/externs1.h:1.33
--- src/usr.bin/xlint/lint1/externs1.h:1.32	Thu Apr 17 20:23:46 2014
+++ src/usr.bin/xlint/lint1/externs1.h	Sat Dec 24 12:43:45 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: externs1.h,v 1.32 2014/04/18 00:23:46 christos Exp $	*/
+/*	$NetBSD: externs1.h,v 1.33 2016/12/24 17:43:45 christos Exp $	*/
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -96,6 +96,8 @@ extern	int	yylex(void);
 extern	const	char *fnalloc(const char *);
 extern	const	char *fnnalloc(const char *, size_t);
 extern	int	getfnid(const char *);
+extern	void	fnaddreplsrcdir(char *);
+extern	const char *fnxform(const char *, size_t);
 
 extern	void	initmem(void);
 

Index: src/usr.bin/xlint/lint1/main1.c
diff -u src/usr.bin/xlint/lint1/main1.c:1.25 src/usr.bin/xlint/lint1/main1.c:1.26
--- src/usr.bin/xlint/lint1/main1.c:1.25	Fri Apr 18 17:53:44 2014
+++ src/usr.bin/xlint/lint1/main1.c	Sat Dec 24 12:43:45 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: main1.c,v 1.25 2014/04/18 21:53:44 christos Exp $	*/
+/*	$NetBSD: main1.c,v 1.26 2016/12/24 17:43:45 christos Exp $	*/
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: main1.c,v 1.25 2014/04/18 21:53:44 christos Exp $");
+__RCSID("$NetBSD: main1.c,v 1.26 2016/12/24 17:43:45 christos Exp $");
 #endif
 
 #include <sys/types.h>
@@ -176,7 +176,7 @@ main(int argc, char *argv[])
 	setprogname(argv[0]);
 
 	ERR_ZERO(&msgset);
-	while ((c = getopt(argc, argv, "abcdeghmprstuvwyzFPSX:")) != -1) {
+	while ((c = getopt(argc, argv, "abcdeghmprstuvwyzFPR:SX:")) != -1) {
 		switch (c) {
 		case 'a':	aflag++;	break;
 		case 'b':	bflag = 1;	break;
@@ -202,6 +202,10 @@ main(int argc, char *argv[])
 			msglist();
 			return(0);
 
+		case 'R':	
+			fnaddreplsrcdir(optarg);
+			break;
+
 		case 'X':
 			for (ptr = strtok(optarg, ","); ptr;
 			    ptr = strtok(NULL, ",")) {

Index: src/usr.bin/xlint/lint1/mem1.c
diff -u src/usr.bin/xlint/lint1/mem1.c:1.17 src/usr.bin/xlint/lint1/mem1.c:1.18
--- src/usr.bin/xlint/lint1/mem1.c:1.17	Thu Apr 17 20:21:14 2014
+++ src/usr.bin/xlint/lint1/mem1.c	Sat Dec 24 12:43:45 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: mem1.c,v 1.17 2014/04/18 00:21:14 christos Exp $	*/
+/*	$NetBSD: mem1.c,v 1.18 2016/12/24 17:43:45 christos Exp $	*/
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: mem1.c,v 1.17 2014/04/18 00:21:14 christos Exp $");
+__RCSID("$NetBSD: mem1.c,v 1.18 2016/12/24 17:43:45 christos Exp $");
 #endif
 
 #include <sys/types.h>
@@ -87,6 +87,47 @@ fnalloc(const char *s)
 	return (s != NULL ? fnnalloc(s, strlen(s)) : NULL);
 }
 
+struct repl {
+	char *orig;
+	char *repl;
+	size_t len;
+	struct repl *next;
+};
+
+struct repl *replist;
+
+void
+fnaddreplsrcdir(char *arg)
+{
+	struct repl *r = xmalloc(sizeof(*r));
+	
+	r->orig = arg;
+	if ((r->repl = strchr(arg, '=')) == NULL) 
+		err(1, "Bad replacement directory spec `%s'", arg);
+	r->len = r->repl - r->orig;
+	*(r->repl)++ = '\0';
+	if (replist == NULL) {
+		r->next = NULL;
+	} else
+		r->next = replist;
+	replist = r;
+}
+
+const char *
+fnxform(const char *name, size_t len)
+{
+	static char buf[MAXPATHLEN];
+	struct repl *r;
+
+	for (r = replist; r; r = r->next)
+		if (r->len < len && memcmp(name, r->orig, r->len) == 0)
+			break;
+	if (r == NULL)
+		return name;
+	snprintf(buf, sizeof(buf), "%s%s", r->repl, name + r->len);
+	return buf;
+}
+
 const char *
 fnnalloc(const char *s, size_t len)
 {
@@ -111,7 +152,7 @@ fnnalloc(const char *s, size_t len)
 		outclr();
 		outint(fn->fn_id);
 		outchar('s');
-		outstrg(fn->fn_name);
+		outstrg(fnxform(fn->fn_name, fn->fn_len));
 	}
 	return (fn->fn_name);
 }

Index: src/usr.bin/xlint/lint1/scan.l
diff -u src/usr.bin/xlint/lint1/scan.l:1.67 src/usr.bin/xlint/lint1/scan.l:1.68
--- src/usr.bin/xlint/lint1/scan.l:1.67	Fri Nov  4 21:09:30 2016
+++ src/usr.bin/xlint/lint1/scan.l	Sat Dec 24 12:43:45 2016
@@ -1,5 +1,5 @@
 %{
-/* $NetBSD: scan.l,v 1.67 2016/11/05 01:09:30 christos Exp $ */
+/* $NetBSD: scan.l,v 1.68 2016/12/24 17:43:45 christos Exp $ */
 
 /*
  * Copyright (c) 1996 Christopher G. Demetriou.  All Rights Reserved.
@@ -35,7 +35,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: scan.l,v 1.67 2016/11/05 01:09:30 christos Exp $");
+__RCSID("$NetBSD: scan.l,v 1.68 2016/12/24 17:43:45 christos Exp $");
 #endif
 
 #include <stdlib.h>
@@ -1117,7 +1117,8 @@ directive(void)
 		 */
 		if (first) {
 			csrc_pos.p_file = curr_pos.p_file;
-			outsrc(curr_pos.p_file);
+			outsrc(fnxform(curr_pos.p_file,
+			    strlen(curr_pos.p_file)));
 			first = 0;
 		}
 	}

Index: src/usr.bin/xlint/xlint/lint.1
diff -u src/usr.bin/xlint/xlint/lint.1:1.37 src/usr.bin/xlint/xlint/lint.1:1.38
--- src/usr.bin/xlint/xlint/lint.1:1.37	Fri Apr 19 14:51:14 2013
+++ src/usr.bin/xlint/xlint/lint.1	Sat Dec 24 12:43:45 2016
@@ -1,4 +1,4 @@
-.\" $NetBSD: lint.1,v 1.37 2013/04/19 18:51:14 christos Exp $
+.\" $NetBSD: lint.1,v 1.38 2016/12/24 17:43:45 christos Exp $
 .\"
 .\" Copyright (c) 1996 Christopher G. Demetriou.  All Rights Reserved.
 .\" Copyright (c) 1994, 1995 Jochen Pohl
@@ -30,7 +30,7 @@
 .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 .\"
-.Dd April 19, 2013
+.Dd December 24, 2016
 .Dt LINT 1
 .Os
 .Sh NAME
@@ -60,6 +60,7 @@
 .Op Fl D Ar name Ns Op =def
 .Op Fl d Ar directory
 .Op Fl I Ar directory
+.Op Fl R Ar old=new
 .Op Fl MD
 .Op Fl U Ar name
 .Op Fl X Ar id Ns Op ,id ...
@@ -347,6 +348,12 @@ Attempt to check portability of code to 
 .It Fl r
 In case of redeclarations report the position of the
 previous declaration.
+.It Fl R Ar old=new
+Remap 
+.Ar old
+directory prefixes to
+.Ar new
+for reproducible builds.
 .It Fl S
 C9X mode.
 Currently not fully implemented.

Index: src/usr.bin/xlint/xlint/xlint.c
diff -u src/usr.bin/xlint/xlint/xlint.c:1.45 src/usr.bin/xlint/xlint/xlint.c:1.46
--- src/usr.bin/xlint/xlint/xlint.c:1.45	Sun Sep  4 20:40:30 2016
+++ src/usr.bin/xlint/xlint/xlint.c	Sat Dec 24 12:43:45 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: xlint.c,v 1.45 2016/09/05 00:40:30 sevan Exp $ */
+/* $NetBSD: xlint.c,v 1.46 2016/12/24 17:43:45 christos Exp $ */
 
 /*
  * Copyright (c) 1996 Christopher G. Demetriou.  All Rights Reserved.
@@ -38,7 +38,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: xlint.c,v 1.45 2016/09/05 00:40:30 sevan Exp $");
+__RCSID("$NetBSD: xlint.c,v 1.46 2016/12/24 17:43:45 christos Exp $");
 #endif
 
 #include <sys/param.h>
@@ -298,8 +298,8 @@ usage(void)
 	(void)fprintf(stderr,
 	    "       %s [-abceghprvwzHFS] [|-s|-t] -Clibrary [-Dname[=def]]\n"
 	    " [-X <id>[,<id>]...\n", getprogname());
-	(void)fprintf(stderr, "\t[-Idirectory] [-Uname] [-Bpath] file"
-	    " ...\n");
+	(void)fprintf(stderr, "\t[-Idirectory] [-Uname] [-Bpath] [-R old=new]"
+	    " file ...\n");
 	terminate(-1);
 }
 
@@ -368,7 +368,7 @@ main(int argc, char *argv[])
 	(void)signal(SIGINT, terminate);
 	(void)signal(SIGQUIT, terminate);
 	(void)signal(SIGTERM, terminate);
-	while ((c = getopt(argc, argv, "abcd:eghil:no:prstuvwxzB:C:D:FHI:L:M:PSU:VX:")) != -1) {
+	while ((c = getopt(argc, argv, "abcd:eghil:no:prstuvwxzB:C:D:FHI:L:M:PR:SU:VX:")) != -1) {
 		switch (c) {
 
 		case 'a':
@@ -423,6 +423,10 @@ main(int argc, char *argv[])
 			appcstrg(&l1flags, "-P");
 			break;
 
+		case 'R':
+			appcstrg(&l1flags, concat2("-R", optarg));
+			break;
+
 		case 's':
 			if (tflag)
 				usage();

Reply via email to