commit 28815433e3595cba51a40c4a5e291da3a8746d78
parent f70ea8c12ab5b7ad6f90f8860544779a43ce8a9e
Author: Laslo Hunhold <dev@frign.de>
Date: Mon, 3 Oct 2022 21:14:52 +0200
Unify code paths in herodotus_read_codepoint()
This saves redundancy.
Signed-off-by: Laslo Hunhold <dev@frign.de>
Diffstat:
M | src/util.c | | | 55 | ++++++++++++++++++++++++++----------------------------- |
1 file changed, 26 insertions(+), 29 deletions(-)
diff --git a/src/util.c b/src/util.c
@@ -31,9 +31,9 @@ herodotus_reader_copy(const HERODOTUS_READER *src, HERODOTUS_READER *dest)
size_t i;
/*
- * we copy such that we have a "fresh" start and build
- * on the fact that src->soft_limit[i] for any i and src->srclen
- * are always larger or equal to src->off
+ * we copy such that we have a "fresh" start and build on the
+ * fact that src->soft_limit[i] for any i and src->srclen are
+ * always larger or equal to src->off
*/
dest->type = src->type;
if (src->type == HERODOTUS_TYPE_CODEPOINT) {
@@ -129,40 +129,37 @@ herodotus_read_codepoint(HERODOTUS_READER *r, bool advance, uint_least32_t *cp)
if (r->type == HERODOTUS_TYPE_CODEPOINT) {
*cp = ((const uint_least32_t *)(r->src))[r->off];
-
- if (advance) {
- r->off++;
- }
+ ret = 1;
} else { /* r->type == HERODOTUS_TYPE_UTF8 */
ret = grapheme_decode_utf8((const char *)r->src + r->off,
MIN(r->srclen, r->soft_limit[0]) -
r->off, cp);
+ }
- if (unlikely(r->srclen == SIZE_MAX && *cp == 0)) {
- /*
- * We encountered a NUL-byte. Don't increment
- * offset and return as if the buffer had ended
- * here all along
- */
- r->terminated_by_null = true;
- return HERODOTUS_STATUS_END_OF_BUFFER;
- }
-
- if (r->off + ret > MIN(r->srclen, r->soft_limit[0])) {
- /*
- * we want more than we have; instead of
- * returning garbage we terminate here.
- */
- return HERODOTUS_STATUS_END_OF_BUFFER;
- }
+ if (unlikely(r->srclen == SIZE_MAX && *cp == 0)) {
+ /*
+ * We encountered a null-codepoint. Don't increment
+ * offset and return as if the buffer had ended here all
+ * along
+ */
+ r->terminated_by_null = true;
+ return HERODOTUS_STATUS_END_OF_BUFFER;
+ }
+ if (r->off + ret > MIN(r->srclen, r->soft_limit[0])) {
/*
- * Increase offset which we now know won't surpass
- * the limits, unless we got told otherwise
+ * we want more than we have; instead of returning
+ * garbage we terminate here.
*/
- if (advance) {
- r->off += ret;
- }
+ return HERODOTUS_STATUS_END_OF_BUFFER;
+ }
+
+ /*
+ * Increase offset which we now know won't surpass the limits,
+ * unless we got told otherwise
+ */
+ if (advance) {
+ r->off += ret;
}
return HERODOTUS_STATUS_SUCCESS;