diff options
author | Denys Vlasenko <dvlasenk@redhat.com> | 2010-10-08 15:24:30 +0200 |
---|---|---|
committer | Denys Vlasenko <dvlasenk@redhat.com> | 2010-10-08 15:24:30 +0200 |
commit | 8c7950b3b2da5c7041190626aa5e30e66d9b8f6a (patch) | |
tree | 95daf85b395617c0421ec0dfc15d2e0a92ce8a58 | |
parent | c963dd2b23debcf1d650190717cd89d266acef5c (diff) | |
download | abrt-8c7950b3b2da5c7041190626aa5e30e66d9b8f6a.tar.gz abrt-8c7950b3b2da5c7041190626aa5e30e66d9b8f6a.tar.xz abrt-8c7950b3b2da5c7041190626aa5e30e66d9b8f6a.zip |
add --help option in parse_opts(), not at every call site.
This patch removes the need to add --help option to every program.
It is added (and handled) by parse_opts().
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
-rw-r--r-- | lib/utils/parse_options.c | 41 | ||||
-rw-r--r-- | lib/utils/parse_options.h | 1 | ||||
-rw-r--r-- | lib/utils/xfuncs.c | 2 | ||||
-rw-r--r-- | src/daemon/Daemon.cpp | 16 | ||||
-rw-r--r-- | src/daemon/abrt-action-generate-backtrace.c | 15 | ||||
-rw-r--r-- | src/daemon/abrt-action-save-package-data.cpp | 15 | ||||
-rw-r--r-- | src/daemon/abrt-server.c | 18 |
7 files changed, 52 insertions, 56 deletions
diff --git a/lib/utils/parse_options.c b/lib/utils/parse_options.c index e65a1bb9..08fac9ec 100644 --- a/lib/utils/parse_options.c +++ b/lib/utils/parse_options.c @@ -3,15 +3,6 @@ #include "abrtlib.h" #include "parse_options.h" -static int parse_opt_size(const struct options *opt) -{ - unsigned size = 1; - for (; opt->type != OPTION_END; opt++) - size++; - - return size; -} - #define USAGE_OPTS_WIDTH 24 #define USAGE_GAP 2 @@ -64,16 +55,26 @@ void parse_usage_and_die(const char * const * usage, const struct options *opt) exit(1); } +static int parse_opt_size(const struct options *opt) +{ + unsigned size = 0; + for (; opt->type != OPTION_END; opt++) + size++; + + return size; +} + void parse_opts(int argc, char **argv, const struct options *opt, const char * const usage[]) { + int help = 0; int size = parse_opt_size(opt); struct strbuf *shortopts = strbuf_new(); - struct option *longopts = xcalloc(sizeof(struct options), size); + struct option *longopts = xzalloc(sizeof(longopts[0]) * (size+2)); int ii; - for (ii = 0; ii < size - 1; ++ii) + for (ii = 0; ii < size; ++ii) { longopts[ii].name = opt[ii].long_name; @@ -94,14 +95,20 @@ void parse_opts(int argc, char **argv, const struct options *opt, case OPTION_END: break; } - longopts[ii].flag = 0; + /*longopts[ii].flag = 0; - xzalloc did it */ longopts[ii].val = opt[ii].short_name; } - - longopts[ii].name = 0; + longopts[ii].name = "help"; + /*longopts[ii].has_arg = 0; - xzalloc did it */ + longopts[ii].flag = &help; + longopts[ii].val = 1; + /* xzalloc did it already: + ii++; + longopts[ii].name = NULL; longopts[ii].has_arg = 0; - longopts[ii].flag = 0; + longopts[ii].flag = NULL; longopts[ii].val = 0; + */ int option_index = 0; while (1) @@ -111,14 +118,14 @@ void parse_opts(int argc, char **argv, const struct options *opt, if (c == -1) break; - if (c == '?') + if (c == '?' || help) { free(longopts); strbuf_free(shortopts); parse_usage_and_die(usage, opt); } - for (ii = 0; ii < size - 1; ++ii) + for (ii = 0; ii < size; ++ii) { if (opt[ii].short_name == c) { diff --git a/lib/utils/parse_options.h b/lib/utils/parse_options.h index 9f40fc94..9c4758af 100644 --- a/lib/utils/parse_options.h +++ b/lib/utils/parse_options.h @@ -38,7 +38,6 @@ struct options { #define OPT_STRING(s, l, v, a, h) { OPTION_STRING, (s), (l), (v), (a), (h) } #define OPT__VERBOSE(v) OPT_BOOL('v', "verbose", (v), "be verbose") -#define OPT__HELP(v) OPT_BOOL('h', "help", (v), "show this help message") void parse_opts(int argc, char **argv, const struct options *opt, const char * const usage[]); diff --git a/lib/utils/xfuncs.c b/lib/utils/xfuncs.c index 214ce426..d5166037 100644 --- a/lib/utils/xfuncs.c +++ b/lib/utils/xfuncs.c @@ -39,6 +39,7 @@ int close_on_exec_on(int fd) return fcntl(fd, F_SETFD, FD_CLOEXEC); } +#if 0 /* unused */ void *xcalloc(size_t nmemb, size_t size) { void *ptr = calloc(nmemb, size); @@ -46,6 +47,7 @@ void *xcalloc(size_t nmemb, size_t size) die_out_of_memory(); return ptr; } +#endif // Die if we can't allocate size bytes of memory. void* xmalloc(size_t size) diff --git a/src/daemon/Daemon.cpp b/src/daemon/Daemon.cpp index aa3cae4c..3689a42b 100644 --- a/src/daemon/Daemon.cpp +++ b/src/daemon/Daemon.cpp @@ -85,11 +85,6 @@ using namespace std; * Both are sent as unicast to last client set by set_client_name(name). * If set_client_name(NULL) was done, they are not sent. */ -static const char * const abrtd_usage[] = { - _("abrtd [options]"), - NULL -}; - CCommLayerServer* g_pCommLayer; static bool daemonize = true; @@ -865,11 +860,15 @@ static void sanitize_dump_dir_rights() ensure_writable_dir(VAR_RUN"/abrt", 0755, "root"); } -static int daemonize_opt, syslog_opt, help_opt; +static int daemonize_opt, syslog_opt; static char *timeout_opt; +static const char * const abrtd_usage[] = { + _("abrtd [options]"), + NULL +}; + static struct options abrtd_options[] = { - OPT__HELP(&help_opt), OPT__VERBOSE(&g_verbose), OPT_GROUP(""), OPT_BOOL( 'd' , 0, &daemonize_opt, _("Do not daemonize")), @@ -898,9 +897,6 @@ int main(int argc, char** argv) parse_opts(argc, argv, abrtd_options, abrtd_usage); - if (help_opt) - parse_usage_and_die(abrtd_usage, abrtd_options); - if (daemonize_opt) daemonize = false; diff --git a/src/daemon/abrt-action-generate-backtrace.c b/src/daemon/abrt-action-generate-backtrace.c index 7e6f8241..a031aabd 100644 --- a/src/daemon/abrt-action-generate-backtrace.c +++ b/src/daemon/abrt-action-generate-backtrace.c @@ -23,11 +23,6 @@ #define DEBUGINFO_CACHE_DIR LOCALSTATEDIR"/cache/abrt-di" -static const char * const abrt_action_generage_backtrace_usage[] = { - "abrt-action-generate-backtrace [options] -d DIR", - NULL -}; - static const char *dump_dir_name = "."; static char *debuginfo_dirs; static int exec_timeout_sec = 60; @@ -246,10 +241,14 @@ static char *get_backtrace(struct dump_dir *dd) } static char *d_opt, *i_opt; -static int s_opt, help_opt; +static int s_opt; + +static const char * const abrt_action_generage_backtrace_usage[] = { + "abrt-action-generate-backtrace [options] -d DIR", + NULL +}; static struct options abrt_action_generate_backtrace_options[] = { - OPT__HELP(&help_opt), OPT__VERBOSE(&g_verbose), OPT_GROUP(""), OPT_STRING( 'd' , 0, &d_opt, "dir", "Crash dump directory"), @@ -268,7 +267,7 @@ int main(int argc, char **argv) parse_opts(argc, argv, abrt_action_generate_backtrace_options, abrt_action_generage_backtrace_usage); - if (help_opt || !d_opt) + if (!d_opt) parse_usage_and_die(abrt_action_generage_backtrace_usage, abrt_action_generate_backtrace_options); diff --git a/src/daemon/abrt-action-save-package-data.cpp b/src/daemon/abrt-action-save-package-data.cpp index 7bd68c02..5a5114d8 100644 --- a/src/daemon/abrt-action-save-package-data.cpp +++ b/src/daemon/abrt-action-save-package-data.cpp @@ -23,11 +23,6 @@ #include "rpm.h" #include "parse_options.h" -static const char * const abrt_action_save_package_data_usage[] = { - "abrt-action-save-package-data [options] -d DIR", - NULL -}; - /** * Returns the first full path argument in the command line or NULL. * Skips options are in form "-XXX". @@ -273,10 +268,14 @@ static int SavePackageDescriptionToDebugDump(const char *dump_dir_name) } static char *d_opt; -static int s_opt, help_opt; +static int s_opt; + +static const char * const abrt_action_save_package_data_usage[] = { + "abrt-action-save-package-data [options] -d DIR", + NULL +}; static struct options abrt_action_save_package_data_options[] = { - OPT__HELP(&help_opt), OPT__VERBOSE(&g_verbose), OPT_GROUP(""), OPT_STRING( 'd' , 0, &d_opt, "dir", "Crash dump directory"), @@ -295,7 +294,7 @@ int main(int argc, char **argv) parse_opts(argc, argv, abrt_action_save_package_data_options, abrt_action_save_package_data_usage); - if (help_opt || !d_opt) + if (!d_opt) parse_usage_and_die(abrt_action_save_package_data_usage, abrt_action_save_package_data_options); diff --git a/src/daemon/abrt-server.c b/src/daemon/abrt-server.c index b70388b8..32fd9aa9 100644 --- a/src/daemon/abrt-server.c +++ b/src/daemon/abrt-server.c @@ -76,11 +76,6 @@ Finalizing dump creation: \0 */ -static const char * const abrt_server_usage[] = { - "abrt-server [options]", - NULL -}; - /* Buffer for incomplete incoming messages. */ static char *messagebuf_data = NULL; static unsigned messagebuf_len = 0; @@ -282,10 +277,14 @@ static void process_message(const char *message) static void dummy_handler(int sig_unused) {} -static int s_opt, help_opt; +static int s_opt; + +static const char * const abrt_server_usage[] = { + "abrt-server [options]", + NULL +}; static struct options abrt_server_options[] = { - OPT__HELP(&help_opt), OPT__VERBOSE(&g_verbose), OPT_GROUP(""), OPT_INTEGER( 'u' , 0, &client_uid, "Use UID as client uid"), @@ -299,14 +298,9 @@ int main(int argc, char **argv) if (env_verbose) g_verbose = atoi(env_verbose); - parse_opts(argc, argv, abrt_server_options, abrt_server_usage); - if (help_opt) - parse_usage_and_die(abrt_server_usage, - abrt_server_options); - putenv(xasprintf("ABRT_VERBOSE=%u", g_verbose)); msg_prefix = xasprintf("abrt-server[%u]", getpid()); if (s_opt) |