summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenys Vlasenko <dvlasenk@redhat.com>2010-10-08 15:24:30 +0200
committerDenys Vlasenko <dvlasenk@redhat.com>2010-10-08 15:24:30 +0200
commit8c7950b3b2da5c7041190626aa5e30e66d9b8f6a (patch)
tree95daf85b395617c0421ec0dfc15d2e0a92ce8a58
parentc963dd2b23debcf1d650190717cd89d266acef5c (diff)
downloadabrt-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.c41
-rw-r--r--lib/utils/parse_options.h1
-rw-r--r--lib/utils/xfuncs.c2
-rw-r--r--src/daemon/Daemon.cpp16
-rw-r--r--src/daemon/abrt-action-generate-backtrace.c15
-rw-r--r--src/daemon/abrt-action-save-package-data.cpp15
-rw-r--r--src/daemon/abrt-server.c18
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)