From: | Peter Avalos <pavalos@xxxxxxxxxxxx> |
Date: | Sun, 31 Dec 2006 14:14:50 -0500 |
Mail-followup-to: | submit@crater.dragonflybsd.org |
On Sat, Dec 30, 2006 at 07:37:36PM +0100, Joerg Sonnenberger wrote: > On Sat, Dec 30, 2006 at 10:29:41AM -0800, Matthew Dillon wrote: > > :Here's a patch that will add the -P option to our m4. Please let me know > > :what you think. This is needed to bring in the latest flex sources. > > : > > :http://www.theshell.com/~pavalos/wip/m4.patch > > : > > :Thanks, > > :Peter > > > > Hmm. Running the getopt loop twice is kinda a hack. If you absolutely > > have to do it at least put getopt's control string in one place so it > > isn't duplicated. > We need to know if -P is set before we handle the -D and -U options. > ...and use optreset please. > Ok, how's this one look: http://www.theshell.com/~pavalos/wip/m4-2.patch --Peter
Index: usr.bin/m4/m4.1 =================================================================== RCS file: /home/dcvs/src/usr.bin/m4/m4.1,v retrieving revision 1.3 diff -u -r1.3 m4.1 --- usr.bin/m4/m4.1 27 Dec 2006 21:29:02 -0000 1.3 +++ usr.bin/m4/m4.1 28 Dec 2006 00:10:12 -0000 @@ -12,7 +12,7 @@ .Nm .Op Fl d Ar flags .Op Fl t Ar name -.Op Fl gs +.Op Fl Pgs .Op Fl D Ar name Ns Op = Ns Ar value .Op Fl U Ar name .Op Fl I Ar dirname @@ -69,6 +69,19 @@ .It Fl U Ar name Undefine the symbol .Ar name . +.It Fl P +Prefixes all +.Nm +builtin macros with the string +.Li m4_ . +This changes the macro names +.Li dnl +to +.Li m4_dnl , +.Li index +to +.Li m4_index , +and so forth. .It Fl I Ar dirname Add directory .Ar dirname Index: usr.bin/m4/main.c =================================================================== RCS file: /home/dcvs/src/usr.bin/m4/main.c,v retrieving revision 1.3 diff -u -r1.3 main.c --- usr.bin/m4/main.c 27 Dec 2006 21:29:02 -0000 1.3 +++ usr.bin/m4/main.c 31 Dec 2006 07:34:19 -0000 @@ -82,6 +82,7 @@ int oindex = 0; /* diversion index.. */ char null[] = ""; /* as it says.. just a null.. */ const char *m4wraps = ""; /* m4wrap string default.. */ +int m4prefix = 0; /* prefix keywords with m4_ */ char lquote[MAXCCHARS+1] = {LQUOTE}; /* left quote character (`) */ char rquote[MAXCCHARS+1] = {RQUOTE}; /* right quote character (') */ char scommt[MAXCCHARS+1] = {SCOMMT}; /* start character for comment */ @@ -168,6 +169,7 @@ int c; int n; int rval; + const char *optstr = "D:I:PU:gd:o:st:"; char *p; setlocale(LC_ALL, ""); @@ -177,6 +179,14 @@ if (signal(SIGINT, SIG_IGN) != SIG_IGN) signal(SIGINT, onintr); + /* + * We need to know if -P is there before checking -D and -U. + */ + while ((c = getopt(argc, argv, optstr)) != -1) + if (c == 'P') + m4prefix = 1; + optind = optreset = 1; + initkwds(); initspaces(); STACKMAX = INITSTACKMAX; @@ -188,7 +198,7 @@ outfile = NULL; resizedivs(MAXOUT); - while ((c = getopt(argc, argv, "gst:d:D:U:o:I:")) != -1) + while ((c = getopt(argc, argv, optstr)) != -1) switch(c) { case 'D': /* define something..*/ for (p = optarg; *p; p++) @@ -203,6 +213,8 @@ case 'I': addtoincludepath(optarg); break; + case 'P': + break; case 'U': /* undefine... */ remhash(optarg, TOP); break; @@ -563,9 +575,16 @@ size_t i; unsigned int h; ndptr p; + char *k; for (i = 0; i < MAXKEYS; i++) { - h = hash(keywrds[i].knam); + k = (char *)keywrds[i].knam; + if (m4prefix) { + if (asprintf(&k, "m4_%s", k) == -1) + err(1, "asprintf"); + keywrds[i].knam = k; + } + h = hash(k); p = (ndptr) xalloc(sizeof(struct ndblock)); p->nxtptr = hashtab[h % HASHSIZE]; hashtab[h % HASHSIZE] = p;
Attachment:
pgp00011.pgp
Description: PGP signature