Author: brane
Date: Thu Jun 26 19:25:38 2025
New Revision: 1926742
URL: http://svn.apache.org/viewvc?rev=1926742&view=rev
Log:
On the user-defined-authn branch: Minor tweaks and optimisations.
* src/syntax.c
(ct_isspace, ct_istoken, ct_istoken68, ct_tolower): Force index to 8 bits.
(serf__parse_authn_parameters): Don't look twice for the ',' separator.
Modified:
serf/branches/user-defined-authn/src/syntax.c
Modified: serf/branches/user-defined-authn/src/syntax.c
URL:
http://svn.apache.org/viewvc/serf/branches/user-defined-authn/src/syntax.c?rev=1926742&r1=1926741&r2=1926742&view=diff
==============================================================================
--- serf/branches/user-defined-authn/src/syntax.c (original)
+++ serf/branches/user-defined-authn/src/syntax.c Thu Jun 26 19:25:38 2025
@@ -320,19 +320,19 @@ static const apr_uint32_t char_table[256
/* Character class lookup */
static APR_INLINE int ct_isspace(char c)
{
- return char_table[(unsigned char)c] & CT_WHITESPACE;
+ return char_table[0xff & (unsigned char)c] & CT_WHITESPACE;
}
static APR_INLINE int ct_istoken(char c)
{
static const apr_uint32_t ct = CT_TOKEN | CT_DIGIT | CT_UPPER | CT_LOWER;
- return ct & char_table[(unsigned char)c];
+ return ct & char_table[0xff & (unsigned char)c];
}
static APR_INLINE int ct_istoken68(char c)
{
static const apr_uint32_t ct = CT_TOKEN68 | CT_DIGIT | CT_UPPER | CT_LOWER;
- return ct & char_table[(unsigned char)c];
+ return ct & char_table[0xff & (unsigned char)c];
}
@@ -362,7 +362,7 @@ static const unsigned char casefold_tabl
/* Fold ASCII to lowercase. */
static APR_INLINE char ct_tolower(char c)
{
- return (char) casefold_table[(unsigned char)c];
+ return (char) casefold_table[0xff & (unsigned char)c];
}
@@ -453,13 +453,13 @@ apr_hash_t *serf__parse_authn_parameters
apr_hash_t *dict = apr_hash_make(pool);
char *dst = apr_palloc(pool, strlen(attrs) + 1);
const char *src = skip_space(attrs);
- const char *end = skip_token68(src);
- bool want_comma = false;
+ const char *const end = skip_token68(src);
/* Check if the parameters are a single token68. */
if (end != src && !*skip_space(end)) {
- memcpy(dst, src, end - src);
- dst[end - src] = '\0';
+ const apr_size_t len = end - src;
+ memcpy(dst, src, len);
+ dst[len] = '\0';
apr_hash_set(dict, "", 0, dst);
return dict;
}
@@ -470,19 +470,7 @@ apr_hash_t *serf__parse_authn_parameters
apr_ssize_t keylen;
const char *value;
- /* Skip spaces and the separator. */
- src = skip_space(src);
- if (want_comma) {
- if (*src != ',')
- break;
- ++src;
- if (*src)
- src = skip_space(src);
- }
- if (!*src)
- break;
-
- /* Pars the key, a lower-cased token. */
+ /* Parse the key, a lower-cased token. */
key = dst;
src = copy_token_key(&dst, src);
if (!src || key == dst || *src != '=')
@@ -503,12 +491,15 @@ apr_hash_t *serf__parse_authn_parameters
/* Must be at the end of the string or at a valid separator. */
src = skip_space(src);
- if (*src && *src != ',')
- break;
+ if (*src) {
+ if (*src != ',')
+ break;
+ /* Skip the separator and any spaces after the separator. */
+ src = skip_space(src + 1);
+ }
/* Put the new key/value pair into the dict. */
apr_hash_set(dict, key, keylen, value);
- want_comma = true;
}
return dict;
@@ -526,8 +517,8 @@ void serf__tolower_inplace(char *dst)
const char *serf__tolower(const char *src, apr_pool_t *pool)
{
- const size_t len = strlen(src) + 1;
- size_t i;
+ const apr_size_t len = strlen(src) + 1;
+ apr_size_t i;
char *dst = apr_palloc(pool, len);
for (i = 0; i < len; ++i)