/*
- * Copyright (c) 2009 Nicira Networks.
+ * Copyright (c) 2009, 2010, 2013 Nicira, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
ok = false;
} else {
char *s = json_to_string(json, JSSF_SORT | (pretty ? JSSF_PRETTY : 0));
+ ovs_assert(pretty || json_serialized_length(json) == strlen(s));
puts(s);
free(s);
ok = true;
}
static bool
-parse_multiple(const char *input_file)
+parse_multiple(FILE *stream)
{
struct json_parser *parser;
char buffer[BUFSIZ];
size_t n, used;
- FILE *file;
bool ok;
- file = fopen(input_file, "r");
- if (!file) {
- ovs_fatal(errno, "Cannot open \"%s\"", input_file);
- }
-
parser = NULL;
n = used = 0;
ok = true;
- while (used < n || refill(file, buffer, sizeof buffer, &n, &used)) {
+ while (used < n || refill(stream, buffer, sizeof buffer, &n, &used)) {
if (!parser && isspace((unsigned char) buffer[used])) {
/* Skip white space. */
used++;
parser = json_parser_create(0);
}
- used = n - json_parser_feed(parser, &buffer[used], n - used);
+ used += json_parser_feed(parser, &buffer[used], n - used);
if (used < n) {
if (!print_and_free_json(json_parser_finish(parser))) {
ok = false;
main(int argc, char *argv[])
{
const char *input_file;
+ FILE *stream;
bool ok;
set_program_name(argv[0]);
}
input_file = argv[optind];
- if (!strcmp(input_file, "-")) {
- input_file = "/dev/stdin";
+ stream = !strcmp(input_file, "-") ? stdin : fopen(input_file, "r");
+ if (!stream) {
+ ovs_fatal(errno, "Cannot open \"%s\"", input_file);
}
if (multiple) {
- ok = parse_multiple(input_file);
+ ok = parse_multiple(stream);
} else {
- ok = print_and_free_json(json_from_file(input_file));
+ ok = print_and_free_json(json_from_stream(stream));
}
+ fclose(stream);
+
return !ok;
}