summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2009-08-04 14:52:38 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2009-08-04 14:52:38 +0200
commitf1b08b8295fa46c805f223079284dd4330d329c6 (patch)
tree5de60e55ee8a48cedf0a5e9369facd7cde3d321a
parent0015e60791dd264248f4e2805a18a3f406f22f65 (diff)
downloadabrt-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.cpp15
-rw-r--r--src/Hooks/Makefile.am4
-rw-r--r--src/Hooks/dumpoops.cpp34
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;
}