aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2021-08-02 11:56:54 -0400
committerDavid Robillard <d@drobilla.net>2023-12-02 18:49:08 -0500
commitd206d6020c23420078a8b2579f0274723b1b470a (patch)
tree2883efcdf9c17fa42d18862d565e4d9d6a3e6f7e /tools
parent4e1850852a74fe6904beabf793ea8d9915cab246 (diff)
downloadserd-d206d6020c23420078a8b2579f0274723b1b470a.tar.gz
serd-d206d6020c23420078a8b2579f0274723b1b470a.tar.bz2
serd-d206d6020c23420078a8b2579f0274723b1b470a.zip
Factor out setting base URI from a path
Diffstat (limited to 'tools')
-rw-r--r--tools/console.c20
-rw-r--r--tools/console.h5
-rw-r--r--tools/serd-pipe.c13
3 files changed, 27 insertions, 11 deletions
diff --git a/tools/console.c b/tools/console.c
index f6a15ecb..c187f500 100644
--- a/tools/console.c
+++ b/tools/console.c
@@ -4,6 +4,8 @@
#include "console.h"
#include "serd/serd.h"
+#include "zix/allocator.h"
+#include "zix/filesystem.h"
#ifdef _WIN32
# ifdef _MSC_VER
@@ -43,6 +45,24 @@ serd_print_version(const char* const program)
return 0;
}
+SerdStatus
+serd_set_base_uri_from_path(SerdEnv* const env, const char* const path)
+{
+ char* const input_path = zix_canonical_path(NULL, path);
+ if (!input_path) {
+ return SERD_BAD_ARG;
+ }
+
+ SerdNode* const file_uri =
+ serd_new_file_uri(serd_string(input_path), serd_empty_string());
+
+ serd_env_set_base_uri(env, serd_node_string_view(file_uri));
+ serd_node_free(file_uri);
+ zix_free(NULL, input_path);
+
+ return SERD_SUCCESS;
+}
+
/// Wrapper for getc that is compatible with SerdReadFunc but faster than fread
static size_t
serd_file_read_byte(void* buf, size_t size, size_t nmemb, void* stream)
diff --git a/tools/console.h b/tools/console.h
index ef0fb1d1..763ff215 100644
--- a/tools/console.h
+++ b/tools/console.h
@@ -4,7 +4,9 @@
#ifndef SERD_TOOLS_CONSOLE_H
#define SERD_TOOLS_CONSOLE_H
+#include "serd/env.h"
#include "serd/input_stream.h"
+#include "serd/status.h"
#include <stdio.h>
@@ -14,6 +16,9 @@ serd_set_stream_utf8_mode(FILE* stream);
int
serd_print_version(const char* program);
+SerdStatus
+serd_set_base_uri_from_path(SerdEnv* env, const char* path);
+
SerdInputStream
serd_open_tool_input(const char* filename);
diff --git a/tools/serd-pipe.c b/tools/serd-pipe.c
index 894a422b..1ad07719 100644
--- a/tools/serd-pipe.c
+++ b/tools/serd-pipe.c
@@ -340,19 +340,10 @@ main(int argc, char** argv)
for (int i = 0; !st && i < n_inputs; ++i) {
if (!base && !!strcmp(inputs[i], "-")) {
- char* const input_path = zix_canonical_path(NULL, inputs[i]);
- if (!input_path) {
- SERDI_ERRORF("failed to resolve path %s\n", inputs[i]);
- st = SERD_BAD_ARG;
+ if ((st = serd_set_base_uri_from_path(env, inputs[i]))) {
+ SERDI_ERRORF("failed to set base URI from path %s\n", inputs[i]);
break;
}
-
- SerdNode* const file_uri =
- serd_new_file_uri(serd_string(input_path), serd_empty_string());
-
- serd_env_set_base_uri(env, serd_node_string_view(file_uri));
- serd_node_free(file_uri);
- zix_free(NULL, input_path);
}
if (n_inputs > 1) {