use static buffer for URLs instead of allocating/freeing memory

for each one
This commit is contained in:
Sascha Schumann 1999-09-12 13:03:10 +00:00
parent ac524d4b94
commit 96559e91fe
3 changed files with 118 additions and 121 deletions

View file

@ -10,8 +10,8 @@ libphpext_standard_a_SOURCES=\
cyr_convert.c flock_compat.c crypt.c dl.c head.c post.c \ cyr_convert.c flock_compat.c crypt.c dl.c head.c post.c \
parsedate.y lcg.c url_scanner.c parsedate.y lcg.c url_scanner.c
url_scanner.c: url_scanner.re $(srcdir)/url_scanner.c: $(srcdir)/url_scanner.re
re2c -s $< > $@ re2c -b $< > $@
#number.o: number.c #number.o: number.c
# $(CC) $(CFLAGS) -w@WARNING_LEVEL@ -c $< -o $@ # $(CC) $(CFLAGS) -w@WARNING_LEVEL@ -c $< -o $@

View file

@ -1,5 +1,5 @@
/* Generated by re2c 0.5 on Sun Sep 12 01:52:31 1999 */ /* Generated by re2c 0.5 on Sun Sep 12 15:02:30 1999 */
#line 1 "url_scanner.re" #line 1 "../../../php4/ext/standard/url_scanner.re"
/* /*
+----------------------------------------------------------------------+ +----------------------------------------------------------------------+
| PHP version 4.0 | | PHP version 4.0 |
@ -24,6 +24,9 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#undef MIN
#define MIN(a,b) (a)<(b)?(a):(b)
#define YYCTYPE char #define YYCTYPE char
#define YYCURSOR state->crs #define YYCURSOR state->crs
#define YYLIMIT state->end #define YYLIMIT state->end
@ -73,9 +76,9 @@ typedef struct {
static void screw_url(lexdata *state) static void screw_url(lexdata *state)
{ {
char *url;
int len; int len;
char buf[URLLEN]; char buf[URLLEN];
char url[URLLEN];
const char *p, *q; const char *p, *q;
char c; char c;
@ -97,8 +100,7 @@ static void screw_url(lexdata *state)
ATTACH(state->start, p-state->start); ATTACH(state->start, p-state->start);
/* copy old URI */ /* copy old URI */
len = q - p; len = MIN(q - p, sizeof(buf) - 1);
url = malloc(len + 1);
memcpy(url, p, len); memcpy(url, p, len);
url[len] = '\0'; url[len] = '\0';
@ -106,7 +108,6 @@ static void screw_url(lexdata *state)
len = snprintf(buf, sizeof(buf), "%s%c%s", url, len = snprintf(buf, sizeof(buf), "%s%c%s", url,
memchr(state->start, '?', len) ? '&' : '?', memchr(state->start, '?', len) ? '&' : '?',
state->data); state->data);
free(url);
/* attach new URI */ /* attach new URI */
ATTACH(buf, len); ATTACH(buf, len);
@ -120,7 +121,7 @@ static void catchup(lexdata *state)
ATTACH(state->start, (state->crs - state->start)); ATTACH(state->start, (state->crs - state->start));
} }
#line 133 #line 134
static void url_scanner(lexdata *state) static void url_scanner(lexdata *state)
@ -132,13 +133,47 @@ static void url_scanner(lexdata *state)
{ {
YYCTYPE yych; YYCTYPE yych;
unsigned int yyaccept; unsigned int yyaccept;
static unsigned char yybm[] = {
0, 64, 64, 64, 64, 64, 64, 64,
64, 192, 64, 192, 192, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64,
192, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 0, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64,
64, 64, 64, 64, 64, 64, 64, 64,
};
goto yy0; goto yy0;
yy1: ++YYCURSOR; yy1: ++YYCURSOR;
yy0: yy0:
if((YYLIMIT - YYCURSOR) < 7) YYFILL(7); if((YYLIMIT - YYCURSOR) < 7) YYFILL(7);
yych = *YYCURSOR; yych = *YYCURSOR;
if(yybm[0+yych] & 64) goto yy4;
if(yych <= '\000') goto yy7; if(yych <= '\000') goto yy7;
if(yych != '<') goto yy4;
yy2: yych = *++YYCURSOR; yy2: yych = *++YYCURSOR;
if(yych <= 'F'){ if(yych <= 'F'){
if(yych == 'A') goto yy9; if(yych == 'A') goto yy9;
@ -153,14 +188,13 @@ yy2: yych = *++YYCURSOR;
yy3:yy4: ++YYCURSOR; yy3:yy4: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1); if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR; yych = *YYCURSOR;
yy5: if(yych <= '\000') goto yy6; yy5: if(yybm[0+yych] & 64) goto yy4;
if(yych != '<') goto yy4;
yy6: yy6:
#line 144 #line 145
{ BEGIN(INITIAL); } { BEGIN(INITIAL); }
yy7: yych = *++YYCURSOR; yy7: yych = *++YYCURSOR;
yy8: yy8:
#line 145 #line 146
{ FINISH; } { FINISH; }
yy9: yych = *++YYCURSOR; yy9: yych = *++YYCURSOR;
if(yych == 'H') goto yy3; if(yych == 'H') goto yy3;
@ -185,23 +219,9 @@ yy14: yych = *++YYCURSOR;
yy15: ++YYCURSOR; yy15: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1); if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR; yych = *YYCURSOR;
yy16: if(yych <= '\037'){ yy16: if(yybm[0+yych] & 128) goto yy15;
if(yych <= '\t'){ if(yych == 'S') goto yy17;
if(yych <= '\b') goto yy3; if(yych != 's') goto yy3;
goto yy15;
} else {
if(yych <= '\n') goto yy3;
if(yych <= '\f') goto yy15;
goto yy3;
}
} else {
if(yych <= 'S'){
if(yych <= ' ') goto yy15;
if(yych <= 'R') goto yy3;
} else {
if(yych != 's') goto yy3;
}
}
yy17: yych = *++YYCURSOR; yy17: yych = *++YYCURSOR;
if(yych == 'R') goto yy18; if(yych == 'R') goto yy18;
if(yych != 'r') goto yy3; if(yych != 'r') goto yy3;
@ -233,7 +253,7 @@ yy22: if(yych <= '\n'){
if(yych == ' ') goto yy21; if(yych == ' ') goto yy21;
} }
yy23: yy23:
#line 142 #line 143
{ BEGIN(REF); } { BEGIN(REF); }
yy24: ++YYCURSOR; yy24: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1); if(YYLIMIT == YYCURSOR) YYFILL(1);
@ -289,116 +309,92 @@ yy32: if(yych <= '\n'){
if(yych == ' ') goto yy31; if(yych == ' ') goto yy31;
} }
yy33: yy33:
#line 143 #line 144
{ BEGIN(REF); } { BEGIN(REF); }
} }
#line 146 #line 147
break; break;
case REF: case REF:
{ {
YYCTYPE yych; YYCTYPE yych;
unsigned int yyaccept; unsigned int yyaccept;
static unsigned char yybm[] = {
0, 192, 192, 192, 192, 192, 192, 192,
192, 32, 192, 32, 32, 192, 192, 192,
192, 192, 192, 192, 192, 192, 192, 192,
192, 192, 192, 192, 192, 192, 192, 192,
32, 192, 0, 0, 192, 192, 192, 192,
192, 192, 192, 192, 192, 192, 192, 192,
192, 192, 192, 192, 192, 192, 192, 192,
192, 192, 128, 192, 192, 192, 0, 192,
192, 192, 192, 192, 192, 192, 192, 192,
192, 192, 192, 192, 192, 192, 192, 192,
192, 192, 192, 192, 192, 192, 192, 192,
192, 192, 192, 192, 192, 192, 192, 192,
192, 192, 192, 192, 192, 192, 192, 192,
192, 192, 192, 192, 192, 192, 192, 192,
192, 192, 192, 192, 192, 192, 192, 192,
192, 192, 192, 192, 192, 192, 192, 192,
192, 192, 192, 192, 192, 192, 192, 192,
192, 192, 192, 192, 192, 192, 192, 192,
192, 192, 192, 192, 192, 192, 192, 192,
192, 192, 192, 192, 192, 192, 192, 192,
192, 192, 192, 192, 192, 192, 192, 192,
192, 192, 192, 192, 192, 192, 192, 192,
192, 192, 192, 192, 192, 192, 192, 192,
192, 192, 192, 192, 192, 192, 192, 192,
192, 192, 192, 192, 192, 192, 192, 192,
192, 192, 192, 192, 192, 192, 192, 192,
192, 192, 192, 192, 192, 192, 192, 192,
192, 192, 192, 192, 192, 192, 192, 192,
192, 192, 192, 192, 192, 192, 192, 192,
192, 192, 192, 192, 192, 192, 192, 192,
192, 192, 192, 192, 192, 192, 192, 192,
192, 192, 192, 192, 192, 192, 192, 192,
};
goto yy34; goto yy34;
yy35: ++YYCURSOR; yy35: ++YYCURSOR;
yy34: yy34:
if(YYLIMIT == YYCURSOR) YYFILL(1); if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR; yych = *YYCURSOR;
if(yych <= ' '){ if(yybm[0+yych] & 64) goto yy39;
if(yych <= '\t'){ if(yych <= '\000') goto yy36;
if(yych <= '\000') goto yy36; if(yych <= '"') goto yy37;
if(yych <= '\b') goto yy39; if(yych <= '#') goto yy36;
goto yy37; if(yych <= '=') goto yy42;
} else {
if(yych <= '\n') goto yy39;
if(yych <= '\f') goto yy37;
if(yych <= '\037') goto yy39;
goto yy37;
}
} else {
if(yych <= '9'){
if(yych <= '!') goto yy39;
if(yych <= '"') goto yy37;
if(yych >= '$') goto yy39;
} else {
if(yych <= ':') goto yy42;
if(yych != '>') goto yy39;
}
}
yy36:yy37: ++YYCURSOR; yy36:yy37: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1); if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR; yych = *YYCURSOR;
yy38: if(yych <= ' '){ yy38: if(yybm[0+yych] & 64) goto yy39;
if(yych <= '\t'){ if(yych <= '\000') goto yy36;
if(yych <= '\000') goto yy36; if(yych <= '!') goto yy37;
if(yych >= '\t') goto yy37; if(yych == ':') goto yy42;
} else { goto yy36;
if(yych <= '\n') goto yy39;
if(yych <= '\f') goto yy37;
if(yych >= ' ') goto yy37;
}
} else {
if(yych <= '9'){
if(yych <= '!') goto yy39;
if(yych <= '#') goto yy36;
} else {
if(yych <= ':') goto yy42;
if(yych == '>') goto yy36;
}
}
yy39: ++YYCURSOR; yy39: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1); if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR; yych = *YYCURSOR;
yy40: if(yych <= ' '){ yy40: if(yybm[0+yych] & 64) goto yy39;
if(yych <= '\t'){ if(yych <= '"'){
if(yych <= '\000') goto yy41; if(yych <= '\000') goto yy41;
if(yych <= '\b') goto yy39; if(yych <= '!') goto yy48;
goto yy48; goto yy50;
} else {
if(yych <= '\n') goto yy39;
if(yych <= '\f') goto yy48;
if(yych <= '\037') goto yy39;
goto yy48;
}
} else { } else {
if(yych <= '9'){ if(yych <= '#') goto yy51;
if(yych <= '!') goto yy39; if(yych <= '=') goto yy42;
if(yych <= '"') goto yy50;
if(yych <= '#') goto yy51;
goto yy39;
} else {
if(yych <= ':') goto yy42;
if(yych != '>') goto yy39;
}
} }
yy41: yy41:
#line 150 #line 151
{ BEGIN(INITIAL); } { BEGIN(INITIAL); }
yy42: ++YYCURSOR; yy42: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1); if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR; yych = *YYCURSOR;
yy43: if(yych <= '\037'){ yy43: if(yybm[0+yych] & 128) goto yy42;
if(yych <= '\t'){ if(yych <= '\000') goto yy44;
if(yych <= '\000') goto yy44; if(yych <= '!') goto yy45;
if(yych <= '\b') goto yy42; if(yych <= '"') goto yy47;
goto yy45;
} else {
if(yych <= '\n') goto yy42;
if(yych <= '\f') goto yy45;
goto yy42;
}
} else {
if(yych <= '"'){
if(yych <= ' ') goto yy45;
if(yych <= '!') goto yy42;
goto yy47;
} else {
if(yych <= '#') goto yy44;
if(yych != '>') goto yy42;
}
}
yy44: yy44:
#line 152 #line 153
{ {
/* don't modify absolute links */ /* don't modify absolute links */
state->state = INITIAL; BEGIN(INITIAL); state->state = INITIAL; BEGIN(INITIAL);
@ -439,10 +435,10 @@ yy50: yych = *++YYCURSOR;
goto yy41; goto yy41;
yy51: yych = *++YYCURSOR; yy51: yych = *++YYCURSOR;
yy52: YYCURSOR -= 1; yy52: YYCURSOR -= 1;
#line 151 #line 152
{ BEGIN(INITIAL); } { BEGIN(INITIAL); }
} }
#line 156 #line 157
break; break;
} }

View file

@ -22,6 +22,9 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#undef MIN
#define MIN(a,b) (a)<(b)?(a):(b)
#define YYCTYPE char #define YYCTYPE char
#define YYCURSOR state->crs #define YYCURSOR state->crs
#define YYLIMIT state->end #define YYLIMIT state->end
@ -71,9 +74,9 @@ typedef struct {
static void screw_url(lexdata *state) static void screw_url(lexdata *state)
{ {
char *url;
int len; int len;
char buf[URLLEN]; char buf[URLLEN];
char url[URLLEN];
const char *p, *q; const char *p, *q;
char c; char c;
@ -95,8 +98,7 @@ static void screw_url(lexdata *state)
ATTACH(state->start, p-state->start); ATTACH(state->start, p-state->start);
/* copy old URI */ /* copy old URI */
len = q - p; len = MIN(q - p, sizeof(buf) - 1);
url = malloc(len + 1);
memcpy(url, p, len); memcpy(url, p, len);
url[len] = '\0'; url[len] = '\0';
@ -104,7 +106,6 @@ static void screw_url(lexdata *state)
len = snprintf(buf, sizeof(buf), "%s%c%s", url, len = snprintf(buf, sizeof(buf), "%s%c%s", url,
memchr(state->start, '?', len) ? '&' : '?', memchr(state->start, '?', len) ? '&' : '?',
state->data); state->data);
free(url);
/* attach new URI */ /* attach new URI */
ATTACH(buf, len); ATTACH(buf, len);