|
Jakub Filak |
165458d |
From 865f7b88b391f2fbd71baa1aa3d6320455d4f519 Mon Sep 17 00:00:00 2001
|
|
Jakub Filak |
165458d |
From: Denys Vlasenko <dvlasenk@redhat.com>
|
|
Jakub Filak |
165458d |
Date: Fri, 26 Apr 2013 17:33:17 +0200
|
|
Jakub Filak |
165458d |
Subject: [ABRT PATCH 2/5] abrt-uefioops: new service
|
|
Jakub Filak |
165458d |
|
|
Jakub Filak |
165458d |
This service, once per boot, scans /sys/fs/pstore/* and crates
|
|
Jakub Filak |
165458d |
oops problem dirs from this data.
|
|
Jakub Filak |
165458d |
|
|
Jakub Filak |
165458d |
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
|
|
Jakub Filak |
165458d |
Signed-off-by: Martin Milata <mmilata@redhat.com>
|
|
Jakub Filak |
165458d |
---
|
|
Jakub Filak |
165458d |
Makefile.am | 6 +-
|
|
Jakub Filak |
165458d |
init-scripts/abrt-uefioops | 79 ++++++++++++++++++++
|
|
Jakub Filak |
165458d |
init-scripts/abrt-uefioops.service | 12 +++
|
|
Jakub Filak |
165458d |
po/POTFILES.in | 4 +-
|
|
Jakub Filak |
165458d |
src/hooks/Makefile.am | 37 +++++++++-
|
|
Jakub Filak |
165458d |
src/hooks/abrt-harvest-uefioops.in | 24 ++++++
|
|
Jakub Filak |
165458d |
src/hooks/abrt-merge-uefioops.c | 148 +++++++++++++++++++++++++++++++++++++
|
|
Jakub Filak |
165458d |
7 files changed, 304 insertions(+), 6 deletions(-)
|
|
Jakub Filak |
165458d |
create mode 100644 init-scripts/abrt-uefioops
|
|
Jakub Filak |
165458d |
create mode 100644 init-scripts/abrt-uefioops.service
|
|
Jakub Filak |
165458d |
create mode 100644 src/hooks/abrt-harvest-uefioops.in
|
|
Jakub Filak |
165458d |
create mode 100644 src/hooks/abrt-merge-uefioops.c
|
|
Jakub Filak |
165458d |
|
|
Jakub Filak |
165458d |
diff --git a/Makefile.am b/Makefile.am
|
|
Jakub Filak |
165458d |
index cc820ee..0eecc60 100644
|
|
Jakub Filak |
165458d |
--- a/Makefile.am
|
|
Jakub Filak |
165458d |
+++ b/Makefile.am
|
|
Jakub Filak |
165458d |
@@ -34,14 +34,16 @@ if HAVE_SYSTEMD
|
|
Jakub Filak |
165458d |
init-scripts/abrt-ccpp.service \
|
|
Jakub Filak |
165458d |
init-scripts/abrt-oops.service \
|
|
Jakub Filak |
165458d |
init-scripts/abrt-xorg.service \
|
|
Jakub Filak |
165458d |
- init-scripts/abrt-vmcore.service
|
|
Jakub Filak |
165458d |
+ init-scripts/abrt-vmcore.service \
|
|
Jakub Filak |
165458d |
+ init-scripts/abrt-uefioops.service
|
|
Jakub Filak |
165458d |
else
|
|
Jakub Filak |
165458d |
sysv_initdir = $(sysconfdir)/rc.d/init.d/
|
|
Jakub Filak |
165458d |
sysv_init_SCRIPTS = init-scripts/abrtd \
|
|
Jakub Filak |
165458d |
init-scripts/abrt-ccpp \
|
|
Jakub Filak |
165458d |
init-scripts/abrt-oops \
|
|
Jakub Filak |
165458d |
init-scripts/abrt-xorg \
|
|
Jakub Filak |
165458d |
- init-scripts/abrt-vmcore
|
|
Jakub Filak |
165458d |
+ init-scripts/abrt-vmcore \
|
|
Jakub Filak |
165458d |
+ init-scripts/abrt-uefioops
|
|
Jakub Filak |
165458d |
endif
|
|
Jakub Filak |
165458d |
|
|
Jakub Filak |
165458d |
RPM_DIRS = --define "_sourcedir `pwd`" \
|
|
Jakub Filak |
165458d |
diff --git a/init-scripts/abrt-uefioops b/init-scripts/abrt-uefioops
|
|
Jakub Filak |
165458d |
new file mode 100644
|
|
Jakub Filak |
165458d |
index 0000000..663e24a
|
|
Jakub Filak |
165458d |
--- /dev/null
|
|
Jakub Filak |
165458d |
+++ b/init-scripts/abrt-uefioops
|
|
Jakub Filak |
165458d |
@@ -0,0 +1,79 @@
|
|
Jakub Filak |
165458d |
+#!/bin/bash
|
|
Jakub Filak |
165458d |
+# Harvest UEFI-saved oopses for ABRT
|
|
Jakub Filak |
165458d |
+#
|
|
Jakub Filak |
165458d |
+# chkconfig: 35 82 16
|
|
Jakub Filak |
165458d |
+# description: Collects UEFI-saved oopses for ABRT
|
|
Jakub Filak |
165458d |
+### BEGIN INIT INFO
|
|
Jakub Filak |
165458d |
+# Provides: abrt-uefioops
|
|
Jakub Filak |
165458d |
+# Required-Start: $abrtd
|
|
Jakub Filak |
165458d |
+# Default-Stop: 0 1 2 6
|
|
Jakub Filak |
165458d |
+# Default-Start: 3 5
|
|
Jakub Filak |
165458d |
+# Short-Description: Collects UEFI-saved oopses for ABRT
|
|
Jakub Filak |
165458d |
+# Description: Collects UEFI-saved oopses for ABRT
|
|
Jakub Filak |
165458d |
+### END INIT INFO
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+# Source function library.
|
|
Jakub Filak |
165458d |
+. /etc/rc.d/init.d/functions
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+LOCK="/var/lock/subsys/abrt-uefioops"
|
|
Jakub Filak |
165458d |
+HARVEST_CMD="/usr/sbin/abrt-harvest-uefioops"
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+RETVAL=0
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+check() {
|
|
Jakub Filak |
165458d |
+ # Check that we're a privileged user
|
|
Jakub Filak |
165458d |
+ [ "`id -u`" = 0 ] || exit 4
|
|
Jakub Filak |
165458d |
+}
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+start() {
|
|
Jakub Filak |
165458d |
+ check
|
|
Jakub Filak |
165458d |
+ "$HARVEST_CMD"
|
|
Jakub Filak |
165458d |
+ RETVAL=$?
|
|
Jakub Filak |
165458d |
+ [ $RETVAL -eq 0 ] && touch -- "$LOCK"
|
|
Jakub Filak |
165458d |
+ return $RETVAL
|
|
Jakub Filak |
165458d |
+}
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+stop() {
|
|
Jakub Filak |
165458d |
+ check
|
|
Jakub Filak |
165458d |
+ rm -f -- "$LOCK"
|
|
Jakub Filak |
165458d |
+ return 0
|
|
Jakub Filak |
165458d |
+}
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+restart() {
|
|
Jakub Filak |
165458d |
+ stop
|
|
Jakub Filak |
165458d |
+ start
|
|
Jakub Filak |
165458d |
+}
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+reload() {
|
|
Jakub Filak |
165458d |
+ restart
|
|
Jakub Filak |
165458d |
+}
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+case "$1" in
|
|
Jakub Filak |
165458d |
+start)
|
|
Jakub Filak |
165458d |
+ start
|
|
Jakub Filak |
165458d |
+ ;;
|
|
Jakub Filak |
165458d |
+stop)
|
|
Jakub Filak |
165458d |
+ stop
|
|
Jakub Filak |
165458d |
+ ;;
|
|
Jakub Filak |
165458d |
+reload)
|
|
Jakub Filak |
165458d |
+ reload
|
|
Jakub Filak |
165458d |
+ ;;
|
|
Jakub Filak |
165458d |
+force-reload)
|
|
Jakub Filak |
165458d |
+ echo "$0: Unimplemented feature."
|
|
Jakub Filak |
165458d |
+ RETVAL=3
|
|
Jakub Filak |
165458d |
+ ;;
|
|
Jakub Filak |
165458d |
+restart)
|
|
Jakub Filak |
165458d |
+ restart
|
|
Jakub Filak |
165458d |
+ ;;
|
|
Jakub Filak |
165458d |
+condrestart)
|
|
Jakub Filak |
165458d |
+ test -f "$LOCK" && restart
|
|
Jakub Filak |
165458d |
+ ;;
|
|
Jakub Filak |
165458d |
+status)
|
|
Jakub Filak |
165458d |
+ test -f "$LOCK" && RETVAL=0 || RETVAL=3
|
|
Jakub Filak |
165458d |
+ ;;
|
|
Jakub Filak |
165458d |
+*)
|
|
Jakub Filak |
165458d |
+ echo $"Usage: $0 {start|stop|status|restart|condrestart|reload|force-reload}"
|
|
Jakub Filak |
165458d |
+ RETVAL=2
|
|
Jakub Filak |
165458d |
+esac
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+exit $RETVAL
|
|
Jakub Filak |
165458d |
diff --git a/init-scripts/abrt-uefioops.service b/init-scripts/abrt-uefioops.service
|
|
Jakub Filak |
165458d |
new file mode 100644
|
|
Jakub Filak |
165458d |
index 0000000..cee4296
|
|
Jakub Filak |
165458d |
--- /dev/null
|
|
Jakub Filak |
165458d |
+++ b/init-scripts/abrt-uefioops.service
|
|
Jakub Filak |
165458d |
@@ -0,0 +1,12 @@
|
|
Jakub Filak |
165458d |
+[Unit]
|
|
Jakub Filak |
165458d |
+Description=Collect UEFI-saved oopses for ABRT
|
|
Jakub Filak |
165458d |
+After=abrtd.service
|
|
Jakub Filak |
165458d |
+Requisite=abrtd.service
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+[Service]
|
|
Jakub Filak |
165458d |
+Type=oneshot
|
|
Jakub Filak |
165458d |
+ExecStart=/usr/sbin/abrt-harvest-uefioops
|
|
Jakub Filak |
165458d |
+RemainAfterExit=yes
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+[Install]
|
|
Jakub Filak |
165458d |
+WantedBy=multi-user.target
|
|
Jakub Filak |
165458d |
diff --git a/po/POTFILES.in b/po/POTFILES.in
|
|
Jakub Filak |
165458d |
index b057a3d..26b595e 100644
|
|
Jakub Filak |
165458d |
--- a/po/POTFILES.in
|
|
Jakub Filak |
165458d |
+++ b/po/POTFILES.in
|
|
Jakub Filak |
165458d |
@@ -35,13 +35,15 @@ src/plugins/collect_xsession_errors.xml.in
|
|
Jakub Filak |
165458d |
src/plugins/https-utils.c
|
|
Jakub Filak |
165458d |
src/plugins/bodhi.c
|
|
Jakub Filak |
165458d |
|
|
Jakub Filak |
165458d |
+src/hooks/abrt-merge-uefioops.c
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
src/cli/abrt-cli.c
|
|
Jakub Filak |
165458d |
src/cli/list.c
|
|
Jakub Filak |
165458d |
src/cli/status.c
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
src/plugins/analyze_CCpp.xml.in
|
|
Jakub Filak |
165458d |
src/plugins/analyze_VMcore.xml.in
|
|
Jakub Filak |
165458d |
src/plugins/collect_GConf.xml.in
|
|
Jakub Filak |
165458d |
src/plugins/collect_vimrc_system.xml.in
|
|
Jakub Filak |
165458d |
src/plugins/collect_vimrc_user.xml.in
|
|
Jakub Filak |
165458d |
src/plugins/post_report.xml.in
|
|
Jakub Filak |
165458d |
-
|
|
Jakub Filak |
165458d |
diff --git a/src/hooks/Makefile.am b/src/hooks/Makefile.am
|
|
Jakub Filak |
165458d |
index 9f65d62..de97a88 100644
|
|
Jakub Filak |
165458d |
--- a/src/hooks/Makefile.am
|
|
Jakub Filak |
165458d |
+++ b/src/hooks/Makefile.am
|
|
Jakub Filak |
165458d |
@@ -12,7 +12,11 @@ dist_pluginsconf_DATA = \
|
|
Jakub Filak |
165458d |
|
|
Jakub Filak |
165458d |
sbin_SCRIPTS = \
|
|
Jakub Filak |
165458d |
abrt-install-ccpp-hook \
|
|
Jakub Filak |
165458d |
- abrt-harvest-vmcore
|
|
Jakub Filak |
165458d |
+ abrt-harvest-vmcore \
|
|
Jakub Filak |
165458d |
+ abrt-harvest-uefioops
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+bin_PROGRAMS = \
|
|
Jakub Filak |
165458d |
+ abrt-merge-uefioops
|
|
Jakub Filak |
165458d |
|
|
Jakub Filak |
165458d |
libexec_PROGRAMS = abrt-hook-ccpp
|
|
Jakub Filak |
165458d |
|
|
Jakub Filak |
165458d |
@@ -32,10 +36,32 @@ abrt_hook_ccpp_LDADD = \
|
|
Jakub Filak |
165458d |
../lib/libabrt.la \
|
|
Jakub Filak |
165458d |
$(LIBREPORT_LIBS)
|
|
Jakub Filak |
165458d |
|
|
Jakub Filak |
165458d |
-pyhook_PYTHON = abrt_exception_handler.py abrt.pth
|
|
Jakub Filak |
165458d |
+# abrt-merge-uefioops
|
|
Jakub Filak |
165458d |
+abrt_merge_uefioops_SOURCES = \
|
|
Jakub Filak |
165458d |
+ abrt-merge-uefioops.c
|
|
Jakub Filak |
165458d |
+abrt_merge_uefioops_CPPFLAGS = \
|
|
Jakub Filak |
165458d |
+ -I$(srcdir)/../include \
|
|
Jakub Filak |
165458d |
+ -I$(srcdir)/../lib \
|
|
Jakub Filak |
165458d |
+ -DVAR_RUN=\"$(VAR_RUN)\" \
|
|
Jakub Filak |
165458d |
+ -DPLUGINS_CONF_DIR=\"$(PLUGINS_CONF_DIR)\" \
|
|
Jakub Filak |
165458d |
+ -DDEFAULT_DUMP_DIR_MODE=$(DEFAULT_DUMP_DIR_MODE) \
|
|
Jakub Filak |
165458d |
+ $(GLIB_CFLAGS) \
|
|
Jakub Filak |
165458d |
+ $(LIBREPORT_CFLAGS) \
|
|
Jakub Filak |
165458d |
+ -D_GNU_SOURCE
|
|
Jakub Filak |
165458d |
+abrt_merge_uefioops_LDADD = \
|
|
Jakub Filak |
165458d |
+ ../lib/libabrt.la \
|
|
Jakub Filak |
165458d |
+ $(LIBREPORT_LIBS)
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+pyhook_PYTHON = \
|
|
Jakub Filak |
165458d |
+ abrt_exception_handler.py \
|
|
Jakub Filak |
165458d |
+ abrt.pth
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
EXTRA_DIST = abrt_exception_handler.py.in \
|
|
Jakub Filak |
165458d |
abrt-install-ccpp-hook.in \
|
|
Jakub Filak |
165458d |
- abrt-harvest-vmcore.in
|
|
Jakub Filak |
165458d |
+ abrt-harvest-vmcore.in \
|
|
Jakub Filak |
165458d |
+ abrt-harvest-uefioops.in
|
|
Jakub Filak |
165458d |
|
|
Jakub Filak |
165458d |
CLEANFILES := $(notdir $(wildcard *~)) $(notdir $(wildcard *\#)) $(notdir $(wildcard \.\#*)) $(notdir $(wildcard *.pyc)) $(man1_MANS)
|
|
Jakub Filak |
165458d |
|
|
Jakub Filak |
165458d |
@@ -63,3 +89,8 @@ abrt-harvest-vmcore: abrt-harvest-vmcore.in
|
|
Jakub Filak |
165458d |
sed -e s,\@CONF_DIR\@,\$(CONF_DIR)\,g \
|
|
Jakub Filak |
165458d |
-e s,\@DEFAULT_DUMP_LOCATION\@,$(DEFAULT_DUMP_LOCATION),g \
|
|
Jakub Filak |
165458d |
$< >$@
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+abrt-harvest-uefioops: abrt-harvest-uefioops.in
|
|
Jakub Filak |
165458d |
+ sed -e s,\@CONF_DIR\@,\$(CONF_DIR)\,g \
|
|
Jakub Filak |
165458d |
+ -e s,\@DEFAULT_DUMP_LOCATION\@,$(DEFAULT_DUMP_LOCATION),g \
|
|
Jakub Filak |
165458d |
+ $< >$@
|
|
Jakub Filak |
165458d |
diff --git a/src/hooks/abrt-harvest-uefioops.in b/src/hooks/abrt-harvest-uefioops.in
|
|
Jakub Filak |
165458d |
new file mode 100644
|
|
Jakub Filak |
165458d |
index 0000000..9f63256
|
|
Jakub Filak |
165458d |
--- /dev/null
|
|
Jakub Filak |
165458d |
+++ b/src/hooks/abrt-harvest-uefioops.in
|
|
Jakub Filak |
165458d |
@@ -0,0 +1,24 @@
|
|
Jakub Filak |
165458d |
+#!/bin/sh
|
|
Jakub Filak |
165458d |
+#
|
|
Jakub Filak |
165458d |
+# This script is meant to be run once at system startup after abrtd is up
|
|
Jakub Filak |
165458d |
+# and running. It scans /sys/fs/pstore/*, reconstructs oops text(s)
|
|
Jakub Filak |
165458d |
+# from these files, creates ABRT problem directories from them,
|
|
Jakub Filak |
165458d |
+# then removes the files (UEFI storage is a limited resource).
|
|
Jakub Filak |
165458d |
+#
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+# Wait for abrtd to start. Give it at least 1 second to initialize.
|
|
Jakub Filak |
165458d |
+i=10
|
|
Jakub Filak |
165458d |
+while ! pidof abrtd >/dev/null; do
|
|
Jakub Filak |
165458d |
+ if test $((i--)) = 0; then
|
|
Jakub Filak |
165458d |
+ exit 1
|
|
Jakub Filak |
165458d |
+ fi
|
|
Jakub Filak |
165458d |
+ sleep 1
|
|
Jakub Filak |
165458d |
+done
|
|
Jakub Filak |
165458d |
+sleep 1
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+cd /sys/fs/pstore 2>/dev/null || exit 0
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+abrt-merge-uefioops -o * | abrt-dump-oops -D
|
|
Jakub Filak |
165458d |
+if test $? = 0; then
|
|
Jakub Filak |
165458d |
+ abrt-merge-uefioops -d *
|
|
Jakub Filak |
165458d |
+fi
|
|
Jakub Filak |
165458d |
diff --git a/src/hooks/abrt-merge-uefioops.c b/src/hooks/abrt-merge-uefioops.c
|
|
Jakub Filak |
165458d |
new file mode 100644
|
|
Jakub Filak |
165458d |
index 0000000..6fc3109
|
|
Jakub Filak |
165458d |
--- /dev/null
|
|
Jakub Filak |
165458d |
+++ b/src/hooks/abrt-merge-uefioops.c
|
|
Jakub Filak |
165458d |
@@ -0,0 +1,148 @@
|
|
Jakub Filak |
165458d |
+/*
|
|
Jakub Filak |
165458d |
+ Copyright (C) 2013 Red Hat, Inc.
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+ This program is free software; you can redistribute it and/or modify
|
|
Jakub Filak |
165458d |
+ it under the terms of the GNU General Public License as published by
|
|
Jakub Filak |
165458d |
+ the Free Software Foundation; either version 2 of the License, or
|
|
Jakub Filak |
165458d |
+ (at your option) any later version.
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+ This program is distributed in the hope that it will be useful,
|
|
Jakub Filak |
165458d |
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Jakub Filak |
165458d |
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
Jakub Filak |
165458d |
+ GNU General Public License for more details.
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+ You should have received a copy of the GNU General Public License along
|
|
Jakub Filak |
165458d |
+ with this program; if not, write to the Free Software Foundation, Inc.,
|
|
Jakub Filak |
165458d |
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
Jakub Filak |
165458d |
+*/
|
|
Jakub Filak |
165458d |
+#include "libabrt.h"
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+struct oops_text {
|
|
Jakub Filak |
165458d |
+ unsigned panic_no;
|
|
Jakub Filak |
165458d |
+ unsigned part_no;
|
|
Jakub Filak |
165458d |
+ const char *filename;
|
|
Jakub Filak |
165458d |
+ char *text;
|
|
Jakub Filak |
165458d |
+};
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+static
|
|
Jakub Filak |
165458d |
+struct oops_text *parse_file(const char *filename)
|
|
Jakub Filak |
165458d |
+{
|
|
Jakub Filak |
165458d |
+ FILE *fp = fopen(filename, "r");
|
|
Jakub Filak |
165458d |
+ if (!fp)
|
|
Jakub Filak |
165458d |
+ return NULL;
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+ char buffer[16 * 1024];
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+ struct oops_text *ot = NULL;
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+ if (!fgets(buffer, sizeof(buffer), fp))
|
|
Jakub Filak |
165458d |
+ goto ret;
|
|
Jakub Filak |
165458d |
+ unsigned n1, n2;
|
|
Jakub Filak |
165458d |
+ int n = sscanf(buffer, "Panic#%u Part%u\n", &n1, &n2;;
|
|
Jakub Filak |
165458d |
+ if (n != 2)
|
|
Jakub Filak |
165458d |
+ goto ret;
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+ ot = xzalloc(sizeof(*ot));
|
|
Jakub Filak |
165458d |
+ ot->filename = filename;
|
|
Jakub Filak |
165458d |
+ ot->panic_no = n1;
|
|
Jakub Filak |
165458d |
+ ot->part_no = n2;
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+ size_t sz = fread(buffer, 1, sizeof(buffer), fp);
|
|
Jakub Filak |
165458d |
+ ot->text = strndup(buffer, sz);
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+ ret:
|
|
Jakub Filak |
165458d |
+ fclose(fp);
|
|
Jakub Filak |
165458d |
+ return ot;
|
|
Jakub Filak |
165458d |
+}
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+static
|
|
Jakub Filak |
165458d |
+int compare_oops_texts(const void *a, const void *b)
|
|
Jakub Filak |
165458d |
+{
|
|
Jakub Filak |
165458d |
+ struct oops_text *aa = *(struct oops_text **)a;
|
|
Jakub Filak |
165458d |
+ struct oops_text *bb = *(struct oops_text **)b;
|
|
Jakub Filak |
165458d |
+ if (aa->panic_no < bb->panic_no)
|
|
Jakub Filak |
165458d |
+ return -1;
|
|
Jakub Filak |
165458d |
+ if (aa->panic_no > bb->panic_no)
|
|
Jakub Filak |
165458d |
+ return 1;
|
|
Jakub Filak |
165458d |
+ if (aa->part_no < bb->part_no)
|
|
Jakub Filak |
165458d |
+ return -1;
|
|
Jakub Filak |
165458d |
+ return (aa->part_no > bb->part_no);
|
|
Jakub Filak |
165458d |
+}
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+int main(int argc, char **argv)
|
|
Jakub Filak |
165458d |
+{
|
|
Jakub Filak |
165458d |
+ /* I18n */
|
|
Jakub Filak |
165458d |
+ setlocale(LC_ALL, "");
|
|
Jakub Filak |
165458d |
+#if ENABLE_NLS
|
|
Jakub Filak |
165458d |
+ bindtextdomain(PACKAGE, LOCALEDIR);
|
|
Jakub Filak |
165458d |
+ textdomain(PACKAGE);
|
|
Jakub Filak |
165458d |
+#endif
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+ abrt_init(argv);
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+ /* Can't keep these strings/structs static: _() doesn't support that */
|
|
Jakub Filak |
165458d |
+ const char *program_usage_string = _(
|
|
Jakub Filak |
165458d |
+ "& [-v] [-od] FILE...\n"
|
|
Jakub Filak |
165458d |
+ "\n"
|
|
Jakub Filak |
165458d |
+ "Scans files for split oops message. Can print and/or delete them."
|
|
Jakub Filak |
165458d |
+ );
|
|
Jakub Filak |
165458d |
+ enum {
|
|
Jakub Filak |
165458d |
+ OPT_v = 1 << 0,
|
|
Jakub Filak |
165458d |
+ OPT_o = 1 << 1,
|
|
Jakub Filak |
165458d |
+ OPT_d = 1 << 2,
|
|
Jakub Filak |
165458d |
+ };
|
|
Jakub Filak |
165458d |
+ /* Keep enum above and order of options below in sync! */
|
|
Jakub Filak |
165458d |
+ struct options program_options[] = {
|
|
Jakub Filak |
165458d |
+ OPT__VERBOSE(&g_verbose),
|
|
Jakub Filak |
165458d |
+ OPT_BOOL('o', NULL, NULL, _("Print found oopses")),
|
|
Jakub Filak |
165458d |
+ OPT_BOOL('d', NULL, NULL, _("Delete files with found oopses")),
|
|
Jakub Filak |
165458d |
+ OPT_END()
|
|
Jakub Filak |
165458d |
+ };
|
|
Jakub Filak |
165458d |
+ unsigned opts = parse_opts(argc, argv, program_options, program_usage_string);
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+ export_abrt_envvars(0);
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+ struct oops_text **v = xzalloc(sizeof(v[0]));
|
|
Jakub Filak |
165458d |
+ int i = 0;
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+ while (*argv)
|
|
Jakub Filak |
165458d |
+ {
|
|
Jakub Filak |
165458d |
+ v[i] = parse_file(*argv);
|
|
Jakub Filak |
165458d |
+ if (v[i])
|
|
Jakub Filak |
165458d |
+ {
|
|
Jakub Filak |
165458d |
+ v = xrealloc(v, (++i + 1) * sizeof(v[0]));
|
|
Jakub Filak |
165458d |
+ v[i] = NULL;
|
|
Jakub Filak |
165458d |
+ }
|
|
Jakub Filak |
165458d |
+ argv++;
|
|
Jakub Filak |
165458d |
+ }
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+ if (i == 0) /* nothing was found */
|
|
Jakub Filak |
165458d |
+ return 0;
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+ qsort(v, i, sizeof(v[0]), compare_oops_texts);
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+ if (opts & OPT_o)
|
|
Jakub Filak |
165458d |
+ {
|
|
Jakub Filak |
165458d |
+ struct oops_text **vv = v;
|
|
Jakub Filak |
165458d |
+ while (*vv)
|
|
Jakub Filak |
165458d |
+ {
|
|
Jakub Filak |
165458d |
+ struct oops_text *cur_oops = *vv;
|
|
Jakub Filak |
165458d |
+ fputs(cur_oops->text, stdout);
|
|
Jakub Filak |
165458d |
+ vv++;
|
|
Jakub Filak |
165458d |
+ }
|
|
Jakub Filak |
165458d |
+ }
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+ if (opts & OPT_d)
|
|
Jakub Filak |
165458d |
+ {
|
|
Jakub Filak |
165458d |
+ struct oops_text **vv = v;
|
|
Jakub Filak |
165458d |
+ while (*vv)
|
|
Jakub Filak |
165458d |
+ {
|
|
Jakub Filak |
165458d |
+ struct oops_text *cur_oops = *vv;
|
|
Jakub Filak |
165458d |
+ if (unlink(cur_oops->filename) != 0)
|
|
Jakub Filak |
165458d |
+ perror_msg("Can't unlink '%s'", cur_oops->filename);
|
|
Jakub Filak |
165458d |
+ vv++;
|
|
Jakub Filak |
165458d |
+ }
|
|
Jakub Filak |
165458d |
+ }
|
|
Jakub Filak |
165458d |
+
|
|
Jakub Filak |
165458d |
+ return 0;
|
|
Jakub Filak |
165458d |
+}
|
|
Jakub Filak |
165458d |
--
|
|
Jakub Filak |
165458d |
1.8.1.4
|
|
Jakub Filak |
165458d |
|