From: | Peter Avalos <pavalos@xxxxxxxxxxxx> |
Date: | Sun, 31 Dec 2006 17:47:44 -0500 |
Here's a patch that makes the newer version of flex play nice with amd. These changes were taken from the latest sources of am-utils. I figured it'd be easy to just patch our current amd sources rather than work on a complete upgrade of am-utils. Thanks, Peter http://www.theshell.com/~pavalos/wip/amd.patch
Index: usr.sbin/amd/amd/Makefile =================================================================== RCS file: /home/dcvs/src/usr.sbin/amd/amd/Makefile,v retrieving revision 1.4 diff -u -r1.4 Makefile --- usr.sbin/amd/amd/Makefile 14 May 2006 18:07:29 -0000 1.4 +++ usr.sbin/amd/amd/Makefile 31 Dec 2006 22:05:37 -0000 @@ -7,12 +7,13 @@ # $DragonFly: src/usr.sbin/amd/amd/Makefile,v 1.4 2006/05/14 18:07:29 swildner Exp $ # -.PATH: ${.CURDIR}/../../../contrib/amd/amd +CONTRIBDIR= ${.CURDIR}/../../../contrib/amd/amd +.PATH: ${CONTRIBDIR} PROG= amd MAN= amd.8 -SRCS= conf_parse.y conf_tok.l +SRCS= conf_parse.y.patch conf_tok.l.patch SRCS+= am_ops.c amd.c amfs_auto.c amfs_direct.c amfs_error.c SRCS+= amfs_host.c amfs_inherit.c amfs_link.c amfs_linkx.c amfs_nfsl.c SRCS+= amfs_nfsx.c amfs_program.c amfs_root.c amfs_toplvl.c Index: usr.sbin/amd/amd/conf_parse.y.patch =================================================================== RCS file: usr.sbin/amd/amd/conf_parse.y.patch diff -N usr.sbin/amd/amd/conf_parse.y.patch --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ usr.sbin/amd/amd/conf_parse.y.patch 31 Dec 2006 22:32:28 -0000 @@ -0,0 +1,30 @@ +$DragonFly$ +--- conf_parse.y.orig 2006-12-31 17:02:18.000000000 -0500 ++++ conf_parse.y 2006-12-31 17:04:00.000000000 -0500 +@@ -66,7 +66,7 @@ + #endif /* not __GNUC__ */ + + extern char *yytext; +-extern int yylineno; ++extern int ayylineno; + extern int yylex(void); + + static int yyerror(const char *s); +@@ -78,7 +78,7 @@ + #define PARSE_DEBUG 0 + + #if PARSE_DEBUG +-# define dprintf(f,s) fprintf(stderr, (f), yylineno, (s)) ++# define dprintf(f,s) fprintf(stderr, (f), ayylineno, (s)) + # define amu_return(v) + #else + # define dprintf(f,s) +@@ -168,7 +168,7 @@ + yyerror(const char *s) + { + fprintf(stderr, "AMDCONF: %s on line %d (section %s)\n", +- s, yylineno, ++ s, ayylineno, + (header_section ? header_section : "null")); + exit(1); + return 1; /* to full compilers that insist on a return statement */ Index: usr.sbin/amd/amd/conf_tok.l.patch =================================================================== RCS file: usr.sbin/amd/amd/conf_tok.l.patch diff -N usr.sbin/amd/amd/conf_tok.l.patch --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ usr.sbin/amd/amd/conf_tok.l.patch 31 Dec 2006 22:32:37 -0000 @@ -0,0 +1,62 @@ +$DragonFly$ +--- conf_tok.l.orig 2003-06-16 22:42:47.000000000 -0400 ++++ conf_tok.l 2006-12-31 16:52:52.000000000 -0500 +@@ -77,9 +77,10 @@ + # ifndef ECHO + # define ECHO (void) fwrite( yytext, yyleng, 1, yyout ) + # endif /* not ECHO */ +-int yylineno = 0; + #endif /* FLEX_SCANNER */ + ++int ayylineno = 0; ++ + int yylex(void); + /* + * some systems such as DU-4.x have a different GNU flex in /usr/bin +@@ -93,19 +94,25 @@ + #define TOK_DEBUG 0 + + #if TOK_DEBUG +-# define dprintf(f,s) fprintf(stderr, (f), yylineno, (s)) ++# define dprintf(f,s) fprintf(stderr, (f), ayylineno, (s)) + # define amu_return(v) + #else + # define dprintf(f,s) + # define amu_return(v) return((v)) + #endif /* TOK_DEBUG */ + +-/* no need to use yyunput() or yywrap() */ +-#define YY_NO_UNPUT ++/* no need to use yywrap() */ + #define YY_SKIP_YYWRAP + + %} + ++/* This option causes Solaris lex to fail. Use flex. See BUGS file */ ++/* no need to use yyunput() */ ++%option nounput ++ ++/* allocate more output slots so lex scanners don't run out of mem */ ++%o 1024 ++ + DIGIT [0-9] + ALPHA [A-Za-z] + ALPHANUM [A-Za-z0-9] +@@ -119,7 +126,7 @@ + %% + + \n { +- yylineno++; ++ ayylineno++; + amu_return(NEWLINE); + } + +@@ -146,7 +153,7 @@ + } + "#"[^\n]*\n { + /* a comment line includes the terminating \n */ +- yylineno++; ++ ayylineno++; + yytext[strlen((char *)yytext)-1] = '\0'; + dprintf("%8d: Comment \"%s\"\n", yytext); + } Index: usr.sbin/amd/fsinfo/Makefile =================================================================== RCS file: /home/dcvs/src/usr.sbin/amd/fsinfo/Makefile,v retrieving revision 1.2 diff -u -r1.2 Makefile --- usr.sbin/amd/fsinfo/Makefile 17 Jun 2003 04:29:52 -0000 1.2 +++ usr.sbin/amd/fsinfo/Makefile 31 Dec 2006 22:28:31 -0000 @@ -7,18 +7,19 @@ # $DragonFly: src/usr.sbin/amd/fsinfo/Makefile,v 1.2 2003/06/17 04:29:52 dillon Exp $ # -.PATH: ${.CURDIR}/../../../contrib/amd/fsinfo +CONTRIBDIR= ${.CURDIR}/../../../contrib/amd/fsinfo +.PATH: ${CONTRIBDIR} PROG= fsinfo MAN= fsinfo.8 -SRCS= fsi_gram.y fsi_lex.l +SRCS= fsinfo.h.patch fsi_gram.y fsi_lex.l.patch SRCS+= fsi_analyze.c fsi_dict.c fsi_util.c fsinfo.c wr_atab.c SRCS+= wr_bparam.c wr_dumpset.c wr_exportfs.c wr_fstab.c -CFLAGS+= -I${.CURDIR}/../../../contrib/amd/fsinfo +CFLAGS+= -I${.OBJDIR} -I${CONTRIBDIR} -CLEANFILES+= fsi_gram.c fsi_gram.h fsi_lex.c +CLEANFILES+= fsi_gram.c fsi_gram.h fsi_lex.c fsinfo.h fsi_lex.o: fsi_gram.h Index: usr.sbin/amd/fsinfo/fsi_lex.l.patch =================================================================== RCS file: usr.sbin/amd/fsinfo/fsi_lex.l.patch diff -N usr.sbin/amd/fsinfo/fsi_lex.l.patch --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ usr.sbin/amd/fsinfo/fsi_lex.l.patch 31 Dec 2006 22:32:47 -0000 @@ -0,0 +1,79 @@ +$DragonFly$ +--- fsi_lex.l.orig 2006-12-31 17:08:23.000000000 -0500 ++++ fsi_lex.l 2006-12-31 17:12:03.000000000 -0500 +@@ -48,8 +48,9 @@ + * TODO: Needs rewriting. + */ + ++static int ayylineno; ++ + #ifdef FLEX_SCANNER +-static int yylineno; + # define INIT_STATE { \ + switch ((yy_start - 1) / 2) { \ + case 0: \ +@@ -159,6 +160,13 @@ + + %} + ++/* This option causes Solaris lex to fail. Use flex. See BUGS file */ ++/* no need to use yyunput() */ ++%option nounput ++ ++/* allocate more output slots so lex scanners don't run out of mem */ ++%o 1024 ++ + %start F Q + + %% +@@ -166,22 +174,22 @@ + + <F>[^ \t\n"={}]+ { return find_resword(yytext); } /* dummy " */ + <F>[ \t] ; +-<F>"\n" { yylineno++; } ++<F>"\n" { ayylineno++; } + <F>[={}] { return *yytext; } + + <F>\" { BEGIN Q; optr = ostr; quoted = 1; } +-<Q>\n { yylineno++; yyerror("\" expected"); BEGIN F; } ++<Q>\n { ayylineno++; yyerror("\" expected"); BEGIN F; } + <Q>\\b { *optr++ = '\b'; /* escape */ } + <Q>\\t { *optr++ = '\t'; /* escape */ } + <Q>\\\" { *optr++ = '\"'; /* escape */ } + <Q>\\\\ { *optr++ = '\\'; /* escape */ } +-<Q>\\\n { yylineno++; /* continue */ } ++<Q>\\\n { ayylineno++; /* continue */ } + <Q>\\r { *optr++ = '\r'; /* escape */ } + <Q>\\n { *optr++ = '\n'; /* escape */ } + <Q>\\f { *optr++ = '\f'; /* escape */ } + <Q>"\\ " { *optr++ = ' '; /* force space */ } + <Q>\\. { yyerror("Unknown \\ sequence"); } +-<Q>([ \t]|"\\\n"){2,} { char *p = (char *) yytext-1; while ((p = strchr(p+1, '\n'))) yylineno++; } ++<Q>([ \t]|"\\\n"){2,} { char *p = (char *) yytext-1; while ((p = strchr(p+1, '\n'))) ayylineno++; } + <Q>\" { BEGIN F; quoted = 0; + *optr = '\0'; + yylval.s = strdup(ostr); +@@ -235,12 +243,11 @@ + + va_start(ap, fmt); + col_cleanup(0); +- fprintf(stderr, "%s:%d: ", fsi_filename ? fsi_filename : "/dev/stdin", yylineno); +- fprintf(stderr, fmt, ap); ++ fprintf(stderr, "%s:%d: ", fsi_filename ? fsi_filename : "/dev/stdin", ayylineno); ++ vfprintf(stderr, fmt, ap); + fputc('\n', stderr); + parse_errors++; + va_end(ap); +- if (0) unput(0);/* dummy to shut gcc up: "unput defined but not used" */ + return 0; + } + +@@ -249,7 +256,7 @@ + current_location(void) + { + ioloc *ip = CALLOC(struct ioloc); +- ip->i_line = yylineno; ++ ip->i_line = ayylineno; + ip->i_file = fsi_filename; + return ip; + } Index: usr.sbin/amd/fsinfo/fsinfo.h.patch =================================================================== RCS file: usr.sbin/amd/fsinfo/fsinfo.h.patch diff -N usr.sbin/amd/fsinfo/fsinfo.h.patch --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ usr.sbin/amd/fsinfo/fsinfo.h.patch 31 Dec 2006 22:32:57 -0000 @@ -0,0 +1,11 @@ +$DragonFly$ +--- fsinfo.h.orig 2006-12-31 17:23:10.000000000 -0500 ++++ fsinfo.h 2006-12-31 17:23:56.000000000 -0500 +@@ -109,7 +109,6 @@ + */ + #ifndef yywrap + extern int yywrap(void); +-# define yywrap() 1 + #endif /* not yywrap */ + extern int yyparse(void); + extern int write_atab(qelem *q);
Attachment:
pgp00012.pgp
Description: PGP signature