diff options
author | David Robillard <d@drobilla.net> | 2021-07-22 23:39:39 -0400 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2022-01-14 19:37:51 -0500 |
commit | a63a8f19c54dfee75e092819d6622b8d36fe1d39 (patch) | |
tree | 3c2fe49c257e27d369365a0c08c1524baaf74a4c /src/env.c | |
parent | 64e81dfd6ec04995fd396269deb6b32fe2d1192d (diff) | |
download | serd-a63a8f19c54dfee75e092819d6622b8d36fe1d39.tar.gz serd-a63a8f19c54dfee75e092819d6622b8d36fe1d39.tar.bz2 serd-a63a8f19c54dfee75e092819d6622b8d36fe1d39.zip |
Expose low-level node construction API
Diffstat (limited to 'src/env.c')
-rw-r--r-- | src/env.c | 28 |
1 files changed, 16 insertions, 12 deletions
@@ -258,7 +258,7 @@ serd_env_expand_in_place(const SerdEnv* const env, return SERD_ERR_BAD_CURIE; } - uri_prefix->buf = serd_node_string(prefix->uri); + uri_prefix->buf = prefix->uri ? serd_node_string(prefix->uri) : ""; uri_prefix->len = prefix->uri ? prefix->uri->length : 0; uri_suffix->buf = colon + 1; uri_suffix->len = curie.len - name_len - 1; @@ -279,20 +279,24 @@ serd_env_expand_curie(const SerdEnv* const env, const SerdStringView curie) return NULL; } - const size_t len = prefix.len + suffix.len; - SerdNode* const ret = serd_node_malloc(len, 0u, SERD_URI); - if (!ret) { - return NULL; - } + const size_t len = prefix.len + suffix.len; - char* const string = serd_node_buffer(ret); - assert(string); - assert(prefix.buf); + const size_t real_length = serd_node_pad_length(len); + const size_t node_size = sizeof(SerdNode) + real_length; + SerdNode* node = serd_node_malloc(node_size); - memcpy(string, prefix.buf, prefix.len); - memcpy(string + prefix.len, suffix.buf, suffix.len); + if (node) { + node->length = len; + node->flags = 0u; + node->type = SERD_URI; + + char* const string = (char*)(node + 1u); + assert(prefix.buf); + memcpy(string, prefix.buf, prefix.len); + memcpy(string + prefix.len, suffix.buf, suffix.len); + } - return ret; + return node; } SerdNode* |