aboutsummaryrefslogtreecommitdiffstats
path: root/src/serdi.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2018-05-12 20:39:23 +0200
committerDavid Robillard <d@drobilla.net>2018-11-25 22:12:47 +0100
commit24d7ed6bcfdc340874f9cdf7eb5a056567668a08 (patch)
tree3fc54001b48ba2bee371561ae1b73290b3688548 /src/serdi.c
parentba67dcd8288e73beb4aa571541b73a6b1ea143af (diff)
downloadserd-24d7ed6bcfdc340874f9cdf7eb5a056567668a08.tar.gz
serd-24d7ed6bcfdc340874f9cdf7eb5a056567668a08.tar.bz2
serd-24d7ed6bcfdc340874f9cdf7eb5a056567668a08.zip
Use fixed size stack
Diffstat (limited to 'src/serdi.c')
-rw-r--r--src/serdi.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/serdi.c b/src/serdi.c
index cdf96c69..63a0e842 100644
--- a/src/serdi.c
+++ b/src/serdi.c
@@ -20,9 +20,11 @@
#include "serd/serd.h"
+#include <limits.h>
#include <stdbool.h>
+#include <stdint.h>
#include <stdio.h>
-#include <string.h>
+#include <stdlib.h>
#define SERDI_ERROR(msg) fprintf(stderr, "serdi: " msg);
#define SERDI_ERRORF(fmt, ...) fprintf(stderr, "serdi: " fmt, __VA_ARGS__);
@@ -93,6 +95,7 @@ print_usage(const char* name, bool error)
fprintf(os, " -f Keep full URIs in input (don't qualify).\n");
fprintf(os, " -h Display this help and exit.\n");
fprintf(os, " -i SYNTAX Input syntax: turtle/ntriples/trig/nquads.\n");
+ fprintf(os, " -k BYTES Parser stack size.\n");
fprintf(os, " -l Lax (non-strict) parsing.\n");
fprintf(os, " -o SYNTAX Output syntax: turtle/ntriples/nquads.\n");
fprintf(os, " -p PREFIX Add PREFIX to blank node IDs.\n");
@@ -133,6 +136,7 @@ main(int argc, char** argv)
bool full_uris = false;
bool lax = false;
bool quiet = false;
+ long stack_size = 4194304;
const char* add_prefix = NULL;
const char* chop_prefix = NULL;
const char* root_uri = NULL;
@@ -167,6 +171,15 @@ main(int argc, char** argv)
} else if (!(input_syntax = get_syntax(argv[a]))) {
return print_usage(argv[0], true);
}
+ } else if (argv[a][1] == 'k') {
+ if (++a == argc) {
+ return missing_arg(argv[0], 'k');
+ }
+ stack_size = strtol(argv[a], NULL, 10);
+ if (stack_size <= 0 || stack_size == LONG_MAX) {
+ SERDI_ERRORF("stack size `%ld' out of range\n", stack_size);
+ return 1;
+ }
} else if (argv[a][1] == 'o') {
if (++a == argc) {
return missing_arg(argv[0], 'o');
@@ -250,8 +263,8 @@ main(int argc, char** argv)
(SerdWriteFunc)fwrite,
out_fd);
- SerdReader* reader =
- serd_reader_new(world, input_syntax, serd_writer_get_sink(writer));
+ SerdReader* reader = serd_reader_new(
+ world, input_syntax, serd_writer_get_sink(writer), stack_size);
serd_reader_set_strict(reader, !lax);
if (quiet) {