e = ue;
if (!(p = memchr(s, '/', (ue - s)))) {
- if ((p = memchr(s, '?', (ue - s)))) {
- e = p;
- } else if ((p = memchr(s, '#', (ue - s)))) {
- e = p;
+ char *query, *fragment;
+
+ query = memchr(s, '?', (ue - s));
+ fragment = memchr(s, '#', (ue - s));
+
+ if (query && fragment) {
+ if (query > fragment) {
+ p = e = fragment;
+ } else {
+ p = e = query;
+ }
+ } else if (query) {
+ p = e = query;
+ } else if (fragment) {
+ p = e = fragment;
}
} else {
e = p;
if ((p = memchr(s, '?', (ue - s)))) {
pp = strchr(s, '#');
-
+
if (pp && pp < p) {
p = pp;
- pp = strchr(pp+2, '#');
+ goto label_parse;
}
if (p - s) {