summaryrefslogtreecommitdiff
path: root/src/mod_magnet.c
diff options
context:
space:
mode:
authorGlenn Strauss <gstrauss@gluelogic.com>2022-04-28 19:44:16 -0400
committerGlenn Strauss <gstrauss@gluelogic.com>2022-05-10 00:44:29 -0400
commit5447bd5ff78dc7d4d21a80f351d0e8827dabf35e (patch)
treea63ea6491eff84ce1709cf60ebff1b2b80c71bdd /src/mod_magnet.c
parent14ddf19c97ac3e418891c7a8a735e80b5c93bb7a (diff)
downloadlighttpd-git-5447bd5ff78dc7d4d21a80f351d0e8827dabf35e.tar.gz
[mod_magnet] reduce magnet_env_get_id() scanning
Diffstat (limited to 'src/mod_magnet.c')
-rw-r--r--src/mod_magnet.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/mod_magnet.c b/src/mod_magnet.c
index e98445ef..41e39abc 100644
--- a/src/mod_magnet.c
+++ b/src/mod_magnet.c
@@ -1565,6 +1565,7 @@ typedef struct {
} type;
} magnet_env_t;
+/*(NB: coordinate any changes with scan offsets in magnet_env_get_id())*/
static const magnet_env_t magnet_env[] = {
{ CONST_STR_LEN("physical.path"), MAGNET_ENV_PHYSICAL_PATH },
{ CONST_STR_LEN("physical.rel-path"), MAGNET_ENV_PHYSICAL_REL_PATH },
@@ -1719,8 +1720,23 @@ static buffer *magnet_env_get_buffer_by_id(request_st * const r, int id) {
return dest;
}
+__attribute_pure__
static int magnet_env_get_id(const char * const key, const size_t klen) {
- for (int i = 0; magnet_env[i].name; ++i) {
+ /*(NB: ensure offsets match position in magnet_env[])*/
+ int i; /* magnet_env[] scan offset */
+ switch (*key) {
+ case 'r': /* request.* or response.* */
+ i = klen > 7 && key[7] == '.' ? 9 : 19;
+ break;
+ case 'u': /* uri.* */
+ default:
+ i = 4;
+ break;
+ case 'p': /* physical.* */
+ i = 0;
+ break;
+ }
+ for (; i < (int)(sizeof(magnet_env)/sizeof(*magnet_env)); ++i) {
if (klen == magnet_env[i].nlen
&& 0 == memcmp(key, magnet_env[i].name, klen))
return magnet_env[i].type;