aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2025-02-26 19:44:20 -0500
committerDavid Robillard <d@drobilla.net>2025-03-16 20:22:36 -0400
commit02063e1800b5d4eb68b419f774655537b8dec088 (patch)
treeca683a3db8bd419329516e0beaa8e63b130fdde3
parent9ba208e10aba14dcc04e47017e4bfa0091069de1 (diff)
downloadserd-02063e1800b5d4eb68b419f774655537b8dec088.tar.gz
serd-02063e1800b5d4eb68b419f774655537b8dec088.tar.bz2
serd-02063e1800b5d4eb68b419f774655537b8dec088.zip
Factor out popping trailing dot character
-rw-r--r--src/n3.c14
-rw-r--r--src/reader.c8
-rw-r--r--src/reader.h3
3 files changed, 15 insertions, 10 deletions
diff --git a/src/n3.c b/src/n3.c
index 1c94a976..9ae8f9d0 100644
--- a/src/n3.c
+++ b/src/n3.c
@@ -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);