summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarel Klic <kklic@redhat.com>2011-05-05 13:51:03 +0200
committerKarel Klic <kklic@redhat.com>2011-05-05 13:51:03 +0200
commitcb09f7742092950787283e6cbb4ac7af9e8d00fd (patch)
tree6199412f207fbb6a262b77e33b61de70aa550d20
parentd01e3b4c482bd243a0265b6292f1f919f3750fef (diff)
parent13e0fc50583209894d699def95ecd2e23feac558 (diff)
downloadabrt-cb09f7742092950787283e6cbb4ac7af9e8d00fd.tar.gz
abrt-cb09f7742092950787283e6cbb4ac7af9e8d00fd.tar.xz
abrt-cb09f7742092950787283e6cbb4ac7af9e8d00fd.zip
Merge branch 'master' of ssh://git.fedorahosted.org/git/abrt
-rw-r--r--src/cli/Makefile.am47
-rw-r--r--src/cli/abrt-cli.158
-rw-r--r--src/cli/abrt-cli.txt75
-rw-r--r--src/cli/abrt-handle-crashdump.c (renamed from src/daemon/abrt-handle-crashdump.c)16
-rw-r--r--src/cli/cli.c299
-rw-r--r--src/daemon/Makefile.am21
-rw-r--r--src/daemon/abrt-action-save-package-data.c14
-rw-r--r--src/daemon/abrt-server.c15
-rw-r--r--src/daemon/abrtd.c19
-rw-r--r--src/gui-gtk/main.c21
-rw-r--r--src/gui-wizard-gtk/main.c22
-rw-r--r--src/include/abrtlib.h1
-rw-r--r--src/lib/parse_options.c51
-rw-r--r--src/lib/parse_options.h17
-rw-r--r--src/plugins/abrt-action-analyze-backtrace.c14
-rw-r--r--src/plugins/abrt-action-analyze-c.c14
-rw-r--r--src/plugins/abrt-action-analyze-oops.c14
-rw-r--r--src/plugins/abrt-action-analyze-python.c14
-rw-r--r--src/plugins/abrt-action-bugzilla.cpp14
-rw-r--r--src/plugins/abrt-action-generate-backtrace.c14
-rw-r--r--src/plugins/abrt-action-kerneloops.c14
-rw-r--r--src/plugins/abrt-action-mailx.c14
-rw-r--r--src/plugins/abrt-action-print.c14
-rw-r--r--src/plugins/abrt-action-rhtsupport.c14
-rw-r--r--src/plugins/abrt-action-trim-files.c15
-rw-r--r--src/plugins/abrt-action-upload.c14
-rw-r--r--src/plugins/abrt-dump-oops.c18
-rw-r--r--src/plugins/abrt-retrace-client.c5
28 files changed, 385 insertions, 483 deletions
diff --git a/src/cli/Makefile.am b/src/cli/Makefile.am
index d6cd5ef2..a7597ad6 100644
--- a/src/cli/Makefile.am
+++ b/src/cli/Makefile.am
@@ -1,4 +1,6 @@
-bin_PROGRAMS = abrt-cli
+bin_PROGRAMS = \
+ abrt-handle-crashdump \
+ abrt-cli
abrt_cli_SOURCES = \
cli.c \
@@ -19,10 +21,49 @@ abrt_cli_LDADD = \
../lib/libabrt_dbus.la \
$(GLIB_LIBS)
-man_MANS = abrt-cli.1
-EXTRA_DIST = $(man_MANS)
+abrt_handle_crashdump_SOURCES = \
+ abrt-handle-crashdump.c
+abrt_handle_crashdump_CPPFLAGS = \
+ -I$(srcdir)/../include/report -I$(srcdir)/../include \
+ -I$(srcdir)/../lib \
+ -DBIN_DIR=\"$(bindir)\" \
+ -DVAR_RUN=\"$(VAR_RUN)\" \
+ -DCONF_DIR=\"$(CONF_DIR)\" \
+ -DLOCALSTATEDIR='"$(localstatedir)"' \
+ -DDEBUG_DUMPS_DIR=\"$(DEBUG_DUMPS_DIR)\" \
+ -DDEBUG_INFO_DIR=\"$(DEBUG_INFO_DIR)\" \
+ -DPLUGINS_LIB_DIR=\"$(PLUGINS_LIB_DIR)\" \
+ -DPLUGINS_CONF_DIR=\"$(PLUGINS_CONF_DIR)\" \
+ -DLIBEXEC_DIR=\"$(LIBEXEC_DIR)\" \
+ $(GLIB_CFLAGS) \
+ -D_GNU_SOURCE \
+ -Wall -Wwrite-strings -Werror
+abrt_handle_crashdump_LDADD = \
+ ../lib/libreport.la
+
+MAN_TXT = \
+ abrt-cli.txt
+
+# Manual pages are generated from .txt via Docbook
+man1_MANS = ${MAN_TXT:%.txt=%.1}
+
+%.1 %.5 %.7: %.xml
+ xmlto man $<
+
+%.xml: %.txt ../../asciidoc.conf
+ asciidoc --backend=docbook --doctype=manpage --conf-file ../../asciidoc.conf -aabrt_version=$(PACKAGE_VERSION) -o $@ $<
+
+CLEANFILES = $(man1_MANS)
+
+PYTHON_FILES = \
+ abrt-action-install-debuginfo.py \
+ abrt-action-list-dsos.py \
+ abrt-action-analyze-core.py
completiondir = $(sysconfdir)/bash_completion.d
dist_completion_DATA = abrt-cli.bash
DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@
+
+EXTRA_DIST = $(MAN_TXT)
+
diff --git a/src/cli/abrt-cli.1 b/src/cli/abrt-cli.1
deleted file mode 100644
index 9e0a630e..00000000
--- a/src/cli/abrt-cli.1
+++ /dev/null
@@ -1,58 +0,0 @@
-.TH abrt\-cli "1" "12 Oct 2009" ""
-.SH NAME
-abrt\-cli \- a command line interface to abrt
-.SH SYNOPSIS
-.B abrt\-cli
-[option]
-.SH DESCRIPTION
-.I abrt\-cli
-is a command line tool that manages application crashes catched by
-.I abrtd
-daemon. It enables access to problem data, and allows to report
-problems depending on active abrt plugins.
-.SH OPTIONS
-.B Basic startup options
-.IP "\-V, \-\-version"
-Displays version of abrt\-cli.
-.IP "\-?, \-\-help"
-Print a help message describing all of abrt-cli’s command-line options.
-
-.PP
-.B Crash action options
-.IP "\-l, \-\-list"
-Prints list of crashes which are not reported yet.
-.IP "\-r, \-\-report \fIDUMPDIR\fR"
-Creates a crash report and then the text editor is invoked on that
-report. When you are done with editing the report just exit the editor
-and then you will be asked if you want to send the report.
-.IP "\-d, \-\-delete \fIDUMPDIR\fR"
-Removes data about particular crash.
-.IP "\-i, \-\-info \fIDUMPDIR\fR"
-Prints detailed information about particular crash.
-
-.PP
-.B Listing options
-.IP "\-f, \-\-full"
-List all crashes, including already reported.
-
-.PP
-.B Report options
-.IP "\-y, \-\-always"
-Creates and sends the crash report automatically, without asking
-any questions.
-
-.PP
-.B Info options
-.IP "\-b, \-\-backtrace"
-Includes the crash backtrace in the info output if the backtrace is
-available.
-
-.SH ENVIRONMENT VARIABLES
-The editor used to edit the crash report is chosen from the
-ABRT_EDITOR environment variable, the VISUAL environment variable, or
-the EDITOR environment variable, in that order.
-
-.SH SEE ALSO
-.IR abrtd (8),
-.IR abrt.conf (5),
-.IR abrt-plugins (7)
diff --git a/src/cli/abrt-cli.txt b/src/cli/abrt-cli.txt
new file mode 100644
index 00000000..ea3111c8
--- /dev/null
+++ b/src/cli/abrt-cli.txt
@@ -0,0 +1,75 @@
+abrt-cli(1)
+===========
+
+NAME
+----
+abrt-cli - Work with ABRT dump directories from command line.
+
+SYNOPSIS
+--------
+'abrt-cli' [-vsp] -l[f] [-D BASE_DIR]...
+
+'abrt-cli' [-vsp] -i[f] DUMP_DIR
+
+'abrt-cli' [-vsp] -L[PREFIX] [DUMP_DIR]
+
+'abrt-cli' [-vsp] -e EVENT DUMP_DIR
+
+'abrt-cli' [-vsp] -a[y] DUMP_DIR
+
+'abrt-cli' [-vsp] -r[y] DUMP_DIR
+
+'abrt-cli' [-vsp] -d DUMP_DIR
+
+DESCRIPTION
+-----------
+'abrt-cli' is a command line tool that manages application crashes and other problems
+catched by abrtd daemon. It enables access to, manipulation of problem data, and reporting.
+
+OPTIONS
+-------
+-l::
+ List not yet reported problems, or all problems with -f
+
+-D BASE_DIR::
+ Directory to list problems from (default: -D $HOME/.abrt/spool -D /var/spool/abrt)
+
+-i, --info::
+ Print information about DUMP_DIR (detailed with -f)
+
+-L[PREFIX]::
+ List possible events [which start with PREFIX]
+
+-e EVENT::
+ Run EVENT on DUMP_DIR
+
+-a, --analyze::
+ Run analyze event(s) on DUMP_DIR
+
+-r, --report::
+ Send a report about DUMP_DIR
+
+-d, --delete::
+ Remove DUMP_DIR
+
+-f, --full::
+ Full listing
+
+-y, --always::
+ Noninteractive: don't ask questions, assume positive answer to all of them
+
+-v, --verbose::
+ Be verbose
+
+-s::
+ Log to syslog
+
+-p::
+ Add program names to log
+
+-V, --version::
+ Display version and exit
+
+AUTHORS
+-------
+* ABRT team
diff --git a/src/daemon/abrt-handle-crashdump.c b/src/cli/abrt-handle-crashdump.c
index 3c3e433f..d04e4fef 100644
--- a/src/daemon/abrt-handle-crashdump.c
+++ b/src/cli/abrt-handle-crashdump.c
@@ -19,8 +19,6 @@
#include "abrtlib.h"
#include "parse_options.h"
-#define PROGNAME "abrt-handle-crashdump"
-
static const char *dump_dir_name = NULL;
//static const char *conf_filename = CONF_DIR"/abrt_event.conf";
static const char *event;
@@ -34,14 +32,12 @@ static char *do_log(char *log_line, void *param)
int main(int argc, char **argv)
{
- char *env_verbose = getenv("ABRT_VERBOSE");
- if (env_verbose)
- g_verbose = atoi(env_verbose);
+ abrt_init(argv);
/* Can't keep these strings/structs static: _() doesn't support that */
const char *program_usage_string = _(
- PROGNAME" [-vs]" /*" [-c CONFFILE]"*/ " -d DIR -e EVENT\n"
- " or: "PROGNAME" [-vs]" /*" [-c CONFFILE]"*/ " [-d DIR] -l[PFX]\n"
+ "\b [-vs]" /*" [-c CONFFILE]"*/ " -d DIR -e EVENT\n"
+ " or: \b [-vs]" /*" [-c CONFFILE]"*/ " [-d DIR] -l[PFX]\n"
"\n"
"Handles dump directory DIR according to rules in abrt_event.conf"
);
@@ -69,10 +65,8 @@ int main(int argc, char **argv)
if (!(opts & (OPT_e|OPT_l)))
show_usage_and_die(program_usage_string, program_options);
- putenv(xasprintf("ABRT_VERBOSE=%u", g_verbose));
- msg_prefix = PROGNAME;
- if (opts & OPT_p)
- putenv((char*)"ABRT_PROG_PREFIX=1");
+ export_abrt_envvars(opts & OPT_p);
+
if (opts & OPT_s)
{
openlog(msg_prefix, 0, LOG_DAEMON);
diff --git a/src/cli/cli.c b/src/cli/cli.c
index 1a84b1a5..3981c1bc 100644
--- a/src/cli/cli.c
+++ b/src/cli/cli.c
@@ -120,92 +120,15 @@ static void print_crash_info(problem_data_t *problem_data, bool show_multiline)
free(desc);
}
-/* Program options */
-enum
+static char *do_log(char *log_line, void *param)
{
- OPT_GET_LIST,
- OPT_REPORT,
- OPT_DELETE,
- OPT_INFO
-};
-
-/**
- * Long options.
- * Do not use the has_arg field. Arguments are handled after parsing all options.
- * The reason is that we want to use all the following combinations:
- * --report ID
- * --report ID --always
- * --report --always ID
- */
-static const struct option longopts[] =
-{
- /* name, has_arg, flag, val */
- { "help" , no_argument, NULL, '?' },
- { "verbose" , no_argument, NULL, 'v' },
- { "version" , no_argument, NULL, 'V' },
- { "list" , no_argument, NULL, 'l' },
- { "full" , no_argument, NULL, 'f' },
- { "always" , no_argument, NULL, 'y' },
- { "report" , no_argument, NULL, 'r' },
- { "delete" , no_argument, NULL, 'd' },
- { "info" , no_argument, NULL, 'i' },
- { 0, 0, 0, 0 } /* prevents crashes for unknown options*/
-};
-
-/* Gets the program name from the first command line argument. */
-static const char *progname(const char *argv0)
-{
- const char* name = strrchr(argv0, '/');
- if (name)
- return ++name;
- return argv0;
-}
-
-/**
- * Prints abrt-cli version and some help text.
- * Then exits the program with return value 1.
- */
-static void print_usage_and_die(char *argv0)
-{
- const char *name = progname(argv0);
- printf("%s "VERSION"\n\n", name);
-
- /* Message has embedded tabs. */
- printf(_(
- "Usage: %s -l[f] [-D BASE_DIR]...]\n"
- " or: %s -r[y] CRASH_DIR\n"
- " or: %s -i[b] CRASH_DIR\n"
- " or: %s -d CRASH_DIR\n"
- "\n"
- " -l, --list List not yet reported problems\n"
- " -f, --full List all problems\n"
- " -D BASE_DIR Directory to list problems from\n"
- " (default: -D $HOME/.abrt/spool -D %s)\n"
- "\n"
- " -r, --report Send a report about CRASH_DIR\n"
- " -y, --always ...without editing and asking\n"
- " -i, --info Print detailed information about CRASH_DIR\n"
- " -f, --full ...including multi-line entries\n"
- " Note: -if will run analyzers\n"
- " (if this CRASH_DIR have defined analyzers)\n"
- " -d, --delete Remove CRASH_DIR\n"
- "\n"
- " -V, --version Display version and exit\n"
- " -v, --verbose Be verbose\n"
- ),
- name, name, name, name,
- DEBUG_DUMPS_DIR
- );
- exit(1);
+ log("%s", log_line);
+ return log_line;
}
int main(int argc, char** argv)
{
- GList *D_list = NULL;
- char *dump_dir_name = NULL;
- int op = -1;
- bool full = false;
- bool always = false;
+ abrt_init(argv);
setlocale(LC_ALL, "");
#if ENABLE_NLS
@@ -213,41 +136,91 @@ int main(int argc, char** argv)
textdomain(PACKAGE);
#endif
- while (1)
- {
- /* Do not use colons, arguments are handled after parsing all options. */
- int c = getopt_long(argc, argv, "?Vvrdlfyib", longopts, NULL);
+ GList *D_list = NULL;
+ const char *event_name = NULL;
+ const char *pfx = "";
+
+ /* Can't keep these strings/structs static: _() doesn't support that */
+ const char *program_usage_string = _(
+ "\b [-vsp] -l[f] [-D BASE_DIR]...\n"
+ "or: \b [-vsp] -i[f] DUMP_DIR\n"
+ "or: \b [-vsp] -L[PREFIX] [DUMP_DIR]\n"
+ "or: \b [-vsp] -e EVENT DUMP_DIR\n"
+ "or: \b [-vsp] -a[y] DUMP_DIR\n"
+ "or: \b [-vsp] -r[y] DUMP_DIR\n"
+ "or: \b [-vsp] -d DUMP_DIR"
+ );
+ enum {
+ OPT_list = 1 << 0,
+ OPT_D = 1 << 1,
+ OPT_info = 1 << 2,
+ OPT_list_events = 1 << 3,
+ OPT_run_event = 1 << 4,
+ OPT_analyze = 1 << 5,
+ OPT_report = 1 << 6,
+ OPT_delete = 1 << 7,
+ OPT_version = 1 << 8,
+ OPTMASK_op = OPT_list|OPT_info|OPT_list_events|OPT_run_event|OPT_analyze|OPT_report|OPT_delete|OPT_version,
+ OPTMASK_need_arg = OPT_info|OPT_run_event|OPT_analyze|OPT_report|OPT_delete,
+ OPT_f = 1 << 9,
+ OPT_y = 1 << 10,
+ OPT_v = 1 << 11,
+ OPT_s = 1 << 12,
+ OPT_p = 1 << 13,
+ };
+ /* Keep enum above and order of options below in sync! */
+ struct options program_options[] = {
+ /* short_name long_name value parameter_name help */
+ OPT_BOOL( 'l', "list" , NULL, _("List not yet reported problems, or all with -f")),
+ OPT_LIST( 'D', NULL , &D_list, "BASE_DIR", _("Directory to list problems from (default: -D $HOME/.abrt/spool -D "DEBUG_DUMPS_DIR")")),
+ OPT_BOOL( 'i', "info" , NULL, _("Print information about DUMP_DIR (detailed with -f)")),
+ OPT_OPTSTRING('L', NULL , &pfx, "PREFIX", _("List possible events [which start with PREFIX]")),
+ OPT_STRING( 'e', NULL , &event_name, "EVENT", _("Run EVENT on DUMP_DIR")),
+ OPT_BOOL( 'a', "analyze", NULL, _("Run analyze event(s) on DUMP_DIR")),
+ OPT_BOOL( 'r', "report" , NULL, _("Send a report about DUMP_DIR")),
+ OPT_BOOL( 'd', "delete" , NULL, _("Remove DUMP_DIR")),
+ OPT_BOOL( 'V', "version", NULL, _("Display version and exit")),
+ OPT_BOOL( 'f', "full" , NULL, _("Full listing")),
+ OPT_BOOL( 'y', "always" , NULL, _("Noninteractive: don't ask questions, assume 'yes'")),
+ OPT__VERBOSE(&g_verbose),
+ OPT_BOOL( 's', NULL , NULL, _("Log to syslog")),
+ OPT_BOOL( 'p', NULL , NULL, _("Add program names to log")),
+ OPT_END()
+ };
+ unsigned opts = parse_opts(argc, argv, program_options, program_usage_string);
+ unsigned op = (opts & OPTMASK_op);
+ if (!op || ((op-1) & op))
+ /* "You must specify exactly one operation" */
+ show_usage_and_die(program_usage_string, program_options);
+ argv += optind;
+ argc -= optind;
+ if (argc > 1
+ /* dont_need_arg == have_arg? bad in both cases:
+ * TRUE == TRUE (dont need arg but have) or
+ * FALSE == FALSE (need arg but havent).
+ * OPT_list_events is an exception, it can be used in both cases.
+ */
+ || ((op != OPT_list_events) && (!(opts & OPTMASK_need_arg) == argc))
+ ) {
+ show_usage_and_die(program_usage_string, program_options);
+ }
-#define SET_OP(newop) \
- do { \
- if (op != -1 && op != newop) \
- error_msg_and_die(_("You must specify exactly one operation")); \
- op = newop; \
- } while (0)
+ if (op == OPT_version)
+ {
+ printf("%s "VERSION"\n", g_progname);
+ return 0;
+ }
- switch (c)
- {
- case -1: goto end_of_arg_parsing;
- case 'r': SET_OP(OPT_REPORT); break;
- case 'd': SET_OP(OPT_DELETE); break;
- case 'l': SET_OP(OPT_GET_LIST); break;
- case 'i': SET_OP(OPT_INFO); break;
- case 'f': full = true; break;
- case 'y': always = true; break;
- case 'v': g_verbose++; break;
- case 'D':
- D_list = g_list_append(D_list, optarg);
- break;
- case 'V':
- printf("%s "VERSION"\n", progname(argv[0]));
- return 0;
- case '?':
- default: /* some error */
- print_usage_and_die(argv[0]); /* exits app */
- }
-#undef SET_OP
+ export_abrt_envvars(opts & OPT_p);
+ if (opts & OPT_s)
+ {
+ openlog(msg_prefix, 0, LOG_DAEMON);
+ logmode = LOGMODE_SYSLOG;
}
- end_of_arg_parsing: ;
+
+ char *dump_dir_name = argv[0];
+ bool full = (opts & OPT_f);
+ bool always = (opts & OPT_y);
if (!D_list)
{
@@ -257,31 +230,6 @@ int main(int argc, char** argv)
D_list = g_list_append(D_list, (void*)DEBUG_DUMPS_DIR);
}
- /* Handle option arguments. */
- argc -= optind;
- switch (argc)
- {
- case 0:
- if (op == OPT_REPORT || op == OPT_DELETE || op == OPT_INFO)
- print_usage_and_die(argv[0]);
- break;
- case 1:
- if (op != OPT_REPORT && op != OPT_DELETE && op != OPT_INFO)
- print_usage_and_die(argv[0]);
- dump_dir_name = argv[optind];
- break;
- default:
- print_usage_and_die(argv[0]);
- }
-
- /* Check if we have an operation.
- * Limit --full and --always to certain operations.
- */
- if ((always && op != OPT_REPORT) || op == -1)
- {
- print_usage_and_die(argv[0]);
- }
-
/* Get settings */
load_event_config_data();
@@ -289,7 +237,7 @@ int main(int argc, char** argv)
int exitcode = 0;
switch (op)
{
- case OPT_GET_LIST:
+ case OPT_list:
{
vector_of_problem_data_t *ci = new_vector_of_problem_data();
while (D_list)
@@ -302,7 +250,49 @@ int main(int argc, char** argv)
free_vector_of_problem_data(ci);
break;
}
- case OPT_REPORT:
+ case OPT_list_events: /* -L[PREFIX] */
+ {
+ /* Note that dump_dir_name may be NULL here, it means "show all
+ * possible events regardless of dir"
+ */
+ char *events = list_possible_events(NULL, dump_dir_name, pfx);
+ if (!events)
+ return 1; /* error msg is already logged */
+ fputs(events, stdout);
+ free(events);
+ break;
+ }
+ case OPT_run_event: /* -e EVENT: run event */
+ {
+ struct run_event_state *run_state = new_run_event_state();
+ run_state->logging_callback = do_log;
+ int r = run_event_on_dir_name(run_state, dump_dir_name, event_name);
+ if (r == 0 && run_state->children_count == 0)
+ error_msg_and_die("No actions are found for event '%s'", event_name);
+ free_run_event_state(run_state);
+ break;
+ }
+ case OPT_analyze:
+ {
+ /* Load problem_data from dump dir */
+ struct dump_dir *dd = dd_opendir(dump_dir_name, DD_OPEN_READONLY);
+ if (!dd)
+ return 1;
+ char *analyze_events_as_lines = list_possible_events(dd, NULL, "analyze");
+ dd_close(dd);
+
+ if (analyze_events_as_lines && *analyze_events_as_lines)
+ {
+ GList *list_analyze_events = str_to_glist(analyze_events_as_lines, '\n');
+ char *event = select_event_option(list_analyze_events);
+ list_free_with_free(list_analyze_events);
+ exitcode = run_analyze_event(dump_dir_name, event);
+ free(event);
+ }
+ free(analyze_events_as_lines);
+ break;
+ }
+ case OPT_report:
{
struct dump_dir *dd = dd_opendir(dump_dir_name, DD_OPEN_READONLY);
if (!dd)
@@ -327,43 +317,18 @@ int main(int argc, char** argv)
error_msg_and_die("Crash '%s' not found", dump_dir_name);
break;
}
- case OPT_DELETE:
+ case OPT_delete:
{
exitcode = delete_dump_dir_possibly_using_abrtd(dump_dir_name);
break;
}
- case OPT_INFO:
+ case OPT_info:
{
/* Load problem_data from dump dir */
struct dump_dir *dd = dd_opendir(dump_dir_name, DD_OPEN_READONLY);
if (!dd)
return -1;
- char *analyze_events_as_lines = list_possible_events(dd, NULL, "analyze");
-
- if (full && analyze_events_as_lines && *analyze_events_as_lines)
- {
- dd_close(dd);
-
- GList *list_analyze_events = str_to_glist(analyze_events_as_lines, '\n');
- free(analyze_events_as_lines);
-
- char *event = select_event_option(list_analyze_events);
- list_free_with_free(list_analyze_events);
-
- int analyzer_result = run_analyze_event(dump_dir_name, event);
- free(event);
-
- if (analyzer_result != 0)
- return 1;
-
- /* Reload problem_data from (possibly updated by analyze) dump dir */
- dd = dd_opendir(dump_dir_name, DD_OPEN_READONLY);
- if (!dd)
- return -1;
- } else
- free(analyze_events_as_lines);
-
problem_data_t *problem_data = create_problem_data_from_dump_dir(dd);
dd_close(dd);
diff --git a/src/daemon/Makefile.am b/src/daemon/Makefile.am
index 63d1d78a..6fb107cc 100644
--- a/src/daemon/Makefile.am
+++ b/src/daemon/Makefile.am
@@ -2,7 +2,6 @@ bin_SCRIPTS = \
abrt-handle-upload
bin_PROGRAMS = \
- abrt-handle-crashdump \
abrt-action-save-package-data
sbin_PROGRAMS = \
@@ -52,26 +51,6 @@ abrt_server_CPPFLAGS = \
abrt_server_LDADD = \
../lib/libreport.la
-abrt_handle_crashdump_SOURCES = \
- abrt-handle-crashdump.c
-abrt_handle_crashdump_CPPFLAGS = \
- -I$(srcdir)/../include/report -I$(srcdir)/../include \
- -I$(srcdir)/../lib \
- -DBIN_DIR=\"$(bindir)\" \
- -DVAR_RUN=\"$(VAR_RUN)\" \
- -DCONF_DIR=\"$(CONF_DIR)\" \
- -DLOCALSTATEDIR='"$(localstatedir)"' \
- -DDEBUG_DUMPS_DIR=\"$(DEBUG_DUMPS_DIR)\" \
- -DDEBUG_INFO_DIR=\"$(DEBUG_INFO_DIR)\" \
- -DPLUGINS_LIB_DIR=\"$(PLUGINS_LIB_DIR)\" \
- -DPLUGINS_CONF_DIR=\"$(PLUGINS_CONF_DIR)\" \
- -DLIBEXEC_DIR=\"$(LIBEXEC_DIR)\" \
- $(GLIB_CFLAGS) \
- -D_GNU_SOURCE \
- -Wall -Wwrite-strings -Werror
-abrt_handle_crashdump_LDADD = \
- ../lib/libreport.la
-
abrt_action_save_package_data_SOURCES = \
rpm.h rpm.c \
abrt-action-save-package-data.c
diff --git a/src/daemon/abrt-action-save-package-data.c b/src/daemon/abrt-action-save-package-data.c
index 93350994..df8de7b9 100644
--- a/src/daemon/abrt-action-save-package-data.c
+++ b/src/daemon/abrt-action-save-package-data.c
@@ -21,8 +21,6 @@
#include "rpm.h"
#include "parse_options.h"
-#define PROGNAME "abrt-action-save-package-data"
-
// TODO: convert g_settings_foo usage to command-line switches
/**
@@ -243,15 +241,13 @@ static int SavePackageDescriptionToDebugDump(const char *dump_dir_name)
int main(int argc, char **argv)
{
- char *env_verbose = getenv("ABRT_VERBOSE");
- if (env_verbose)
- g_verbose = atoi(env_verbose);
+ abrt_init(argv);
const char *dump_dir_name = ".";
/* Can't keep these strings/structs static: _() doesn't support that */
const char *program_usage_string = _(
- PROGNAME" [-v] -d DIR\n"
+ "\b [-v] -d DIR\n"
"\n"
"Query package database and save package name, component, and description"
);
@@ -267,11 +263,7 @@ int main(int argc, char **argv)
};
/*unsigned opts =*/ parse_opts(argc, argv, program_options, program_usage_string);
- putenv(xasprintf("ABRT_VERBOSE=%u", g_verbose));
-
- char *pfx = getenv("ABRT_PROG_PREFIX");
- if (pfx && string_to_bool(pfx))
- msg_prefix = PROGNAME;
+ export_abrt_envvars(0);
VERB1 log("Loading settings");
if (load_abrt_conf() != 0)
diff --git a/src/daemon/abrt-server.c b/src/daemon/abrt-server.c
index 53bb5fba..49b7e0ce 100644
--- a/src/daemon/abrt-server.c
+++ b/src/daemon/abrt-server.c
@@ -18,8 +18,6 @@
#include "abrtlib.h"
#include "parse_options.h"
-#define PROGNAME "abrt-server"
-
/* Maximal length of backtrace. */
#define MAX_BACKTRACE_SIZE (1024*1024)
/* Amount of data received from one client for a message before reporting error. */
@@ -280,13 +278,11 @@ static void dummy_handler(int sig_unused) {}
int main(int argc, char **argv)
{
- char *env_verbose = getenv("ABRT_VERBOSE");
- if (env_verbose)
- g_verbose = atoi(env_verbose);
+ abrt_init(argv);
/* Can't keep these strings/structs static: _() doesn't support that */
const char *program_usage_string = _(
- PROGNAME" [options]"
+ "\b [options]"
);
enum {
OPT_v = 1 << 0,
@@ -304,10 +300,9 @@ int main(int argc, char **argv)
};
unsigned opts = parse_opts(argc, argv, program_options, program_usage_string);
- putenv(xasprintf("ABRT_VERBOSE=%u", g_verbose));
- msg_prefix = xasprintf(PROGNAME"[%u]", getpid());
- if (opts & OPT_p)
- putenv((char*)"ABRT_PROG_PREFIX=1");
+ export_abrt_envvars(opts & OPT_p);
+
+ msg_prefix = xasprintf("%s[%u]", g_progname, getpid());
if (opts & OPT_s)
{
openlog(msg_prefix, 0, LOG_DAEMON);
diff --git a/src/daemon/abrtd.c b/src/daemon/abrtd.c
index ca0e0d2e..7a1ab318 100644
--- a/src/daemon/abrtd.c
+++ b/src/daemon/abrtd.c
@@ -30,8 +30,6 @@
#include "MiddleWare.h"
#include "parse_options.h"
-#define PROGNAME "abrtd"
-
#define VAR_RUN_PIDFILE VAR_RUN"/abrtd.pid"
#define SOCKET_FILE VAR_RUN"/abrt/abrt.socket"
@@ -451,7 +449,7 @@ static void start_syslog_logging()
* Otherwise fprintf(stderr) dumps messages into random fds, etc. */
xdup2(STDIN_FILENO, STDOUT_FILENO);
xdup2(STDIN_FILENO, STDERR_FILENO);
- openlog(PROGNAME, 0, LOG_DAEMON);
+ openlog(g_progname, 0, LOG_DAEMON);
logmode = LOGMODE_SYSLOG;
putenv((char*)"ABRT_SYSLOG=1");
}
@@ -490,6 +488,8 @@ static void sanitize_dump_dir_rights()
int main(int argc, char** argv)
{
+ abrt_init(argv);
+
int parent_pid = getpid();
setlocale(LC_ALL, "");
@@ -502,12 +502,8 @@ int main(int argc, char** argv)
if (getuid() != 0)
error_msg_and_die("ABRT daemon must be run as root");
- char *env_verbose = getenv("ABRT_VERBOSE");
- if (env_verbose)
- g_verbose = atoi(env_verbose);
-
const char *program_usage_string = _(
- PROGNAME" [options]"
+ "\b [options]"
);
enum {
OPT_v = 1 << 0,
@@ -527,6 +523,8 @@ int main(int argc, char** argv)
};
unsigned opts = parse_opts(argc, argv, program_options, program_usage_string);
+ export_abrt_envvars(opts & OPT_p);
+
/* When dbus daemon starts us, it doesn't set PATH
* (I saw it set only DBUS_STARTER_ADDRESS and DBUS_STARTER_BUS_TYPE).
* In this case, set something sane:
@@ -536,10 +534,7 @@ int main(int argc, char** argv)
putenv((char*)"PATH=/usr/sbin:/usr/bin:/sbin:/bin");
unsetenv("ABRT_SYSLOG");
- putenv(xasprintf("ABRT_VERBOSE=%u", g_verbose));
- msg_prefix = PROGNAME; /* for log(), error_msg() and such */
- if (opts & OPT_p)
- putenv((char*)"ABRT_PROG_PREFIX=1");
+ msg_prefix = g_progname; /* for log(), error_msg() and such */
if (opts & OPT_s)
start_syslog_logging();
diff --git a/src/gui-gtk/main.c b/src/gui-gtk/main.c
index ee19ac8c..e9b175aa 100644
--- a/src/gui-gtk/main.c
+++ b/src/gui-gtk/main.c
@@ -25,8 +25,6 @@
# include <locale.h>
#endif
-#define PROGNAME "abrt-gui"
-
static int inotify_fd = -1;
static GIOChannel *channel_inotify;
static int channel_inotify_event_id = -1;
@@ -193,6 +191,8 @@ void scan_dirs_and_add_to_dirlist(void)
int main(int argc, char **argv)
{
+ abrt_init(argv);
+
/* I18n */
setlocale(LC_ALL, "");
#if ENABLE_NLS
@@ -204,16 +204,11 @@ int main(int argc, char **argv)
* desktops which uses the name to find the corresponding .desktop file
* trac#180
*/
- g_set_prgname("abrt");
gtk_init(&argc, &argv);
- char *env_verbose = getenv("ABRT_VERBOSE");
- if (env_verbose)
- g_verbose = atoi(env_verbose);
-
/* Can't keep these strings/structs static: _() doesn't support that */
const char *program_usage_string = _(
- PROGNAME" [-vp] [DIR]...\n"
+ "\b [-vp] [DIR]...\n"
"\n"
"Shows list of ABRT dump directories in specified DIR(s)\n"
"(default DIRs: "DEBUG_DUMPS_DIR" $HOME/.abrt/spool)"
@@ -230,15 +225,7 @@ int main(int argc, char **argv)
};
unsigned opts = parse_opts(argc, argv, program_options, program_usage_string);
- putenv(xasprintf("ABRT_VERBOSE=%u", g_verbose));
- char *pfx = getenv("ABRT_PROG_PREFIX");
- if (pfx && string_to_bool(pfx))
- msg_prefix = PROGNAME;
- if (opts & OPT_p)
- {
- msg_prefix = PROGNAME;
- putenv((char*)"ABRT_PROG_PREFIX=1");
- }
+ export_abrt_envvars(opts & OPT_p);
GtkWidget *main_window = create_main_window();
diff --git a/src/gui-wizard-gtk/main.c b/src/gui-wizard-gtk/main.c
index 2d036085..d1341b4b 100644
--- a/src/gui-wizard-gtk/main.c
+++ b/src/gui-wizard-gtk/main.c
@@ -25,8 +25,6 @@
# include <locale.h>
#endif
-#define PROGNAME "bug-reporting-wizard"
-
char *g_glade_file = NULL;
char *g_dump_dir_name = NULL;
char *g_analyze_events = NULL;
@@ -62,6 +60,8 @@ void reload_problem_data_from_dump_dir(void)
int main(int argc, char **argv)
{
+ abrt_init(argv);
+
/* I18n */
setlocale(LC_ALL, "");
#if ENABLE_NLS
@@ -69,16 +69,11 @@ int main(int argc, char **argv)
textdomain(PACKAGE);
#endif
- g_set_prgname("abrt");
gtk_init(&argc, &argv);
- char *env_verbose = getenv("ABRT_VERBOSE");
- if (env_verbose)
- g_verbose = atoi(env_verbose);
-
/* Can't keep these strings/structs static: _() doesn't support that */
const char *program_usage_string = _(
- PROGNAME" [-vp] [-g GUI_FILE] DIR\n"
+ "\b [-vp] [-g GUI_FILE] DIR\n"
"\n"
"GUI tool to analyze and report problem saved in specified DIR"
);
@@ -94,20 +89,13 @@ int main(int argc, char **argv)
OPT_BOOL( 'p', NULL, NULL , _("Add program names to log")),
OPT_END()
};
-
unsigned opts = parse_opts(argc, argv, program_options, program_usage_string);
-
- putenv(xasprintf("ABRT_VERBOSE=%u", g_verbose));
- if (opts & OPT_p)
- {
- msg_prefix = PROGNAME;
- putenv((char*)"ABRT_PROG_PREFIX=1");
- }
-
argv += optind;
if (!argv[0] || argv[1]) /* zero or >1 arguments */
show_usage_and_die(program_usage_string, program_options);
+ export_abrt_envvars(opts & OPT_p);
+
g_dump_dir_name = xstrdup(argv[0]);
/* load /etc/abrt/events/foo.{conf,xml} stuff
diff --git a/src/include/abrtlib.h b/src/include/abrtlib.h
index 85bbb289..ab12ea03 100644
--- a/src/include/abrtlib.h
+++ b/src/include/abrtlib.h
@@ -76,6 +76,7 @@ int vdprintf(int d, const char *format, va_list ap);
#include "read_write.h"
#include "strbuf.h"
#include "hash_sha1.h"
+#include "parse_options.h"
#include "abrt_problem_data.h"
#include "abrt_types.h"
diff --git a/src/lib/parse_options.c b/src/lib/parse_options.c
index d9ce8a2f..4e4a3e08 100644
--- a/src/lib/parse_options.c
+++ b/src/lib/parse_options.c
@@ -24,12 +24,55 @@
#define USAGE_OPTS_WIDTH 24
#define USAGE_GAP 2
-void show_usage_and_die(const char *usage, const struct options *opt)
+const char *g_progname;
+
+const char *abrt_init(char **argv)
{
- fprintf(stderr, _("Usage: %s\n"), usage);
+ char *env_verbose = getenv("ABRT_VERBOSE");
+ if (env_verbose)
+ g_verbose = atoi(env_verbose);
+
+ g_progname = strrchr(argv[0], '/');
+ if (g_progname)
+ g_progname++;
+ else
+ g_progname = argv[0];
+
+ char *pfx = getenv("ABRT_PROG_PREFIX");
+ if (pfx && string_to_bool(pfx))
+ msg_prefix = g_progname;
+
+ return g_progname;
+}
- if (opt->type != OPTION_GROUP)
- fputc('\n', stderr);
+void export_abrt_envvars(int pfx)
+{
+ putenv(xasprintf("ABRT_VERBOSE=%u", g_verbose));
+ if (pfx)
+ {
+ putenv((char*)"ABRT_PROG_PREFIX=1");
+ msg_prefix = g_progname;
+ }
+}
+
+void show_usage_and_die(const char *usage, const struct options *opt)
+{
+ fputs(_("Usage: "), stderr);
+ while (*usage)
+ {
+ int len = strchrnul(usage, '\b') - usage;
+ if (len > 0)
+ {
+ fprintf(stderr, "%.*s", len, usage);
+ usage += len;
+ }
+ if (*usage == '\b')
+ {
+ fputs(g_progname, stderr);
+ usage++;
+ }
+ }
+ fputs("\n\n", stderr);
for (; opt->type != OPTION_END; opt++)
{
diff --git a/src/lib/parse_options.h b/src/lib/parse_options.h
index 8c784b96..d86662e2 100644
--- a/src/lib/parse_options.h
+++ b/src/lib/parse_options.h
@@ -23,6 +23,13 @@
extern "C" {
#endif
+const char *abrt_init(char **argv);
+#define export_abrt_envvars abrt_export_abrt_envvars
+void export_abrt_envvars(int pfx);
+#define g_progname abrt_g_progname
+extern const char *g_progname;
+
+
enum parse_opt_type {
OPTION_BOOL,
OPTION_GROUP,
@@ -50,12 +57,12 @@ struct options {
* h - help
*/
#define OPT_END() { OPTION_END }
-#define OPT_BOOL(s, l, v, h) { OPTION_BOOL, (s), (l), (v), NULL, (h) }
#define OPT_GROUP(h) { OPTION_GROUP, 0, NULL, NULL, NULL, (h) }
-#define OPT_INTEGER(s, l, v, h) { OPTION_INTEGER, (s), (l), (v), "NUM", (h) }
-#define OPT_STRING(s, l, v, a, h) { OPTION_STRING, (s), (l), (v), (a), (h) }
-#define OPT_OPTSTRING(s, l, v, a, h) { OPTION_OPTSTRING, (s), (l), (v), (a), (h) }
-#define OPT_LIST(s, l, v, a, h) { OPTION_LIST, (s), (l), (v), (a), (h) }
+#define OPT_BOOL( s, l, v, h) { OPTION_BOOL , (s), (l), (v), NULL , (h) }
+#define OPT_INTEGER( s, l, v, h) { OPTION_INTEGER , (s), (l), (v), "NUM", (h) }
+#define OPT_STRING( s, l, v, a, h) { OPTION_STRING , (s), (l), (v), (a) , (h) }
+#define OPT_OPTSTRING(s, l, v, a, h) { OPTION_OPTSTRING, (s), (l), (v), (a) , (h) }
+#define OPT_LIST( s, l, v, a, h) { OPTION_LIST , (s), (l), (v), (a) , (h) }
#define OPT__VERBOSE(v) OPT_BOOL('v', "verbose", (v), _("Be verbose"))
diff --git a/src/plugins/abrt-action-analyze-backtrace.c b/src/plugins/abrt-action-analyze-backtrace.c
index 0e41b6eb..5d8c77f6 100644
--- a/src/plugins/abrt-action-analyze-backtrace.c
+++ b/src/plugins/abrt-action-analyze-backtrace.c
@@ -21,8 +21,6 @@
#include "../btparser/location.h"
#include "parse_options.h"
-#define PROGNAME "abrt-action-analyze-backtrace"
-
static const char *dump_dir_name = ".";
@@ -50,13 +48,11 @@ static void create_hash(char hash_str[SHA1_RESULT_LEN*2 + 1], const char *pInput
int main(int argc, char **argv)
{
- char *env_verbose = getenv("ABRT_VERBOSE");
- if (env_verbose)
- g_verbose = atoi(env_verbose);
+ abrt_init(argv);
/* Can't keep these strings/structs static: _() doesn't support that */
const char *program_usage_string = _(
- PROGNAME" [options] -d DIR\n"
+ "\b [options] -d DIR\n"
"\n"
"Analyzes C/C++ backtrace, generates duplication hash, backtrace rating, and identifies crash function in dump directory DIR"
);
@@ -72,11 +68,7 @@ int main(int argc, char **argv)
};
/*unsigned opts =*/ parse_opts(argc, argv, program_options, program_usage_string);
- putenv(xasprintf("ABRT_VERBOSE=%u", g_verbose));
-
- char *pfx = getenv("ABRT_PROG_PREFIX");
- if (pfx && string_to_bool(pfx))
- msg_prefix = PROGNAME;
+ export_abrt_envvars(0);
struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0);
if (!dd)
diff --git a/src/plugins/abrt-action-analyze-c.c b/src/plugins/abrt-action-analyze-c.c
index e3fe71d3..487fb8f7 100644
--- a/src/plugins/abrt-action-analyze-c.c
+++ b/src/plugins/abrt-action-analyze-c.c
@@ -19,8 +19,6 @@
#include "abrtlib.h"
#include "parse_options.h"
-#define PROGNAME "abrt-action-analyze-c"
-
static void create_hash(char hash_str[SHA1_RESULT_LEN*2 + 1], const char *pInput)
{
unsigned char hash_bytes[SHA1_RESULT_LEN];
@@ -155,15 +153,13 @@ static void trim_unstrip_output(char *result, const char *unstrip_n_output)
int main(int argc, char **argv)
{
- char *env_verbose = getenv("ABRT_VERBOSE");
- if (env_verbose)
- g_verbose = atoi(env_verbose);
+ abrt_init(argv);
const char *dump_dir_name = ".";
/* Can't keep these strings/structs static: _() doesn't support that */
const char *program_usage_string = _(
- PROGNAME" [-v] -d DIR\n"
+ "\b [-v] -d DIR\n"
"\n"
"Calculates and saves UUID of coredump in dump directory DIR"
);
@@ -179,11 +175,7 @@ int main(int argc, char **argv)
};
/*unsigned opts =*/ parse_opts(argc, argv, program_options, program_usage_string);
- putenv(xasprintf("ABRT_VERBOSE=%u", g_verbose));
-
- char *pfx = getenv("ABRT_PROG_PREFIX");
- if (pfx && string_to_bool(pfx))
- msg_prefix = PROGNAME;
+ export_abrt_envvars(0);
/* Run unstrip -n and trim its output, leaving only sizes and build ids */
diff --git a/src/plugins/abrt-action-analyze-oops.c b/src/plugins/abrt-action-analyze-oops.c
index 8fca109d..9485d3c8 100644
--- a/src/plugins/abrt-action-analyze-oops.c
+++ b/src/plugins/abrt-action-analyze-oops.c
@@ -19,8 +19,6 @@
#include "abrtlib.h"
#include "parse_options.h"
-#define PROGNAME "abrt-action-analyze-oops"
-
static void hash_oops_str(char hash_str[SHA1_RESULT_LEN*2 + 1], char *oops_buf, const char *oops_ptr)
{
unsigned char old_c;
@@ -137,15 +135,13 @@ static void hash_oops_str(char hash_str[SHA1_RESULT_LEN*2 + 1], char *oops_buf,
int main(int argc, char **argv)
{
- char *env_verbose = getenv("ABRT_VERBOSE");
- if (env_verbose)
- g_verbose = atoi(env_verbose);
+ abrt_init(argv);
const char *dump_dir_name = ".";
/* Can't keep these strings/structs static: _() doesn't support that */
const char *program_usage_string = _(
- PROGNAME" [-vs] -d DIR\n"
+ "\b [-vs] -d DIR\n"
"\n"
"Calculates and saves UUID and DUPHASH for oops dump directory DIR"
);
@@ -161,11 +157,7 @@ int main(int argc, char **argv)
};
/*unsigned opts =*/ parse_opts(argc, argv, program_options, program_usage_string);
- putenv(xasprintf("ABRT_VERBOSE=%u", g_verbose));
-
- char *pfx = getenv("ABRT_PROG_PREFIX");
- if (pfx && string_to_bool(pfx))
- msg_prefix = PROGNAME;
+ export_abrt_envvars(0);
struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0);
if (!dd)
diff --git a/src/plugins/abrt-action-analyze-python.c b/src/plugins/abrt-action-analyze-python.c
index 07f14a32..5a33fb8d 100644
--- a/src/plugins/abrt-action-analyze-python.c
+++ b/src/plugins/abrt-action-analyze-python.c
@@ -19,19 +19,15 @@
#include "abrtlib.h"
#include "parse_options.h"
-#define PROGNAME "abrt-action-analyze-python"
-
int main(int argc, char **argv)
{
- char *env_verbose = getenv("ABRT_VERBOSE");
- if (env_verbose)
- g_verbose = atoi(env_verbose);
+ abrt_init(argv);
const char *dump_dir_name = ".";
/* Can't keep these strings/structs static: _() doesn't support that */
const char *program_usage_string = _(
- PROGNAME" [-v] -d DIR\n"
+ "\b [-v] -d DIR\n"
"\n"
"Calculates and saves UUID and DUPHASH of python crash dumps"
);
@@ -47,11 +43,7 @@ int main(int argc, char **argv)
};
/*unsigned opts =*/ parse_opts(argc, argv, program_options, program_usage_string);
- putenv(xasprintf("ABRT_VERBOSE=%u", g_verbose));
-
- char *pfx = getenv("ABRT_PROG_PREFIX");
- if (pfx && string_to_bool(pfx))
- msg_prefix = PROGNAME;
+ export_abrt_envvars(0);
struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0);
if (!dd)
diff --git a/src/plugins/abrt-action-bugzilla.cpp b/src/plugins/abrt-action-bugzilla.cpp
index 995b73c1..e8a605f1 100644
--- a/src/plugins/abrt-action-bugzilla.cpp
+++ b/src/plugins/abrt-action-bugzilla.cpp
@@ -21,8 +21,6 @@
#include "abrt_problem_data.h"
#include "parse_options.h"
-#define PROGNAME "abrt-action-bugzilla"
-
#define XML_RPC_SUFFIX "/xmlrpc.cgi"
#define MAX_HOPS 5
@@ -908,9 +906,7 @@ static void report_to_bugzilla(
int main(int argc, char **argv)
{
- char *env_verbose = getenv("ABRT_VERBOSE");
- if (env_verbose)
- g_verbose = atoi(env_verbose);
+ abrt_init(argv);
map_string_h *settings = new_map_string();
const char *dump_dir_name = ".";
@@ -918,7 +914,7 @@ int main(int argc, char **argv)
/* Can't keep these strings/structs static: _() doesn't support that */
const char *program_usage_string = _(
- PROGNAME" [-v] -c CONFFILE -d DIR\n"
+ "\b [-v] -c CONFFILE -d DIR\n"
"\n"
"Reports problem to Bugzilla"
);
@@ -936,11 +932,7 @@ int main(int argc, char **argv)
};
/*unsigned opts =*/ parse_opts(argc, argv, program_options, program_usage_string);
- putenv(xasprintf("ABRT_VERBOSE=%u", g_verbose));
-
- char *pfx = getenv("ABRT_PROG_PREFIX");
- if (pfx && string_to_bool(pfx))
- msg_prefix = PROGNAME;
+ export_abrt_envvars(0);
while (conf_file)
{
diff --git a/src/plugins/abrt-action-generate-backtrace.c b/src/plugins/abrt-action-generate-backtrace.c
index 44ec752c..1d06871a 100644
--- a/src/plugins/abrt-action-generate-backtrace.c
+++ b/src/plugins/abrt-action-generate-backtrace.c
@@ -23,8 +23,6 @@
#include "parse_options.h"
-#define PROGNAME "abrt-action-generate-backtrace"
-
#define DEBUGINFO_CACHE_DIR LOCALSTATEDIR"/cache/abrt-di"
static const char *dump_dir_name = ".";
@@ -232,15 +230,13 @@ static char *get_backtrace(struct dump_dir *dd)
int main(int argc, char **argv)
{
- char *env_verbose = getenv("ABRT_VERBOSE");
- if (env_verbose)
- g_verbose = atoi(env_verbose);
+ abrt_init(argv);
char *i_opt = NULL;
/* Can't keep these strings/structs static: _() doesn't support that */
const char *program_usage_string = _(
- PROGNAME" [options] -d DIR\n"
+ "\b [options] -d DIR\n"
"\n"
"Analyzes coredump in dump directory DIR, generates and saves backtrace"
);
@@ -260,11 +256,7 @@ int main(int argc, char **argv)
};
/*unsigned opts =*/ parse_opts(argc, argv, program_options, program_usage_string);
- putenv(xasprintf("ABRT_VERBOSE=%u", g_verbose));
-
- char *pfx = getenv("ABRT_PROG_PREFIX");
- if (pfx && string_to_bool(pfx))
- msg_prefix = PROGNAME;
+ export_abrt_envvars(0);
if (i_opt)
{
diff --git a/src/plugins/abrt-action-kerneloops.c b/src/plugins/abrt-action-kerneloops.c
index 7b054a2e..99b2fea9 100644
--- a/src/plugins/abrt-action-kerneloops.c
+++ b/src/plugins/abrt-action-kerneloops.c
@@ -21,8 +21,6 @@
#include "abrtlib.h"
#include "parse_options.h"
-#define PROGNAME "abrt-action-kerneloops"
-
/* helpers */
static size_t writefunction(void *ptr, size_t size, size_t nmemb, void *stream)
{
@@ -129,9 +127,7 @@ static void report_to_kerneloops(
int main(int argc, char **argv)
{
- char *env_verbose = getenv("ABRT_VERBOSE");
- if (env_verbose)
- g_verbose = atoi(env_verbose);
+ abrt_init(argv);
map_string_h *settings = new_map_string();
const char *dump_dir_name = ".";
@@ -139,7 +135,7 @@ int main(int argc, char **argv)
/* Can't keep these strings/structs static: _() doesn't support that */
const char *program_usage_string = _(
- PROGNAME" [-v] [-c CONFFILE]... -d DIR\n"
+ "\b [-v] [-c CONFFILE]... -d DIR\n"
"\n"
"Reports kernel oops to kerneloops.org (or similar) site"
);
@@ -157,11 +153,7 @@ int main(int argc, char **argv)
};
/*unsigned opts =*/ parse_opts(argc, argv, program_options, program_usage_string);
- putenv(xasprintf("ABRT_VERBOSE=%u", g_verbose));
-
- char *pfx = getenv("ABRT_PROG_PREFIX");
- if (pfx && string_to_bool(pfx))
- msg_prefix = PROGNAME;
+ export_abrt_envvars(0);
while (conf_file)
{
diff --git a/src/plugins/abrt-action-mailx.c b/src/plugins/abrt-action-mailx.c
index d1b35564..21180854 100644
--- a/src/plugins/abrt-action-mailx.c
+++ b/src/plugins/abrt-action-mailx.c
@@ -20,8 +20,6 @@
#include "abrtlib.h"
#include "parse_options.h"
-#define PROGNAME "abrt-action-mailx"
-
static void exec_and_feed_input(const char* text, char **args)
{
int pipein[2];
@@ -131,16 +129,14 @@ static void create_and_send_email(
int main(int argc, char **argv)
{
- char *env_verbose = getenv("ABRT_VERBOSE");
- if (env_verbose)
- g_verbose = atoi(env_verbose);
+ abrt_init(argv);
const char *dump_dir_name = ".";
const char *conf_file = NULL;
/* Can't keep these strings/structs static: _() doesn't support that */
const char *program_usage_string = _(
- PROGNAME" [-v] -d DIR [-c CONFFILE]\n"
+ "\b [-v] -d DIR [-c CONFFILE]\n"
"\n"
"Sends contents of a dump directory DIR via email"
);
@@ -158,11 +154,7 @@ int main(int argc, char **argv)
};
/*unsigned opts =*/ parse_opts(argc, argv, program_options, program_usage_string);
- putenv(xasprintf("ABRT_VERBOSE=%u", g_verbose));
-
- char *pfx = getenv("ABRT_PROG_PREFIX");
- if (pfx && string_to_bool(pfx))
- msg_prefix = PROGNAME;
+ export_abrt_envvars(0);
map_string_h *settings = new_map_string();
if (conf_file)
diff --git a/src/plugins/abrt-action-print.c b/src/plugins/abrt-action-print.c
index aa61563c..d433fa52 100644
--- a/src/plugins/abrt-action-print.c
+++ b/src/plugins/abrt-action-print.c
@@ -21,8 +21,6 @@
#include "abrtlib.h"
#include "parse_options.h"
-#define PROGNAME "abrt-action-print"
-
static const char *dump_dir_name = ".";
static const char *output_file = NULL;
static const char *append = "no";
@@ -30,13 +28,11 @@ static const char *open_mode = "w";
int main(int argc, char **argv)
{
- char *env_verbose = getenv("ABRT_VERBOSE");
- if (env_verbose)
- g_verbose = atoi(env_verbose);
+ abrt_init(argv);
/* Can't keep these strings/structs static: _() doesn't support that */
const char *program_usage_string = _(
- PROGNAME" [-v] -d DIR [-o FILE] [-a yes/no] [-r]\n"
+ "\b [-v] -d DIR [-o FILE] [-a yes/no] [-r]\n"
"\n"
"Prints problem information to standard output or FILE"
);
@@ -58,11 +54,7 @@ int main(int argc, char **argv)
};
unsigned opts = parse_opts(argc, argv, program_options, program_usage_string);
- putenv(xasprintf("ABRT_VERBOSE=%u", g_verbose));
-
- char *pfx = getenv("ABRT_PROG_PREFIX");
- if (pfx && string_to_bool(pfx))
- msg_prefix = PROGNAME;
+ export_abrt_envvars(0);
if (output_file)
{
diff --git a/src/plugins/abrt-action-rhtsupport.c b/src/plugins/abrt-action-rhtsupport.c
index fbdc7f7e..4616be3f 100644
--- a/src/plugins/abrt-action-rhtsupport.c
+++ b/src/plugins/abrt-action-rhtsupport.c
@@ -24,8 +24,6 @@
#include "abrt_rh_support.h"
#include "parse_options.h"
-#define PROGNAME "abrt-action-rhtsupport"
-
static void report_to_rhtsupport(
const char *dump_dir_name,
map_string_h *settings)
@@ -266,9 +264,7 @@ static void report_to_rhtsupport(
int main(int argc, char **argv)
{
- char *env_verbose = getenv("ABRT_VERBOSE");
- if (env_verbose)
- g_verbose = atoi(env_verbose);
+ abrt_init(argv);
map_string_h *settings = new_map_string();
const char *dump_dir_name = ".";
@@ -276,7 +272,7 @@ int main(int argc, char **argv)
/* Can't keep these strings/structs static: _() doesn't support that */
const char *program_usage_string = _(
- PROGNAME" [-v] -c CONFFILE -d DIR\n"
+ "\b [-v] -c CONFFILE -d DIR\n"
"\n"
"Reports a problem to RHTSupport"
);
@@ -294,11 +290,7 @@ int main(int argc, char **argv)
};
/*unsigned opts =*/ parse_opts(argc, argv, program_options, program_usage_string);
- putenv(xasprintf("ABRT_VERBOSE=%u", g_verbose));
-
- char *pfx = getenv("ABRT_PROG_PREFIX");
- if (pfx && string_to_bool(pfx))
- msg_prefix = PROGNAME;
+ export_abrt_envvars(0);
while (conf_file)
{
diff --git a/src/plugins/abrt-action-trim-files.c b/src/plugins/abrt-action-trim-files.c
index dd7366ed..9f15038c 100644
--- a/src/plugins/abrt-action-trim-files.c
+++ b/src/plugins/abrt-action-trim-files.c
@@ -19,8 +19,6 @@
#include "abrtlib.h"
#include "parse_options.h"
-#define PROGNAME "abrt-action-trim-files"
-
static double get_dir_size(const char *dirname,
char **worst_file,
double *worst_file_size)
@@ -141,9 +139,7 @@ static void delete_files(gpointer data, gpointer user_data_unused)
int main(int argc, char **argv)
{
- char *env_verbose = getenv("ABRT_VERBOSE");
- if (env_verbose)
- g_verbose = atoi(env_verbose);
+ abrt_init(argv);
GList *dir_list = NULL;
GList *file_list = NULL;
@@ -151,7 +147,7 @@ int main(int argc, char **argv)
/* Can't keep these strings/structs static: _() doesn't support that */
const char *program_usage_string = _(
- PROGNAME" [-v] [-d SIZE:DIR]... [-f SIZE:DIR]... [-p DIR]\n"
+ "\b [-v] [-d SIZE:DIR]... [-f SIZE:DIR]... [-p DIR]\n"
"\n"
"Deletes dump dirs (-d) or files (-f) in DIRs until they are smaller than SIZE"
);
@@ -169,17 +165,12 @@ int main(int argc, char **argv)
OPT_STRING('p', NULL, &preserve , "DIR" , _("Preserve this dump dir")),
OPT_END()
};
-
/*unsigned opts =*/ parse_opts(argc, argv, program_options, program_usage_string);
argv += optind;
if (argv[0] || !(dir_list || file_list))
show_usage_and_die(program_usage_string, program_options);
- putenv(xasprintf("ABRT_VERBOSE=%u", g_verbose));
-
- char *pfx = getenv("ABRT_PROG_PREFIX");
- if (pfx && string_to_bool(pfx))
- msg_prefix = PROGNAME;
+ export_abrt_envvars(0);
g_list_foreach(dir_list, delete_dirs, preserve);
g_list_foreach(file_list, delete_files, NULL);
diff --git a/src/plugins/abrt-action-upload.c b/src/plugins/abrt-action-upload.c
index 79347a18..06ae8b20 100644
--- a/src/plugins/abrt-action-upload.c
+++ b/src/plugins/abrt-action-upload.c
@@ -22,8 +22,6 @@
#include "abrtlib.h"
#include "parse_options.h"
-#define PROGNAME "abrt-action-upload"
-
//TODO: use this for better logging
#if 0
/* "read local data from a file" callback */
@@ -232,9 +230,7 @@ static int create_and_upload_archive(
int main(int argc, char **argv)
{
- char *env_verbose = getenv("ABRT_VERBOSE");
- if (env_verbose)
- g_verbose = atoi(env_verbose);
+ abrt_init(argv);
const char *dump_dir_name = ".";
const char *conf_file = NULL;
@@ -242,7 +238,7 @@ int main(int argc, char **argv)
/* Can't keep these strings/structs static: _() doesn't support that */
const char *program_usage_string = _(
- PROGNAME" [-v] -d DIR [-c CONFFILE] [-u URL]\n"
+ "\b [-v] -d DIR [-c CONFFILE] [-u URL]\n"
"\n"
"Uploads compressed tarball of dump directory DIR"
);
@@ -262,11 +258,7 @@ int main(int argc, char **argv)
};
/*unsigned opts =*/ parse_opts(argc, argv, program_options, program_usage_string);
- putenv(xasprintf("ABRT_VERBOSE=%u", g_verbose));
-
- char *pfx = getenv("ABRT_PROG_PREFIX");
- if (pfx && string_to_bool(pfx))
- msg_prefix = PROGNAME;
+ export_abrt_envvars(0);
map_string_h *settings = new_map_string();
if (url)
diff --git a/src/plugins/abrt-dump-oops.c b/src/plugins/abrt-dump-oops.c
index f716c3db..c2879caa 100644
--- a/src/plugins/abrt-dump-oops.c
+++ b/src/plugins/abrt-dump-oops.c
@@ -23,8 +23,6 @@
#include "abrtlib.h"
#include "parse_options.h"
-#define PROGNAME "abrt-dump-oops"
-
static bool world_readable_dump = false;
static const char *debug_dumps_dir = ".";
@@ -560,13 +558,11 @@ static unsigned save_oops_to_dump_dir(GList *oops_list, unsigned oops_cnt)
int main(int argc, char **argv)
{
- char *env_verbose = getenv("ABRT_VERBOSE");
- if (env_verbose)
- g_verbose = atoi(env_verbose);
+ abrt_init(argv);
/* Can't keep these strings/structs static: _() doesn't support that */
const char *program_usage_string = _(
- PROGNAME" [-vsrowx] [-d DIR] FILE\n"
+ "\b [-vsrowx] [-d DIR] FILE\n"
"\n"
"Extract oops from syslog/dmesg file"
);
@@ -595,11 +591,11 @@ int main(int argc, char **argv)
};
unsigned opts = parse_opts(argc, argv, program_options, program_usage_string);
- putenv(xasprintf("ABRT_VERBOSE=%u", g_verbose));
- msg_prefix = PROGNAME;
- if ((opts & OPT_s)
- || getenv("ABRT_SYSLOG")
- ) {
+ export_abrt_envvars(0);
+
+ msg_prefix = g_progname;
+ if ((opts & OPT_s) || getenv("ABRT_SYSLOG"))
+ {
openlog(msg_prefix, 0, LOG_DAEMON);
logmode = LOGMODE_SYSLOG;
}
diff --git a/src/plugins/abrt-retrace-client.c b/src/plugins/abrt-retrace-client.c
index 53ace4c0..5ade7928 100644
--- a/src/plugins/abrt-retrace-client.c
+++ b/src/plugins/abrt-retrace-client.c
@@ -875,6 +875,8 @@ static int run_batch(bool delete_temp_archive)
int main(int argc, char **argv)
{
+ abrt_init(argv);
+
const char *task_id = NULL;
const char *task_password = NULL;
@@ -922,9 +924,6 @@ int main(int argc, char **argv)
const char usage[] = "abrt-retrace-client <operation> [options]\n"
"Operations: create/status/backtrace/log/batch";
- char *env_verbose = getenv("ABRT_VERBOSE");
- if (env_verbose)
- g_verbose = atoi(env_verbose);
char *env_url = getenv("RETRACE_SERVER_URL");
if (env_url)
url = env_url;