diff options
Diffstat (limited to 'contrib/libucl/utils')
-rw-r--r-- | contrib/libucl/utils/CMakeLists.txt | 12 | ||||
-rw-r--r-- | contrib/libucl/utils/objdump.c | 17 | ||||
-rw-r--r-- | contrib/libucl/utils/ucl-tool.c | 100 |
3 files changed, 73 insertions, 56 deletions
diff --git a/contrib/libucl/utils/CMakeLists.txt b/contrib/libucl/utils/CMakeLists.txt new file mode 100644 index 000000000000..4de95fd7b4b0 --- /dev/null +++ b/contrib/libucl/utils/CMakeLists.txt @@ -0,0 +1,12 @@ + +PROJECT(libucl-utils C) + +FUNCTION(MAKE_UTIL UTIL_NAME UTIL_SRCS) + ADD_EXECUTABLE(${UTIL_NAME} ${UTIL_SRCS}) + TARGET_LINK_LIBRARIES(${UTIL_NAME} ucl) + INSTALL(TARGETS ${UTIL_NAME} DESTINATION bin) +ENDFUNCTION() + +MAKE_UTIL(ucl_chargen chargen.c) +MAKE_UTIL(ucl_objdump objdump.c) +MAKE_UTIL(ucl_tool ucl-tool.c) diff --git a/contrib/libucl/utils/objdump.c b/contrib/libucl/utils/objdump.c index 3c60c5569231..416eca7c87e0 100644 --- a/contrib/libucl/utils/objdump.c +++ b/contrib/libucl/utils/objdump.c @@ -22,8 +22,11 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include <stdio.h> -#include <errno.h> +#if defined(_MSC_VER) + #include <BaseTsd.h> + + typedef SSIZE_T ssize_t; +#endif #include "ucl.h" @@ -101,8 +104,8 @@ main(int argc, char **argv) const char *fn = NULL; unsigned char *inbuf; struct ucl_parser *parser; - int k, ret = 0, r = 0; - ssize_t bufsize; + int k, ret = 0; + ssize_t bufsize, r = 0; ucl_object_t *obj = NULL; const ucl_object_t *par; FILE *in; @@ -114,7 +117,7 @@ main(int argc, char **argv) if (fn != NULL) { in = fopen (fn, "r"); if (in == NULL) { - exit (-errno); + exit (EXIT_FAILURE); } } else { @@ -146,14 +149,14 @@ main(int argc, char **argv) ucl_parser_add_chunk (parser, inbuf, r); fclose (in); if (ucl_parser_get_error(parser)) { - printf ("Error occured: %s\n", ucl_parser_get_error(parser)); + printf ("Error occurred: %s\n", ucl_parser_get_error(parser)); ret = 1; goto end; } obj = ucl_parser_get_object (parser); if (ucl_parser_get_error (parser)) { - printf ("Error occured: %s\n", ucl_parser_get_error(parser)); + printf ("Error occurred: %s\n", ucl_parser_get_error(parser)); ret = 1; goto end; } diff --git a/contrib/libucl/utils/ucl-tool.c b/contrib/libucl/utils/ucl-tool.c index feea9c2070d5..9b807d35c092 100644 --- a/contrib/libucl/utils/ucl-tool.c +++ b/contrib/libucl/utils/ucl-tool.c @@ -20,21 +20,8 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include <stdio.h> -#include <getopt.h> -#include <stdlib.h> - #include "ucl.h" -static struct option opts[] = { - {"help", no_argument, NULL, 'h'}, - {"in", required_argument, NULL, 'i' }, - {"out", required_argument, NULL, 'o' }, - {"schema", required_argument, NULL, 's'}, - {"format", required_argument, NULL, 'f'}, - {0, 0, 0, 0} -}; - void usage(const char *name, FILE *out) { fprintf(out, "Usage: %s [--help] [-i|--in file] [-o|--out file]\n", name); fprintf(out, " [-s|--schema file] [-f|--format format]\n\n"); @@ -49,64 +36,75 @@ void usage(const char *name, FILE *out) { } int main(int argc, char **argv) { + int i; char ch; FILE *in = stdin, *out = stdout; - const char *schema = NULL; + const char *schema = NULL, *parm, *val; unsigned char *buf = NULL; size_t size = 0, r = 0; struct ucl_parser *parser = NULL; ucl_object_t *obj = NULL; ucl_emitter_t emitter = UCL_EMIT_CONFIG; - while((ch = getopt_long(argc, argv, "hi:o:s:f:", opts, NULL)) != -1) { - switch (ch) { - case 'i': - in = fopen(optarg, "r"); + for (i = 1; i < argc; ++i) { + parm = argv[i]; + val = ((i + 1) < argc) ? argv[++i] : NULL; + + if ((strcmp(parm, "--help") == 0) || (strcmp(parm, "-h") == 0)) { + usage(argv[0], stdout); + exit(0); + + } else if ((strcmp(parm, "--in") == 0) || (strcmp(parm, "-i") == 0)) { + if (!val) + goto err_val; + + in = fopen(val, "r"); if (in == NULL) { perror("fopen on input file"); exit(EXIT_FAILURE); } - break; - case 'o': - out = fopen(optarg, "w"); + } else if ((strcmp(parm, "--out") == 0) || (strcmp(parm, "-o") == 0)) { + if (!val) + goto err_val; + + out = fopen(val, "w"); if (out == NULL) { perror("fopen on output file"); exit(EXIT_FAILURE); } - break; - case 's': - schema = optarg; - break; - case 'f': - if (strcmp(optarg, "ucl") == 0) { - emitter = UCL_EMIT_CONFIG; - } else if (strcmp(optarg, "json") == 0) { - emitter = UCL_EMIT_JSON; - } else if (strcmp(optarg, "yaml") == 0) { - emitter = UCL_EMIT_YAML; - } else if (strcmp(optarg, "compact_json") == 0) { - emitter = UCL_EMIT_JSON_COMPACT; - } else if (strcmp(optarg, "msgpack") == 0) { - emitter = UCL_EMIT_MSGPACK; - } else { - fprintf(stderr, "Unknown output format: %s\n", optarg); - exit(EXIT_FAILURE); - } - break; - case 'h': - usage(argv[0], stdout); - exit(0); - default: + } else if ((strcmp(parm, "--schema") == 0) || (strcmp(parm, "-s") == 0)) { + if (!val) + goto err_val; + schema = val; + + } else if ((strcmp(parm, "--format") == 0) || (strcmp(parm, "-f") == 0)) { + if (!val) + goto err_val; + + if (strcmp(val, "ucl") == 0) { + emitter = UCL_EMIT_CONFIG; + } else if (strcmp(val, "json") == 0) { + emitter = UCL_EMIT_JSON; + } else if (strcmp(val, "yaml") == 0) { + emitter = UCL_EMIT_YAML; + } else if (strcmp(val, "compact_json") == 0) { + emitter = UCL_EMIT_JSON_COMPACT; + } else if (strcmp(val, "msgpack") == 0) { + emitter = UCL_EMIT_MSGPACK; + } else { + fprintf(stderr, "Unknown output format: %s\n", val); + exit(EXIT_FAILURE); + } + } else { usage(argv[0], stderr); exit(EXIT_FAILURE); - break; } } parser = ucl_parser_new(0); buf = malloc(BUFSIZ); size = BUFSIZ; - while(!feof(in) && !ferror(in)) { + while (!feof(in) && !ferror(in)) { if (r == size) { buf = realloc(buf, size*2); size *= 2; @@ -155,8 +153,7 @@ int main(int argc, char **argv) { if (emitter != UCL_EMIT_MSGPACK) { fprintf(out, "%s\n", ucl_object_emit(obj, emitter)); - } - else { + } else { size_t len; unsigned char *res; @@ -165,4 +162,9 @@ int main(int argc, char **argv) { } return 0; + +err_val: + fprintf(stderr, "Parameter %s is missing mandatory value\n", parm); + usage(argv[0], stderr); + exit(EXIT_FAILURE); } |