
On Tue, Oct 01, 2019 at 10:48:50AM +0100, Daniel P. Berrangé wrote:
On Tue, Oct 01, 2019 at 11:37:17AM +0200, Pavel Hrdina wrote:
On Fri, Sep 27, 2019 at 06:17:31PM +0100, Daniel P. Berrangé wrote:
The GOptionContext API has the benefit over getopt_long that it will automatically handle --help output formatting.
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com> --- tools/virsh.c | 303 ++++++++++++++++++++++---------------------------- 1 file changed, 135 insertions(+), 168 deletions(-)
diff --git a/tools/virsh.c b/tools/virsh.c index ec20f35a77..6c469ff576 100644 --- a/tools/virsh.c +++ b/tools/virsh.c @@ -23,7 +23,6 @@
#include <stdarg.h> #include <unistd.h> -#include <getopt.h> #include <sys/time.h> #include <fcntl.h> #include <time.h> @@ -445,53 +444,36 @@ virshDeinit(vshControl *ctl) }
+ { "version", 'v', G_OPTION_FLAG_OPTIONAL_ARG, + G_OPTION_ARG_CALLBACK, virshVersion, + _("print short version"), "[short]" }, + { "version", 'V', 0, + G_OPTION_ARG_NONE, &version, + _("print long version"), "long" },
We should be able to have both -v and -V call virshVersion if the functions will look like this:
static gboolean virshVersion(const gchar *option_name, const gchar *value, gpointer data, GError **error G_GNUC_UNUSED) { vshControl *ctl = data;
if (STREQ(option_name, "-V") || STREQ_NULLABLE(value, "long")) virshShowVersion(ctl); else puts(VERSION);
exit(EXIT_SUCCESS); }
That way we will have only a single place where the version printing code is.
Hmm, so "option_name" in the callback is the option that the user actually passed ? I was thinking it was the option name from the static array - ie it would always be "version". If you're right though, this is definitely my preference.
It is the option actually used by the user, from the glib docs: option_name The name of the option being parsed. This will be either a single dash followed by a single letter (for a short name) or two dashes followed by a long option name. Pavel