From: erg Date: Wed, 30 Jan 2008 21:24:13 +0000 (+0000) Subject: Handle C99/m4 #line directives as well. X-Git-Tag: LAST_LIBGRAPH~32^2~4799 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0acd00f5a202248d0062273c6d4632c56884e47a;p=graphviz Handle C99/m4 #line directives as well. --- diff --git a/lib/agraph/scan.l b/lib/agraph/scan.l index bd462f9fc..e17e49368 100644 --- a/lib/agraph/scan.l +++ b/lib/agraph/scan.l @@ -108,10 +108,12 @@ storeFileName (char* fname, int len) */ static void ppDirective () { - int cnt, lineno; + int r, cnt, lineno; char buf[2]; - int r = sscanf(yytext + 1, "%d %1[\"]%n", &lineno, buf, &cnt); + char* s = yytext + 1; /* skip initial # */ + if (strncmp(s, "line", 4) == 0) s += 4; + r = sscanf(s, "%d %1[\"]%n", &lineno, buf, &cnt); if (r > 0) { /* got line number */ line_num = lineno - 1; if (r > 1) { /* saw quote */ diff --git a/lib/cgraph/scan.l b/lib/cgraph/scan.l index a9cf107e1..895872783 100644 --- a/lib/cgraph/scan.l +++ b/lib/cgraph/scan.l @@ -104,14 +104,16 @@ storeFileName (char* fname, int len) */ static void ppDirective () { - int cnt, lineno; + int r, cnt, lineno; char buf[2]; - int r = sscanf(yytext + 1, "%d %1[\"]%n", &lineno, buf, &cnt); + char* s = yytext + 1; /* skip initial # */ + if (strncmp(s, "line", 4) == 0) s += 4; + r = sscanf(s, "%d %1[\"]%n", &lineno, buf, &cnt); if (r > 0) { /* got line number */ line_num = lineno - 1; if (r > 1) { /* saw quote */ - char* p = yytext + 1 + cnt; + char* p = s + cnt; char* e = p; while (*e && (*e != '"')) e++; if (e != p) { diff --git a/lib/graph/lexer.c b/lib/graph/lexer.c index f1ba84e14..79a49767a 100644 --- a/lib/graph/lexer.c +++ b/lib/graph/lexer.c @@ -262,14 +262,17 @@ static char *lex_gets(void) if (clp[len - 1] == '\n') { /* have physical line */ if ((clp[0] == '#') && (curlen == 0)) { /* comment line or cpp line sync */ - int cnt; + int r, cnt; char buf[2]; - int r = sscanf(clp + 1, "%d %1[\"]%n", &Line_number, buf, &cnt); + char* s = clp + 1; + + if (strncmp(s, "line", 4) == 0) s += 4; + r = sscanf(s, "%d %1[\"]%n", &Line_number, buf, &cnt); if (r <= 0) Line_number++; else { /* got line number */ Line_number--; if (r > 1) { /* saw quote */ - char* p = clp + 1 + cnt; + char* p = s + cnt; char* e = p; while (*e && (*e != '"')) e++; if (e != p) {