From 7d3a84231e808b6e0f0f7e449af6f4979e9f3195 Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Wed, 5 Oct 2011 15:43:44 +0000 Subject: Optimise nsurl__is_no_escape. svn path=/trunk/netsurf/; revision=12957 --- utils/nsurl.c | 121 ++++++++++++++-------------------------------------------- 1 file changed, 28 insertions(+), 93 deletions(-) (limited to 'utils') diff --git a/utils/nsurl.c b/utils/nsurl.c index 46a172156..dcc878edb 100644 --- a/utils/nsurl.c +++ b/utils/nsurl.c @@ -35,75 +35,31 @@ /* Define to enable NSURL debugging */ #undef NSURL_DEBUG -static bool nsurl__is_gen_delim(unsigned char c) -{ - /* From RFC3986 section 2.2 (reserved characters) - * - * gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@" - * - */ - static const bool gendelim[256] = { - false, false, false, false, false, false, false, false, /* 00 */ - false, false, false, false, false, false, false, false, /* 08 */ - false, false, false, false, false, false, false, false, /* 10 */ - false, false, false, false, false, false, false, false, /* 18 */ - false, false, false, true, false, false, false, false, /* 20 */ - false, false, false, false, false, false, false, true, /* 28 */ - false, false, false, false, false, false, false, false, /* 30 */ - false, false, true, false, false, false, false, true, /* 38 */ - true, false, false, false, false, false, false, false, /* 40 */ - false, false, false, false, false, false, false, false, /* 48 */ - false, false, false, false, false, false, false, false, /* 50 */ - false, false, false, true, false, true, false, false, /* 58 */ - false, false, false, false, false, false, false, false, /* 60 */ - false, false, false, false, false, false, false, false, /* 68 */ - false, false, false, false, false, false, false, false, /* 70 */ - false, false, false, false, false, false, false, false, /* 78 */ - false, false, false, false, false, false, false, false, /* 80 */ - false, false, false, false, false, false, false, false, /* 88 */ - false, false, false, false, false, false, false, false, /* 90 */ - false, false, false, false, false, false, false, false, /* 98 */ - false, false, false, false, false, false, false, false, /* A0 */ - false, false, false, false, false, false, false, false, /* A8 */ - false, false, false, false, false, false, false, false, /* B0 */ - false, false, false, false, false, false, false, false, /* B8 */ - false, false, false, false, false, false, false, false, /* C0 */ - false, false, false, false, false, false, false, false, /* C8 */ - false, false, false, false, false, false, false, false, /* D0 */ - false, false, false, false, false, false, false, false, /* D8 */ - false, false, false, false, false, false, false, false, /* E0 */ - false, false, false, false, false, false, false, false, /* E8 */ - false, false, false, false, false, false, false, false, /* F0 */ - false, false, false, false, false, false, false, false /* F8 */ - }; - return gendelim[c]; -} -static bool nsurl__is_sub_delim(unsigned char c) +static bool nsurl__is_unreserved(unsigned char c) { - /* From RFC3986 section 2.2 (reserved characters) + /* From RFC3986 section 2.3 (unreserved characters) * - * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" - * / "*" / "+" / "," / ";" / "=" + * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" * */ - static const bool subdelim[256] = { + static const bool unreserved[256] = { false, false, false, false, false, false, false, false, /* 00 */ false, false, false, false, false, false, false, false, /* 08 */ false, false, false, false, false, false, false, false, /* 10 */ false, false, false, false, false, false, false, false, /* 18 */ - false, true, false, false, true, false, true, true, /* 20 */ - true, true, true, true, true, false, false, false, /* 28 */ - false, false, false, false, false, false, false, false, /* 30 */ - false, false, false, true, false, true, false, false, /* 38 */ - false, false, false, false, false, false, false, false, /* 40 */ - false, false, false, false, false, false, false, false, /* 48 */ - false, false, false, false, false, false, false, false, /* 50 */ - false, false, false, false, false, false, false, false, /* 58 */ - false, false, false, false, false, false, false, false, /* 60 */ - false, false, false, false, false, false, false, false, /* 68 */ - false, false, false, false, false, false, false, false, /* 70 */ - false, false, false, false, false, false, false, false, /* 78 */ + false, false, false, false, false, false, false, false, /* 20 */ + false, false, false, false, false, true, true, false, /* 28 */ + true, true, true, true, true, true, true, true, /* 30 */ + true, true, false, false, false, false, false, false, /* 38 */ + false, true, true, true, true, true, true, true, /* 40 */ + true, true, true, true, true, true, true, true, /* 48 */ + true, true, true, true, true, true, true, true, /* 50 */ + true, true, true, false, false, false, false, true, /* 58 */ + false, true, true, true, true, true, true, true, /* 60 */ + true, true, true, true, true, true, true, true, /* 68 */ + true, true, true, true, true, true, true, true, /* 70 */ + true, true, true, false, false, false, true, false, /* 78 */ false, false, false, false, false, false, false, false, /* 80 */ false, false, false, false, false, false, false, false, /* 88 */ false, false, false, false, false, false, false, false, /* 90 */ @@ -121,44 +77,29 @@ static bool nsurl__is_sub_delim(unsigned char c) false, false, false, false, false, false, false, false, /* F0 */ false, false, false, false, false, false, false, false /* F8 */ }; - return subdelim[c]; -} - -static bool nsurl__is_reserved(unsigned char c) -{ - /* From RFC3986 section 2.3 (unreserved characters) - * - * reserved = gen-delims / sub-delims - * - */ - return nsurl__is_gen_delim(c) | nsurl__is_sub_delim(c); + return unreserved[c]; } - -static bool nsurl__is_unreserved(unsigned char c) +/* The ASCII codes which should not be percent escaped */ +static bool nsurl__is_no_escape(unsigned char c) { - /* From RFC3986 section 2.3 (unreserved characters) - * - * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" - * - */ - static const bool unreserved[256] = { + static const bool no_escape[256] = { false, false, false, false, false, false, false, false, /* 00 */ false, false, false, false, false, false, false, false, /* 08 */ false, false, false, false, false, false, false, false, /* 10 */ false, false, false, false, false, false, false, false, /* 18 */ - false, false, false, false, false, false, false, false, /* 20 */ - false, false, false, false, false, true, true, false, /* 28 */ + false, true, false, true, true, false, true, true, /* 20 */ + true, true, true, true, true, true, true, true, /* 28 */ true, true, true, true, true, true, true, true, /* 30 */ - true, true, false, false, false, false, false, false, /* 38 */ - false, true, true, true, true, true, true, true, /* 40 */ + true, true, true, true, false, true, false, true, /* 38 */ + true, true, true, true, true, true, true, true, /* 40 */ true, true, true, true, true, true, true, true, /* 48 */ true, true, true, true, true, true, true, true, /* 50 */ - true, true, true, false, false, false, false, true, /* 58 */ + true, true, true, true, false, true, false, true, /* 58 */ false, true, true, true, true, true, true, true, /* 60 */ true, true, true, true, true, true, true, true, /* 68 */ true, true, true, true, true, true, true, true, /* 70 */ - true, true, true, false, false, false, true, false, /* 78 */ + true, true, true, false, false, false, true, false, /* 78 */ false, false, false, false, false, false, false, false, /* 80 */ false, false, false, false, false, false, false, false, /* 88 */ false, false, false, false, false, false, false, false, /* 90 */ @@ -174,15 +115,9 @@ static bool nsurl__is_unreserved(unsigned char c) false, false, false, false, false, false, false, false, /* E0 */ false, false, false, false, false, false, false, false, /* E8 */ false, false, false, false, false, false, false, false, /* F0 */ - false, false, false, false, false, false, false, false /* F8 */ + false, false, false, false, false, false, false, false, /* F8 */ }; - return unreserved[c]; -} - -/* The ASCII codes which should not be percent escaped */ -static bool nsurl__is_no_escape(unsigned char c) -{ - return nsurl__is_reserved(c) | nsurl__is_unreserved(c); + return no_escape[c]; } /** -- cgit v1.2.3