diff options
author | David Robillard <d@drobilla.net> | 2025-02-26 19:44:20 -0500 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2025-03-16 20:22:36 -0400 |
commit | 02063e1800b5d4eb68b419f774655537b8dec088 (patch) | |
tree | ca683a3db8bd419329516e0beaa8e63b130fdde3 | |
parent | 9ba208e10aba14dcc04e47017e4bfa0091069de1 (diff) | |
download | serd-02063e1800b5d4eb68b419f774655537b8dec088.tar.gz serd-02063e1800b5d4eb68b419f774655537b8dec088.tar.bz2 serd-02063e1800b5d4eb68b419f774655537b8dec088.zip |
Factor out popping trailing dot character
-rw-r--r-- | src/n3.c | 14 | ||||
-rw-r--r-- | src/reader.c | 8 | ||||
-rw-r--r-- | src/reader.h | 3 |
3 files changed, 15 insertions, 10 deletions
@@ -3,7 +3,6 @@ #include "reader.h" #include "serd_internal.h" -#include "stack.h" #include "string_utils.h" #include "try.h" #include "uri_utils.h" @@ -584,9 +583,7 @@ read_PN_LOCAL(SerdReader* const reader, const Ref dest, bool* const ate_dot) SerdNode* const n = deref(reader, dest); if (trailing_unescaped_dot) { // Ate trailing dot, pop it from stack/node and inform caller - --n->n_bytes; - serd_stack_pop(&reader->stack, 1); - *ate_dot = true; + *ate_dot = pop_last_node_char(reader, n); } return (st > SERD_FAILURE) ? st : SERD_SUCCESS; @@ -612,9 +609,8 @@ read_PN_PREFIX_tail(SerdReader* const reader, } if (trailing_unescaped_dot) { - SerdNode* const n = deref(reader, dest); - ((char*)n->buf)[--n->n_bytes] = '\0'; - *ate_dot = true; + SerdNode* const n = deref(reader, dest); + *ate_dot = pop_last_node_char(reader, n); } return st; @@ -971,9 +967,7 @@ read_BLANK_NODE_LABEL(SerdReader* const reader, SerdNode* n = deref(reader, ref); if (n->buf[n->n_bytes - 1] == '.' && read_PN_CHARS(reader, ref)) { // Ate trailing dot, pop it from stack/node and inform caller - --n->n_bytes; - serd_stack_pop(&reader->stack, 1); - *ate_dot = true; + *ate_dot = pop_last_node_char(reader, n); } if (fancy_syntax(reader)) { diff --git a/src/reader.c b/src/reader.c index 778913c8..a7e83717 100644 --- a/src/reader.c +++ b/src/reader.c @@ -131,6 +131,14 @@ deref(SerdReader* const reader, const Ref ref) return NULL; } +bool +pop_last_node_char(SerdReader* const reader, SerdNode* const node) +{ + --node->n_bytes; + serd_stack_pop(&reader->stack, 1); + return true; +} + Ref pop_node(SerdReader* const reader, const Ref ref) { diff --git a/src/reader.h b/src/reader.h index 65c49f2c..c54439c3 100644 --- a/src/reader.h +++ b/src/reader.h @@ -94,6 +94,9 @@ set_blank_id(SerdReader* reader, Ref ref, size_t buf_size); SerdNode* deref(SerdReader* reader, Ref ref); +bool +pop_last_node_char(SerdReader* reader, SerdNode* node); + Ref pop_node(SerdReader* reader, Ref ref); |