summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usr.bin/m4/extern.h14
-rw-r--r--usr.bin/m4/gnum4.c102
-rw-r--r--usr.bin/m4/misc.c18
-rw-r--r--usr.bin/m4/parser.y3
-rw-r--r--usr.bin/m4/tokenizer.l37
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 <espie@cvs.openbsd.org>
*
@@ -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 <espie@cvs.openbsd.org>
*
@@ -21,11 +21,9 @@
#include <stdint.h>
#include <limits.h>
-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;
}
-