From 8008022cdece0d641bd48dfcb8ab4d3f3479ab59 Mon Sep 17 00:00:00 2001 From: espie Date: Sat, 16 Aug 2008 12:23:50 +0000 Subject: [PATCH] not yet, committed too much --- usr.bin/m4/extern.h | 14 +++--- usr.bin/m4/gnum4.c | 102 ++++++++++++----------------------------- usr.bin/m4/misc.c | 18 ++++---- usr.bin/m4/parser.y | 3 +- usr.bin/m4/tokenizer.l | 37 +-------------- 5 files changed, 48 insertions(+), 126 deletions(-) diff --git a/usr.bin/m4/extern.h b/usr.bin/m4/extern.h index 16aaf2bbc8a..fc5050a4514 100644 --- a/usr.bin/m4/extern.h +++ b/usr.bin/m4/extern.h @@ -1,4 +1,4 @@ -/* $OpenBSD: extern.h,v 1.46 2008/08/16 12:21:46 espie Exp $ */ +/* $OpenBSD: extern.h,v 1.47 2008/08/16 12:23:50 espie Exp $ */ /* $NetBSD: extern.h,v 1.3 1996/01/13 23:25:24 pk Exp $ */ /*- @@ -109,7 +109,7 @@ extern void usage(void); extern void resizedivs(int); extern size_t buffer_mark(void); extern void dump_buffer(FILE *, size_t); -extern void __dead m4errx(int, const char *, ...); +extern void m4errx(int, const char *, ...); extern int obtain_char(struct input_file *); extern void set_input(struct input_file *, FILE *, const char *); @@ -133,7 +133,7 @@ extern void release_input(struct input_file *); /* and corresponding exposure for local symbols */ extern void enlarge_bufspace(void); extern void enlarge_strspace(void); -extern unsigned char *endpbb; +extern char *endpbb; extern char *endest; /* trace.c */ @@ -156,10 +156,10 @@ extern int fp; /* m4 call frame pointer */ extern int ilevel; /* input file stack pointer */ extern int oindex; /* diversion index. */ extern int sp; /* current m4 stack pointer */ -extern unsigned char *bp; /* first available character */ -extern unsigned char *buf; /* push-back buffer */ -extern unsigned char *bufbase; /* buffer base for this ilevel */ -extern unsigned char *bbase[]; /* buffer base per ilevel */ +extern char *bp; /* first available character */ +extern char *buf; /* push-back buffer */ +extern char *bufbase; /* buffer base for this ilevel */ +extern char *bbase[]; /* buffer base per ilevel */ extern char ecommt[MAXCCHARS+1];/* end character for comment */ extern char *ep; /* first free char in strspace */ extern char lquote[MAXCCHARS+1];/* left quote character (`) */ diff --git a/usr.bin/m4/gnum4.c b/usr.bin/m4/gnum4.c index f9ee4ed3e94..f96011e3a0f 100644 --- a/usr.bin/m4/gnum4.c +++ b/usr.bin/m4/gnum4.c @@ -1,4 +1,4 @@ -/* $OpenBSD: gnum4.c,v 1.37 2008/08/16 12:21:46 espie Exp $ */ +/* $OpenBSD: gnum4.c,v 1.38 2008/08/16 12:23:50 espie Exp $ */ /* * Copyright (c) 1999 Marc Espie @@ -508,85 +508,43 @@ doformat(const char *argv[], int argc) { const char *format = argv[2]; int pos = 3; - int left_padded; - long width; - size_t l; - const char *thisarg; - char temp[2]; - long extra; while (*format != 0) { if (*format != '%') { addchar(*format++); - continue; - } - - format++; - if (*format == '%') { - addchar(*format++); - continue; - } - if (*format == 0) { - addchar('%'); - break; - } - - if (*format == '*') { - format++; - if (pos >= argc) - m4errx(1, - "Format with too many format specifiers."); - width = strtol(argv[pos++], NULL, 10); - } else { - width = strtol(format, (char **)&format, 10); - } - if (width < 0) { - left_padded = 1; - width = -width; } else { - left_padded = 0; - } - if (*format == '.') { format++; - if (*format == '*') { - format++; - if (pos >= argc) - m4errx(1, - "Format with too many format specifiers."); - extra = strtol(argv[pos++], NULL, 10); + if (*format == '%' || *format == 0) { + addchar('%'); + if (*format == '%') + format++; } else { - extra = strtol(format, (char **)&format, 10); + int left_padded = 0; + unsigned long width; + size_t l; + + if (*format == '-') { + left_padded = 1; + format++; + } + width = strtoul(format, (char **)&format, 10); + if (*format != 's') { + m4errx(1, "Unsupported format specification: %s.", argv[2]); + } + format++; + if (pos >= argc) + m4errx(1, "Format with too many values."); + l = strlen(argv[pos]); + if (!left_padded) { + while (l < width--) + addchar(' '); + } + addchars(argv[pos++], l); + if (left_padded) { + while (l < width--) + addchar(' '); + } } - } else { - extra = LONG_MAX; - } - if (pos >= argc) - m4errx(1, "Format with too many format specifiers."); - switch(*format) { - case 's': - thisarg = argv[pos++]; - break; - case 'c': - temp[0] = strtoul(argv[pos++], NULL, 10); - temp[1] = 0; - thisarg = temp; - break; - default: - m4errx(1, "Unsupported format specification: %s.", - argv[2]); - } - format++; - l = strlen(thisarg); - if (l > extra) - l = extra; - if (!left_padded) { - while (l < width--) - addchar(' '); - } - addchars(thisarg, l); - if (left_padded) { - while (l < width--) - addchar(' '); } } pbstr(getstring()); diff --git a/usr.bin/m4/misc.c b/usr.bin/m4/misc.c index 67dc778865b..2c321882298 100644 --- a/usr.bin/m4/misc.c +++ b/usr.bin/m4/misc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: misc.c,v 1.38 2008/08/16 12:21:46 espie Exp $ */ +/* $OpenBSD: misc.c,v 1.39 2008/08/16 12:23:50 espie Exp $ */ /* $NetBSD: misc.c,v 1.6 1995/09/28 05:37:41 tls Exp $ */ /* @@ -54,11 +54,11 @@ char *endest; /* end of string space */ static size_t strsize = STRSPMAX; static size_t bufsize = BUFSIZE; -unsigned char *buf; /* push-back buffer */ -unsigned char *bufbase; /* the base for current ilevel */ -unsigned char *bbase[MAXINP]; /* the base for each ilevel */ -unsigned char *bp; /* first available character */ -unsigned char *endpbb; /* end of push-back buffer */ +char *buf; /* push-back buffer */ +char *bufbase; /* the base for current ilevel */ +char *bbase[MAXINP]; /* the base for each ilevel */ +char *bp; /* first available character */ +char *endpbb; /* end of push-back buffer */ /* @@ -163,7 +163,7 @@ initspaces() strspace = xalloc(strsize+1, NULL); ep = strspace; endest = strspace+strsize; - buf = (unsigned char *)xalloc(bufsize, NULL); + buf = (char *)xalloc(bufsize, NULL); bufbase = buf; bp = buf; endpbb = buf + bufsize; @@ -195,7 +195,7 @@ enlarge_strspace() void enlarge_bufspace() { - unsigned char *newbuf; + char *newbuf; int i; bufsize += bufsize/2; @@ -418,7 +418,7 @@ buffer_mark() void dump_buffer(FILE *f, size_t m) { - unsigned char *s; + char *s; for (s = bp; s-buf > m;) fputc(*--s, f); diff --git a/usr.bin/m4/parser.y b/usr.bin/m4/parser.y index a67af9548ea..6276f8fe672 100644 --- a/usr.bin/m4/parser.y +++ b/usr.bin/m4/parser.y @@ -1,5 +1,5 @@ %{ -/* $OpenBSD: parser.y,v 1.4 2008/08/16 12:21:46 espie Exp $ */ +/* $OpenBSD: parser.y,v 1.5 2008/08/16 12:23:50 espie Exp $ */ /* * Copyright (c) 2004 Marc Espie * @@ -22,7 +22,6 @@ extern int yylex(void); extern int yyerror(const char *); %} %token NUMBER -%token ERROR %left LOR %left LAND %left '|' diff --git a/usr.bin/m4/tokenizer.l b/usr.bin/m4/tokenizer.l index 10de9a35941..9e038d8c42b 100644 --- a/usr.bin/m4/tokenizer.l +++ b/usr.bin/m4/tokenizer.l @@ -1,5 +1,5 @@ %{ -/* $OpenBSD: tokenizer.l,v 1.4 2008/08/16 12:21:46 espie Exp $ */ +/* $OpenBSD: tokenizer.l,v 1.5 2008/08/16 12:23:50 espie Exp $ */ /* * Copyright (c) 2004 Marc Espie * @@ -21,11 +21,9 @@ #include #include -extern int mimic_gnu; extern int32_t yylval; int32_t number(void); -int32_t parse_radix(void); %} delim [ \t\n] @@ -33,17 +31,10 @@ ws {delim}+ hex 0[xX][0-9a-fA-F]+ oct 0[0-7]* dec [1-9][0-9]* -radix 0[rR][0-9]+:[0-9a-zA-Z]+ %% {ws} {/* just skip it */} {hex}|{oct}|{dec} { yylval = number(); return(NUMBER); } -{radix} { if (mimic_gnu) { - yylval = parse_radix(); return(NUMBER); - } else { - return(ERROR); - } - } "<=" { return(LE); } ">=" { return(GE); } "<<" { return(LSHIFT); } @@ -67,31 +58,5 @@ number() fprintf(stderr, "m4: numeric overflow in expr: %s\n", yytext); } return l; -} - -int32_t -parse_radix() -{ - long base; - char *next; - long l; - l = 0; - base = strtol(yytext+2, &next, 0); - if (base > 36 || next == NULL) { - fprintf(stderr, "m4: error in number %s\n", yytext); - } else { - next++; - while (*next != 0) { - if (*next >= '0' && *next <= '9') - l = base * l + *next - '0'; - else if (*next >= 'a' && *next <= 'z') - l = base * l + *next - 'a' + 10; - else if (*next >= 'A' && *next <= 'Z') - l = base * l + *next - 'A' + 10; - next++; - } - } - return l; } - -- 2.20.1