diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2013-10-13 12:44:12 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2013-10-13 12:48:04 +0300 |
commit | 23f262e8c6181465347c3bb47644f9d86fcb7432 (patch) | |
tree | cdf5ac3a861395ade00b71e7b8cdd641db67032c /tests/binpack.c | |
parent | 510fc646f13b843d046323e3477edb6c1bc2258d (diff) | |
download | vmod-binlog-23f262e8c6181465347c3bb47644f9d86fcb7432.tar.gz vmod-binlog-23f262e8c6181465347c3bb47644f9d86fcb7432.tar.bz2 |
* src/Makefile.am: New convenience library libbinlog.a
* src/binlogcat.c: Use functions from libbinlog.a
* src/err.h: New file.
* src/err.c: New file.
* tests/.gitignore: Add binpack.c
* tests/Makefile.am: Build binpack.c
* tests/binpack.c: New file.
Diffstat (limited to 'tests/binpack.c')
-rw-r--r-- | tests/binpack.c | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/tests/binpack.c b/tests/binpack.c new file mode 100644 index 0000000..b54ed80 --- /dev/null +++ b/tests/binpack.c @@ -0,0 +1,86 @@ +/* This file is part of vmod-binlog + Copyright (C) 2013 Sergey Poznyakoff + + Vmod-binlog is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + Vmod-binlog is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with vmod-binlog. If not, see <http://www.gnu.org/licenses/>. +*/ +#include <unistd.h> +#include <stdlib.h> +#include <stdio.h> +#include <stdarg.h> +#include "pack.h" +#include "err.h" + +int +main(int argc, char **argv) +{ + enum { mode_packin, mode_packout } mode = mode_packin; + struct packinst *pi; + struct packenv *env; + char *end; + int c; + + setprogname(argv[0]); + + while ((c = getopt(argc, argv, "d")) != EOF) { + switch (c) { + case 'd': + mode = mode_packout; + break; + default: + exit(1); + } + } + + argc -= optind; + argv += optind; + + if (argc == 0) { + error("not enough arguments"); + exit(1); + } + + pi = packcomp(argv[0], &end); + if (!pi) { + error("out of memory"); + abort(); + } + if (*end) { + error("compile error near %s", end); + exit(1); + } + env = packenv_create(packsize(pi)); + if (!env) { + error("out of memory"); + abort(); + } + + switch (mode) { + case mode_packin: + env->argv = argv + 1; + env->argc = argc - 1; + packin(pi, env); + fwrite(env->buf_base, env->buf_size, 1, stdout); + break; + + case mode_packout: + env->fp = stdout; + fread(env->buf_base, env->buf_size, 1, stdin); + packout(pi, env); + fputc('\n', stdout); + break; + } + + packenv_free(env); + packfree(pi); +} |