diff options
author | David Robillard <d@drobilla.net> | 2018-04-29 18:29:03 +0200 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2020-06-21 18:12:03 +0200 |
commit | 71898a9fe6558f0fb612b67c7b0b6d97ce75c6dd (patch) | |
tree | afca9ae318cb06f579b97cfd3fe9364b26317710 /src/node.c | |
parent | 4d310d89521c97ddcb683986cbe8e860457fe73a (diff) | |
download | serd-71898a9fe6558f0fb612b67c7b0b6d97ce75c6dd.tar.gz serd-71898a9fe6558f0fb612b67c7b0b6d97ce75c6dd.tar.bz2 serd-71898a9fe6558f0fb612b67c7b0b6d97ce75c6dd.zip |
Make serd_node_new_literal take datatype as a node
Diffstat (limited to 'src/node.c')
-rw-r--r-- | src/node.c | 14 |
1 files changed, 8 insertions, 6 deletions
@@ -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_get_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); |