aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2018-04-29 18:29:03 +0200
committerDavid Robillard <d@drobilla.net>2020-10-27 13:13:58 +0100
commit48a9bed4cf7dc2b81acb6c645f7d053e1b9ead6d (patch)
tree67a2f395fdf443f74e15bb7fe4111282e364528f /src
parent87583c1f917756ebd06744cc39a20eee39c34010 (diff)
downloadserd-48a9bed4cf7dc2b81acb6c645f7d053e1b9ead6d.tar.gz
serd-48a9bed4cf7dc2b81acb6c645f7d053e1b9ead6d.tar.bz2
serd-48a9bed4cf7dc2b81acb6c645f7d053e1b9ead6d.zip
Make serd_node_new_literal take datatype as a node
Diffstat (limited to 'src')
-rw-r--r--src/node.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/node.c b/src/node.c
index 7a70d9ab..070a3a20 100644
--- a/src/node.c
+++ b/src/node.c
@@ -123,9 +123,13 @@ serd_node_new_substring(SerdType type, const char* str, const size_t len)
}
SerdNode*
-serd_node_new_literal(const char* str, const char* datatype, const char* lang)
+serd_node_new_literal(const char* str,
+ const SerdNode* datatype,
+ const char* lang)
{
- if (!str || (lang && datatype && strcmp(datatype, NS_RDF "#langString"))) {
+ if (!str || (lang && datatype &&
+ strcmp(serd_node_buffer_c(datatype), NS_RDF "langString")) ||
+ (datatype && serd_node_type(datatype) != SERD_URI)) {
return NULL;
}
@@ -148,16 +152,14 @@ serd_node_new_literal(const char* str, const char* datatype, const char* lang)
memcpy(serd_node_buffer(lang_node), lang, lang_len);
} else if (datatype) {
flags |= SERD_HAS_DATATYPE;
- const size_t datatype_len = strlen(datatype);
+ const size_t datatype_len = strlen(serd_node_buffer_c(datatype));
const size_t total_len = len + sizeof(SerdNode) + datatype_len;
node = serd_node_malloc(total_len, flags, SERD_LITERAL);
memcpy(serd_node_buffer(node), str, n_bytes);
node->n_bytes = n_bytes;
SerdNode* datatype_node = node + 1 + (len / serd_node_align);
- datatype_node->type = SERD_URI;
- datatype_node->n_bytes = datatype_len;
- memcpy(serd_node_buffer(datatype_node), datatype, datatype_len);
+ memcpy(datatype_node, datatype, sizeof(SerdNode) + datatype_len);
} else {
node = serd_node_malloc(n_bytes, flags, SERD_LITERAL);
memcpy(serd_node_buffer(node), str, n_bytes);