unsigned char *d = (unsigned char*)deststring;
register unsigned char b, c;
+retry_parsing:
while( is_unreserved( c = *s++) ) {
if( c=='%') {
if( ( c = scan_fromhex(*s++) ) == 0xff ) return -1;
--s;
break;
case '?':
- if( flags != SCAN_PATH ) return -1;
+ if( flags == SCAN_PATH ) goto found_terminator;
+ *d++ = c;
+ goto retry_parsing;
break;
case '=':
if( flags != SCAN_SEARCHPATH_PARAM ) return -1;
return -1;
}
+found_terminator:
*string = (char *)s;
return d - (unsigned char*)deststring;
}