| 199 | } |
| 200 | |
| 201 | SerdNode |
| 202 | serd_node_new_uri(const SerdURI* uri, const SerdURI* base, SerdURI* out) |
| 203 | { |
| 204 | SerdURI abs_uri = *uri; |
| 205 | if (base) { |
| 206 | serd_uri_resolve(uri, base, &abs_uri); |
| 207 | } |
| 208 | |
| 209 | const size_t len = serd_uri_string_length(&abs_uri); |
| 210 | uint8_t* buf = (uint8_t*)malloc(len + 1); |
| 211 | SerdNode node = { buf, 0, 0, 0, SERD_URI }; |
| 212 | uint8_t* ptr = buf; |
| 213 | const size_t actual_len = serd_uri_serialise(&abs_uri, string_sink, &ptr); |
| 214 | |
| 215 | buf[actual_len] = '\0'; |
| 216 | node.n_bytes = actual_len; |
| 217 | node.n_chars = serd_strlen(buf, NULL, NULL); |
| 218 | |
| 219 | if (out) { |
| 220 | serd_uri_parse(buf, out); // TODO: cleverly avoid double parse |
| 221 | } |
| 222 | |
| 223 | return node; |
| 224 | } |
| 225 | |
| 226 | SerdNode |
| 227 | serd_node_new_relative_uri(const SerdURI* uri, |
no test coverage detected