Module Name:    src
Committed By:   christos
Date:           Mon Jul 18 21:46:16 UTC 2011

Modified Files:
        src/usr.bin/error: input.c

Log Message:
gcc 4.5 error support ("file:line:col: error" instead of "file:line: error")


To generate a diff of this commit:
cvs rdiff -u -r1.16 -r1.17 src/usr.bin/error/input.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/error/input.c
diff -u src/usr.bin/error/input.c:1.16 src/usr.bin/error/input.c:1.17
--- src/usr.bin/error/input.c:1.16	Thu Aug 13 02:59:37 2009
+++ src/usr.bin/error/input.c	Mon Jul 18 17:46:15 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: input.c,v 1.16 2009/08/13 06:59:37 dholland Exp $	*/
+/*	$NetBSD: input.c,v 1.17 2011/07/18 21:46:15 christos Exp $	*/
 
 /*
  * Copyright (c) 1980, 1993
@@ -34,7 +34,7 @@
 #if 0
 static char sccsid[] = "@(#)input.c	8.1 (Berkeley) 6/6/93";
 #endif
-__RCSID("$NetBSD: input.c,v 1.16 2009/08/13 06:59:37 dholland Exp $");
+__RCSID("$NetBSD: input.c,v 1.17 2011/07/18 21:46:15 christos Exp $");
 #endif /* not lint */
 
 #include <stdio.h>
@@ -59,6 +59,7 @@
 static Errorclass pccccom(void);	/* Portable C Compiler C Compiler */
 static Errorclass ri(void);
 static Errorclass richieccom(void);	/* Richie Compiler for 11 */
+static Errorclass gcc45ccom(void);	/* gcc45+ */
 static Errorclass troff(void);
 
 /*
@@ -89,6 +90,7 @@
 	if (cur_wordc > 0 &&
 	   ((( errorclass = onelong() ) != C_UNKNOWN)
 	   || (( errorclass = cpp() ) != C_UNKNOWN)
+	   || (( errorclass = gcc45ccom() ) != C_UNKNOWN)
 	   || (( errorclass = pccccom() ) != C_UNKNOWN)
 	   || (( errorclass = richieccom() ) != C_UNKNOWN)
 	   || (( errorclass = lint0() ) != C_UNKNOWN)
@@ -269,6 +271,59 @@
 }	/* end of ccom */
 
 /*
+ * Do the error message from gcc 4.5+ which prints:
+ *
+ *	fprintf(stderr, "%s:%d:%d: ", filename, line, column);
+ */
+
+static Errorclass
+gcc45ccom(void)
+{
+	char *cp, *ccp;
+	char **nwordv;
+	char *file;
+
+	if (cur_wordc < 2)
+		return C_UNKNOWN;
+
+	if (lastchar(cur_wordv[1]) != ':')
+		return C_UNKNOWN;
+
+	cp = cur_wordv[1] + strlen(cur_wordv[1]) - 1;
+	while (isdigit((unsigned char)*--cp))
+		continue;
+	if (*cp != ':')
+		return C_UNKNOWN;
+
+	ccp = cp;
+	while (isdigit((unsigned char)*--cp))
+		continue;
+	if (*cp != ':')
+		return C_UNKNOWN;
+
+	clob_last(cur_wordv[1], '\0');	/* last : */
+	*ccp = '\0';			/* middle : */
+	*cp = '\0';			/* first : */
+	file = cur_wordv[1];
+#ifdef notyet
+#define EHEAD 2
+#else
+#define EHEAD 1	/* Nothing to do with column info yet */
+#endif
+	nwordv = wordvsplice(EHEAD, cur_wordc, cur_wordv + 1);
+	nwordv[0] = file;
+	nwordv[1] = cp + 1;
+#ifdef notyet
+	nwordv[2] = ccp + 1;
+#endif
+	cur_wordc += 1;
+	cur_wordv = nwordv - 1;
+	language = INCC;
+	currentfilename = cur_wordv[1];
+	return C_TRUE;
+}
+
+/*
  * Do the error message from the Richie C Compiler for the PDP11,
  * which has this source:
  *

Reply via email to