From b84209db97e9c1615d50d0a6e10ef8dc6484a4cc Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Mon, 24 Jan 2011 21:41:51 +1030 Subject: [PATCH] lca2011: simple cdump tool to generate cdump header and body. --- ccan/oserver/tools/Makefile | 11 ++++ ccan/oserver/tools/make-cdump_oserver_files.c | 65 +++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 ccan/oserver/tools/Makefile create mode 100644 ccan/oserver/tools/make-cdump_oserver_files.c diff --git a/ccan/oserver/tools/Makefile b/ccan/oserver/tools/Makefile new file mode 100644 index 0000000..495fe4b --- /dev/null +++ b/ccan/oserver/tools/Makefile @@ -0,0 +1,11 @@ +CFLAGS=-g -Wall -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wmissing-declarations -I../../.. + +default: ../oserver_cdump.c + +make-cdump_oserver_files: make-cdump_oserver_files.o ../../grab_file.o ../../cdump.o ../../noerr.o ../../talloc.o ../../tevent.o + +../../%.o: + make -C../../.. ccan/$*.o + +../oserver_cdump.c: ../oserver_types.h make-cdump_oserver_files + ./make-cdump_oserver_files ../oserver_cdump.h ../oserver_cdump.c ../oserver_types.h diff --git a/ccan/oserver/tools/make-cdump_oserver_files.c b/ccan/oserver/tools/make-cdump_oserver_files.c new file mode 100644 index 0000000..0694566 --- /dev/null +++ b/ccan/oserver/tools/make-cdump_oserver_files.c @@ -0,0 +1,65 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + unsigned int i; + int declfd, deffd; + char *defs, *decls; + + if (argc < 4) + errx(1, "Usage: %s ...", + argv[0]); + + declfd = open(argv[1], O_WRONLY|O_CREAT|O_TRUNC, 0600); + if (declfd < 0) + err(1, "Opening %s", argv[1]); + deffd = open(argv[2], O_WRONLY|O_CREAT|O_TRUNC, 0600); + if (deffd < 0) + err(1, "Opening %s", argv[2]); + + decls = (char *)"#ifndef OSERVER_CDUMP_DECLS_H\n" + "#define OSERVER_CDUMP_DECLS_H\n" + "/* Autogenerated by dump_headers. */\n" + "#include \n"; + if (write(declfd, decls, strlen(decls)) != strlen(decls)) + err(1, "Writing to %s", argv[1]); + + defs = (char *)"/* Definitions: autogenerated by dump_headers */\n" + "#define CDUMP_FAKE 1\n" + "#include \n" + "#include \n" + "#include \n"; + if (write(deffd, defs, strlen(defs)) != strlen(defs)) + err(1, "Writing to %s", argv[2]); + + for (i = 3; i < argc; i++) { + char *errmsg, *code; + + code = grab_file(NULL, argv[i], NULL); + if (!code) + err(1, "Reading %s", argv[i]); + errmsg = cdump_parse(code, code, &decls, &defs); + if (errmsg) + errx(1, "Parsing %s: %s", argv[1], errmsg); + if (write(declfd, decls, strlen(decls)) != strlen(decls)) + err(1, "Writing to %s", argv[1]); + if (write(deffd, defs, strlen(defs)) != strlen(defs)) + err(1, "Writing to %s", argv[2]); + talloc_free(code); + } + + decls = (char *)"#endif /* OSERVER_CDUMP_DECLS_H */\n"; + if (write(declfd, decls, strlen(decls)) != strlen(decls)) + err(1, "Writing to %s", argv[1]); + close(declfd); + close(deffd); + return 0; +} -- 2.39.2