From 3904daced7a1543dcd8883641a0bfd5dfe438821 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20van=20Dorst?= Date: Sun, 17 May 2026 18:32:30 +0200 Subject: [PATCH 1/4] refactor is_word() Saved 23 bytes. --- httpd/httpd.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/httpd/httpd.c b/httpd/httpd.c index 77db515..203b533 100644 --- a/httpd/httpd.c +++ b/httpd/httpd.c @@ -116,18 +116,24 @@ char strcmp(__xdata uint8_t *c, __code uint8_t * __xdata d) } -char is_word(__xdata uint8_t *c, __code uint8_t * __xdata d) +char is_word(__xdata uint8_t *xdata_str_p, __code uint8_t * __xdata code_str_p) { - uint8_t i = 0; + uint8_t u, c; - while (d[i] && (d[i] == c[i])) - i++; + while (1) { + u = *xdata_str_p++; + c = *code_str_p++; - if (d[i]) - return 0; - if (c[i] != ' ' && c[i] != '\t' && c[i] != ':' && c[i] != '?' && c[i] != '=' && c[i] != '\n' && c[i] != '\r' && c[i]) - return 0; - return 1; + if (c == '\0') { + if (u != '\0' && u != ' ' && u != '\t' && u != ':' && u != '?' && u != '=' && u != '\n' && u != '\r') + return 0; + return 1; + } + + if (c != u) { + return 0; + } + } } From b46cc2087ffc762dc20dd57ed06f0c625d2e942d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20van=20Dorst?= Date: Sun, 17 May 2026 18:36:41 +0200 Subject: [PATCH 2/4] change is_word() return type from char to bool. Saves 52 bytes. --- httpd/httpd.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/httpd/httpd.c b/httpd/httpd.c index 203b533..d273e89 100644 --- a/httpd/httpd.c +++ b/httpd/httpd.c @@ -116,7 +116,7 @@ char strcmp(__xdata uint8_t *c, __code uint8_t * __xdata d) } -char is_word(__xdata uint8_t *xdata_str_p, __code uint8_t * __xdata code_str_p) +bool is_word(__xdata uint8_t *xdata_str_p, __code uint8_t * __xdata code_str_p) { uint8_t u, c; @@ -126,12 +126,12 @@ char is_word(__xdata uint8_t *xdata_str_p, __code uint8_t * __xdata code_str_p) if (c == '\0') { if (u != '\0' && u != ' ' && u != '\t' && u != ':' && u != '?' && u != '=' && u != '\n' && u != '\r') - return 0; - return 1; + return false; + return true; } if (c != u) { - return 0; + return false; } } } From f81c497728ff4f3a01a37f2b33f101e14a2ad3f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20van=20Dorst?= Date: Sun, 17 May 2026 18:41:01 +0200 Subject: [PATCH 3/4] refactor is_word_x() Saved 22 bytes. --- httpd/httpd.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/httpd/httpd.c b/httpd/httpd.c index d273e89..bb055cc 100644 --- a/httpd/httpd.c +++ b/httpd/httpd.c @@ -162,18 +162,24 @@ char is_url_word_x(__xdata uint8_t *c, __xdata uint8_t *d) } -char is_word_x(__xdata uint8_t *c, __xdata uint8_t *d) +char is_word_x(__xdata uint8_t *lhs_str_p, __xdata uint8_t *rhs_str_p) { - register uint8_t i = 0; + uint8_t u, c; - while (d[i] && (d[i] == c[i])) - i++; + while (1) { + u = *lhs_str_p++; + c = *rhs_str_p++; - if (d[i]) - return 0; - if (c[i] != ' ' && c[i] != '\t' && c[i] != ':' && c[i] != '?' && c[i] != '=' && c[i] != '\n' && c[i] != '\r' && c[i]) - return 0; - return 1; + if (c == '\0') { + if (u != '\0' && u != ' ' && u != '\t' && u != ':' && u != '?' && u != '=' && u != '\n' && u != '\r') + return 0; + return 1; + } + + if (c != u) { + return 0; + } + } } From 02992771ad31da7918f728de823b532bc523201f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20van=20Dorst?= Date: Sun, 17 May 2026 18:43:13 +0200 Subject: [PATCH 4/4] change is_word_x() return type from char to bool. Saves 10 bytes. --- httpd/httpd.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/httpd/httpd.c b/httpd/httpd.c index bb055cc..fff7e8a 100644 --- a/httpd/httpd.c +++ b/httpd/httpd.c @@ -162,7 +162,7 @@ char is_url_word_x(__xdata uint8_t *c, __xdata uint8_t *d) } -char is_word_x(__xdata uint8_t *lhs_str_p, __xdata uint8_t *rhs_str_p) +bool is_word_x(__xdata uint8_t *lhs_str_p, __xdata uint8_t *rhs_str_p) { uint8_t u, c; @@ -172,12 +172,12 @@ char is_word_x(__xdata uint8_t *lhs_str_p, __xdata uint8_t *rhs_str_p) if (c == '\0') { if (u != '\0' && u != ' ' && u != '\t' && u != ':' && u != '?' && u != '=' && u != '\n' && u != '\r') - return 0; - return 1; + return false; + return true; } if (c != u) { - return 0; + return false; } } }