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 | |
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>
-rw-r--r-- | lib/Plugins/KerneloopsScanner.cpp | 15 | ||||
-rw-r--r-- | src/Hooks/Makefile.am | 4 | ||||
-rw-r--r-- | src/Hooks/dumpoops.cpp | 34 |
3 files changed, 49 insertions, 4 deletions
diff --git a/lib/Plugins/KerneloopsScanner.cpp b/lib/Plugins/KerneloopsScanner.cpp index 361b44cd..00d5803b 100644 --- a/lib/Plugins/KerneloopsScanner.cpp +++ b/lib/Plugins/KerneloopsScanner.cpp @@ -173,3 +173,18 @@ PLUGIN_INFO(ACTION, "anton@redhat.com", "http://people.redhat.com/aarapov", ""); + +/* for dumpoops tool */ +extern "C" { + +int scan_syslog_file(CKerneloopsScanner *This, const char *filename) +{ + return This->ScanSysLogFile(filename); +} + +void save_oops_to_debug_dump(CKerneloopsScanner *This) +{ + This->SaveOopsToDebugDump(); +} + +} diff --git a/src/Hooks/Makefile.am b/src/Hooks/Makefile.am index 47d751ae..b2e90eb4 100644 --- a/src/Hooks/Makefile.am +++ b/src/Hooks/Makefile.am @@ -13,13 +13,15 @@ hookCCpp_CPPFLAGS = -I$(srcdir)/../../inc \ dumpoops_SOURCES = dumpoops.cpp dumpoops_LDADD = ../../lib/Utils/libABRTUtils.la \ ../../lib/MiddleWare/libABRTMiddleWare.la \ - ../../lib/Plugins/libKerneloopsScanner.la \ ../../lib/CommLayer/libABRTCommLayer.la dumpoops_CPPFLAGS = -I$(srcdir)/../../inc \ -I$(srcdir)/../../lib/Utils \ -I$(srcdir)/../../lib/Plugins \ -I$(srcdir)/../../lib/MiddleWare \ -DDEBUG_DUMPS_DIR=\"$(DEBUG_DUMPS_DIR)\" \ + -DPLUGINS_LIB_DIR=\"$(PLUGINS_LIB_DIR)\" \ + -DPLUGINS_CONF_DIR=\"$(PLUGINS_CONF_DIR)\" \ + -DCONF_DIR=\"$(CONF_DIR)\" \ -DVAR_RUN=\"$(VAR_RUN)\" python_PYTHON = sitecustomize.py abrt_exception_handler.py 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; } |