diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2009-08-04 14:52:38 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2009-08-04 14:52:38 +0200 |
commit | f1b08b8295fa46c805f223079284dd4330d329c6 (patch) | |
tree | 5de60e55ee8a48cedf0a5e9369facd7cde3d321a /src/Hooks/dumpoops.cpp | |
parent | 0015e60791dd264248f4e2805a18a3f406f22f65 (diff) | |
download | abrt-f1b08b8295fa46c805f223079284dd4330d329c6.tar.gz abrt-f1b08b8295fa46c805f223079284dd4330d329c6.tar.xz abrt-f1b08b8295fa46c805f223079284dd4330d329c6.zip |
dumpoops: hopefully fix KerneloopsScanner plugin usage
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'src/Hooks/dumpoops.cpp')
-rw-r--r-- | src/Hooks/dumpoops.cpp | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/src/Hooks/dumpoops.cpp b/src/Hooks/dumpoops.cpp index 208cb240..6c8441e6 100644 --- a/src/Hooks/dumpoops.cpp +++ b/src/Hooks/dumpoops.cpp @@ -21,6 +21,7 @@ */ #include "abrtlib.h" #include "KerneloopsScanner.h" +#include <dlfcn.h> int main(int argc, char **argv) { @@ -32,14 +33,41 @@ int main(int argc, char **argv) char *slash = strrchr(argv[0], '/'); msg_prefix = xasprintf("%s: ", slash ? slash+1 : argv[0]); - CKerneloopsScanner scanner; - int cnt = scanner.ScanSysLogFile(argv[1]); + /* Load KerneloopsScanner plugin */ +// const plugin_info_t *plugin_info; + CPlugin* (*plugin_newf)(void); + int (*scan_syslog_file)(CKerneloopsScanner *This, const char *filename); + void (*save_oops_to_debug_dump)(CKerneloopsScanner *This); + void *handle; + + errno = 0; + handle = dlopen(PLUGINS_LIB_DIR"/libKerneloopsScanner.so", RTLD_NOW); + if (!handle) + perror_msg_and_die("can't load %s", PLUGINS_LIB_DIR"/libKerneloopsScanner.so"); +#define LOADSYM(fp, name) \ +do { \ + fp = (typeof(fp)) (dlsym(handle, name)); \ + if (!fp) \ + perror_msg_and_die(PLUGINS_LIB_DIR"/libKerneloopsScanner.so has no %s", name); \ +} while (0) +// LOADSYM(plugin_info, "plugin_info"); + LOADSYM(plugin_newf, "plugin_new"); + LOADSYM(scan_syslog_file, "scan_syslog_file"); + LOADSYM(save_oops_to_debug_dump, "save_oops_to_debug_dump"); + CKerneloopsScanner* scanner = (CKerneloopsScanner*) plugin_newf(); + //scanner->Init(); + //scanner->LoadSettings(path); + + /* Use it: parse and dump the oops */ + int cnt = scan_syslog_file(scanner, argv[1]); log("found oopses: %d", cnt); if (cnt > 0) { log("dumping oopses"); - scanner.SaveOopsToDebugDump(); + save_oops_to_debug_dump(scanner); } + + /*dlclose(handle); - why bother? */ return 0; } |