cvs: php4 /ext/standard url_scanner.c
| From: | Hartmut Holzgraefe | 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;