cvs: php4 /ext/standard url_scanner.c

From: Date: Thu, 03 Aug 2000 11:42:39 +0000
Subject: cvs: php4 /ext/standard url_scanner.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-1016@lists.php.net to get a copy of this message
hholzgra Thu Aug 3 04:42:39 2000 EDT Modified files: /php4/ext/standard url_scanner.c Log: will now work again on 1-character urls, spaces before and after '=' and urls containing '#' scrolling info # argh, this file's not even a week old and already needs # a heavy cleanup rewrite, but at least it gets all my test cases right Index: php4/ext/standard/url_scanner.c diff -u php4/ext/standard/url_scanner.c:1.20 php4/ext/standard/url_scanner.c:1.21 --- php4/ext/standard/url_scanner.c:1.20 Tue Aug 1 13:21:35 2000 +++ php4/ext/standard/url_scanner.c Thu Aug 3 04:42:39 2000 @@ -16,7 +16,7 @@ | Hartmut Holzgraefe <hartmut@six.de> | +----------------------------------------------------------------------+ */ -/* $Id: url_scanner.c,v 1.20 2000/08/01 20:21:35 hholzgra Exp $ */ +/* $Id: url_scanner.c,v 1.21 2000/08/03 11:42:39 hholzgra Exp $ */ #include "php.h" @@ -30,7 +30,9 @@ #include "basic_functions.h" #include "url_scanner.h" +#ifndef BUFSIZE #define BUFSIZE 256 +#endif PHP_RINIT_FUNCTION(url_scanner) { url_adapt(NULL,0,NULL,NULL); @@ -58,18 +60,18 @@ if(flag) { if(!strstr(val,buf)) { - char *p = (char *)emalloc(strlen(buf)+strlen(PG(arg_separator))+1); + char *result = (char *)emalloc(strlen(buf)+strlen(PG(arg_separator))+1); int n; if(strchr(val,'?')) { - strcpy(p,PG(arg_separator)); + strcpy(result,PG(arg_separator)); n=strlen(PG(arg_separator)); } else { - *p='?'; + *result='?'; n=1; } - strcpy(p+n,buf); - return p; + strcpy(result+n,buf); + return result; } } return NULL; @@ -181,10 +183,43 @@ case STATE_TAG_IS: case STATE_TAG_IS2: - if(!isspace(*src)) { + if(*src=='>'){ + US.state=STATE_NORMAL; + if(! (US.attr_done)) { + char *p; + p=url_attr_addon(US.tag,US.attr,"",data); + if(p) { + int l= strlen(p); + maxl+=l; + out=realloc(out,maxl); + outp=out+*newlen; + strcpy(outp,p); + outp+=l; + *newlen+=l; + efree(p); + } + } + } else if(*src=='#') { + if(! (US.attr_done)) { + char *p; + US.attr_done=1; + p=url_attr_addon(US.tag,US.attr,"#",data); + if(p) { + int l= strlen(p); + maxl+=l; + out=realloc(out,maxl); + outp=out+*newlen; + strcpy(outp,p); + outp+=l; + *newlen+=l; + efree(p); + } + } + } else if(!isspace(*src)&&(*src!='=')) { US.ml=BUFSIZE; US.p=US.val=erealloc(US.val,US.ml); US.l=0; + US.attr_done=0; if((*src=='"')||(*src=='\'')) { US.state=STATE_TAG_QVAL2; US.delim=*src; @@ -198,20 +233,39 @@ case STATE_TAG_QVAL2: - if(*src==US.delim) { - char *p; + if(*src=='#') { + if(! (US.attr_done)) { + char *p; + US.attr_done=1; + *US.p='\0'; + p=url_attr_addon(US.tag,US.attr,US.val,data); + if(p) { + int l= strlen(p); + maxl+=l; + out=realloc(out,maxl); + outp=out+*newlen; + strcpy(outp,p); + outp+=l; + *newlen+=l; + efree(p); + } + } + } else if(*src==US.delim) { US.state=STATE_IN_TAG; *US.p='\0'; - p=url_attr_addon(US.tag,US.attr,US.val,data); - if(p) { - int l= strlen(p); - maxl+=l; - out=realloc(out,maxl); - outp=out+*newlen; - strcpy(outp,p); - outp+=l; - *newlen+=l; - efree(p); + if(! (US.attr_done)) { + char *p; + p=url_attr_addon(US.tag,US.attr,US.val,data); + if(p) { + int l= strlen(p); + maxl+=l; + out=realloc(out,maxl); + outp=out+*newlen; + strcpy(outp,p); + outp+=l; + *newlen+=l; + efree(p); + } } break; } else if(*src=='\\') { @@ -243,38 +297,40 @@ break; case STATE_TAG_VAL: - if(!isspace(*src)) { - if((*src=='"')||(*src=='\'')) { - US.state=STATE_TAG_QVAL2; - US.delim=*src; - } else { - *US.p++=*src; - US.l++; - if(US.l==US.ml) { - US.ml+=BUFSIZE; - US.val=erealloc(US.val,US.ml); - US.p = US.val+US.l; - } - US.state=STATE_TAG_VAL2; - } - } - break; - case STATE_TAG_VAL2: - if(isspace(*src)||(*src=='>')) { - char *p; + if(*src=='#') { + if(! (US.attr_done)) { + char *p; + US.attr_done=1; + *US.p='\0'; + p=url_attr_addon(US.tag,US.attr,US.val,data); + if(p) { + int l= strlen(p); + maxl+=l; + out=realloc(out,maxl); + outp=out+*newlen; + strcpy(outp,p); + outp+=l; + *newlen+=l; + efree(p); + } + } + } else if(isspace(*src)||(*src=='>')) { US.state=(*src=='>')?STATE_NORMAL:STATE_IN_TAG; *US.p='\0'; - p=url_attr_addon(US.tag,US.attr,US.val,data); - if(p) { - int l= strlen(p); - maxl+=l; - out=realloc(out,maxl); - outp=out+*newlen; - strcpy(outp,p); - outp+=l; - *newlen+=l; - efree(p); + if(! (US.attr_done)) { + char *p; + p=url_attr_addon(US.tag,US.attr,US.val,data); + if(p) { + int l= strlen(p); + maxl+=l; + out=realloc(out,maxl); + outp=out+*newlen; + strcpy(outp,p); + outp+=l; + *newlen+=l; + efree(p); + } } } else { *US.p++=*src;

« previous php.cvs (#1016) next »