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

View file

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