aboutsummaryrefslogtreecommitdiffstats
path: root/src/console.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2021-08-02 11:32:31 -0400
committerDavid Robillard <d@drobilla.net>2022-01-28 21:57:07 -0500
commit2746098ad7d9f9d81e616a25e16aeae784f438a5 (patch)
treefa38401f32247bbd183fc5920e080c1674ef8b8a /src/console.c
parent7eafa3587c370a204e08afbc4013f748dd78feba (diff)
downloadserd-2746098ad7d9f9d81e616a25e16aeae784f438a5.tar.gz
serd-2746098ad7d9f9d81e616a25e16aeae784f438a5.tar.bz2
serd-2746098ad7d9f9d81e616a25e16aeae784f438a5.zip
Factor out opening input files
Diffstat (limited to 'src/console.c')
-rw-r--r--src/console.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/console.c b/src/console.c
index 75de5f62..fd339526 100644
--- a/src/console.c
+++ b/src/console.c
@@ -15,6 +15,7 @@
*/
#include "console.h"
+#include "system.h"
#include "serd/serd.h"
@@ -26,6 +27,8 @@
# include <io.h>
#endif
+#include <string.h>
+
void
serd_set_stream_utf8_mode(FILE* const stream)
{
@@ -52,3 +55,27 @@ serd_print_version(const char* const program)
return 0;
}
+
+SerdByteSource*
+serd_open_input(const char* const filename, const size_t page_size)
+{
+ SerdByteSource* byte_source = NULL;
+ if (!strcmp(filename, "-")) {
+ serd_set_stream_utf8_mode(stdin);
+
+ SerdNode* name = serd_new_string(SERD_STRING("stdin"));
+
+ byte_source = serd_byte_source_new_function(serd_file_read_byte,
+ (SerdStreamErrorFunc)ferror,
+ NULL,
+ stdin,
+ name,
+ page_size);
+
+ serd_node_free(name);
+ } else {
+ byte_source = serd_byte_source_new_filename(filename, page_size);
+ }
+
+ return byte_source;
+}