diff options
author | Karel Klic <kklic@redhat.com> | 2011-05-05 13:51:03 +0200 |
---|---|---|
committer | Karel Klic <kklic@redhat.com> | 2011-05-05 13:51:03 +0200 |
commit | cb09f7742092950787283e6cbb4ac7af9e8d00fd (patch) | |
tree | 6199412f207fbb6a262b77e33b61de70aa550d20 | |
parent | d01e3b4c482bd243a0265b6292f1f919f3750fef (diff) | |
parent | 13e0fc50583209894d699def95ecd2e23feac558 (diff) | |
download | abrt-cb09f7742092950787283e6cbb4ac7af9e8d00fd.tar.gz abrt-cb09f7742092950787283e6cbb4ac7af9e8d00fd.tar.xz abrt-cb09f7742092950787283e6cbb4ac7af9e8d00fd.zip |
Merge branch 'master' of ssh://git.fedorahosted.org/git/abrt
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; |