aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2021-08-02 11:35:26 -0400
committerDavid Robillard <d@drobilla.net>2022-01-28 21:57:07 -0500
commit44846374476986dbff7ac6f576ec02eecc2e2902 (patch)
tree91bd02b3855654dc003eaf514a71b7c570b7af38
parent2746098ad7d9f9d81e616a25e16aeae784f438a5 (diff)
downloadserd-44846374476986dbff7ac6f576ec02eecc2e2902.tar.gz
serd-44846374476986dbff7ac6f576ec02eecc2e2902.tar.bz2
serd-44846374476986dbff7ac6f576ec02eecc2e2902.zip
Factor out opening output files
-rw-r--r--src/console.c12
-rw-r--r--src/console.h3
-rw-r--r--src/serdi.c6
3 files changed, 16 insertions, 5 deletions
diff --git a/src/console.c b/src/console.c
index fd339526..3d2c110a 100644
--- a/src/console.c
+++ b/src/console.c
@@ -79,3 +79,15 @@ serd_open_input(const char* const filename, const size_t page_size)
return byte_source;
}
+
+SerdByteSink*
+serd_open_output(const char* const filename, const size_t page_size)
+{
+ if (!filename || !strcmp(filename, "-")) {
+ serd_set_stream_utf8_mode(stdout);
+ return serd_byte_sink_new_function(
+ (SerdWriteFunc)fwrite, stdout, page_size);
+ }
+
+ return serd_byte_sink_new_filename(filename, page_size);
+}
diff --git a/src/console.h b/src/console.h
index 80c7590b..f1d11f8e 100644
--- a/src/console.h
+++ b/src/console.h
@@ -26,3 +26,6 @@ serd_print_version(const char* program);
SerdByteSource*
serd_open_input(const char* filename, size_t page_size);
+
+SerdByteSink*
+serd_open_output(const char* filename, size_t page_size);
diff --git a/src/serdi.c b/src/serdi.c
index 56762b23..b1771fec 100644
--- a/src/serdi.c
+++ b/src/serdi.c
@@ -380,12 +380,8 @@ main(int argc, char** argv)
const SerdDescribeFlags describe_flags =
no_inline ? SERD_NO_INLINE_OBJECTS : 0u;
- const size_t block_size = bulk_write ? 4096u : 1u;
SerdByteSink* const byte_sink =
- out_filename
- ? serd_byte_sink_new_filename(out_filename, block_size)
- : serd_byte_sink_new_function((SerdWriteFunc)fwrite, stdout, block_size);
-
+ serd_open_output(out_filename, bulk_write ? 4096u : 1u);
if (!byte_sink) {
perror("serdi: error opening output file");
return 1;