[pypy-commit] creflect default: A tool in C to dump the reflection information stored in a library
arigo
noreply at buildbot.pypy.org
Fri Nov 28 17:48:34 CET 2014
Author: Armin Rigo <arigo at tunes.org>
Branch:
Changeset: r102:538bc1da9a17
Date: 2014-11-28 17:48 +0100
http://bitbucket.org/cffi/creflect/changeset/538bc1da9a17/
Log: A tool in C to dump the reflection information stored in a library
compiled from the output of "creflect".
diff --git a/creflect/src/creflect_check.c b/creflect/src/creflect_check.c
new file mode 100644
--- /dev/null
+++ b/creflect/src/creflect_check.c
@@ -0,0 +1,54 @@
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <dlfcn.h>
+#include <unistd.h>
+
+#include "creflect.h"
+#include "creflect_print.h"
+
+
+void creflect_dump_information(const char *filename)
+{
+ char filename_ex[PATH_MAX];
+
+ if (strchr(filename, '/') == NULL)
+ strcpy(filename_ex, "./");
+ else
+ strcpy(filename_ex, "");
+ strncat(filename_ex, filename, sizeof(filename_ex) - 3);
+
+ void *lib = dlopen(filename_ex, RTLD_LAZY);
+ if (lib == NULL)
+ goto err;
+
+ void (*crxmain)(crx_builder_t *);
+ crxmain = (void(*)(crx_builder_t *))dlsym(lib, "_creflect_main");
+ if (crxmain == NULL)
+ goto err;
+
+ crxmain(&maincb);
+
+ if (dlclose(lib) != 0) {
+ lib = NULL;
+ goto err;
+ }
+ return;
+
+ err:
+ fprintf(stderr, "error: %s\n", dlerror());
+ if (lib)
+ dlclose(lib);
+}
+
+int main(int argc, char *argv[])
+{
+ if (argc != 2) {
+ fprintf(stderr, "One argument needed: the name of the library file"
+ " out of which the creflect information is dumped.\n");
+ return 2;
+ }
+ creflect_dump_information(argv[1]);
+ return 0;
+}
More information about the pypy-commit
mailing list