/* *( pchar / "?" / "/" ) */ static int parse_fragment_or_query(const char *uri_text, size_t *i) { char c; while ((c = uri_text[*i]) != 0) { const size_t advance = parse_pchar(uri_text, *i); /* pchar */ switch (advance) { case 0: /* uri_text[i] isn't in pchar */ /* maybe it's ? or / */ if (uri_text[*i] == '?' || uri_text[*i] == '/') { (*i)++; break; } else { return 1; } GPR_UNREACHABLE_CODE(return 0); default: (*i) += advance; break; case NOT_SET: /* uri_text[i] introduces an invalid URI */ return 0; } } /* *i is the first uri_text position past the \a query production, maybe \0 */ return 1; }
// segment-nz = 1*pchar TextCursor parse_segment_nz(TextCursor cursor) { cursor = parse_pchar(cursor); REPEAT_IGNORING(parse_pchar, cursor); }