diff options
author | David Robillard <d@drobilla.net> | 2021-07-17 17:31:53 -0400 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2022-01-13 23:03:45 -0500 |
commit | 30f3e6fc2c1e24c429d5d0b7100dc449ade6703f (patch) | |
tree | b8511de2276fbc23d06dab1c83fd86b4f1a96b10 /src/node.c | |
parent | d88b5a797f8502c40d0da964d653a1cd3028c872 (diff) | |
download | serd-30f3e6fc2c1e24c429d5d0b7100dc449ade6703f.tar.gz serd-30f3e6fc2c1e24c429d5d0b7100dc449ade6703f.tar.bz2 serd-30f3e6fc2c1e24c429d5d0b7100dc449ade6703f.zip |
Clean up base64 node construction and access API
Diffstat (limited to 'src/node.c')
-rw-r--r-- | src/node.c | 27 |
1 files changed, 27 insertions, 0 deletions
@@ -182,6 +182,13 @@ serd_node_zero_pad(SerdNode* node) } } +static SerdWriteResult +result(const SerdStatus status, const size_t count) +{ + const SerdWriteResult result = {status, count}; + return result; +} + SerdNode* serd_new_simple_node(const SerdNodeType type, const SerdStringView str) { @@ -386,6 +393,26 @@ serd_get_integer(const SerdNode* const node) return value; } +size_t +serd_get_base64_size(const SerdNode* const node) +{ + return exess_base64_decoded_size(serd_node_length(node)); +} + +SerdWriteResult +serd_get_base64(const SerdNode* const node, + const size_t buf_size, + void* const buf) +{ + const size_t max_size = serd_get_base64_size(node); + const ExessVariableResult r = + exess_read_base64(buf_size, buf, serd_node_string(node)); + + return r.status == EXESS_NO_SPACE ? result(SERD_ERR_OVERFLOW, max_size) + : r.status ? result(SERD_ERR_BAD_SYNTAX, 0u) + : result(SERD_SUCCESS, r.write_count); +} + SerdNode* serd_node_copy(const SerdNode* node) { |