Unify code paths in herodotus_read_codepoint() - libgrapheme - unicode string l… | |
git clone git://git.suckless.org/libgrapheme | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 28815433e3595cba51a40c4a5e291da3a8746d78 | |
parent f70ea8c12ab5b7ad6f90f8860544779a43ce8a9e | |
Author: Laslo Hunhold <[email protected]> | |
Date: Mon, 3 Oct 2022 21:14:52 +0200 | |
Unify code paths in herodotus_read_codepoint() | |
This saves redundancy. | |
Signed-off-by: Laslo Hunhold <[email protected]> | |
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_… | |
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 advanc… | |
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; |