"virsh connect ''" should try to connect to the default connection,
but the previous patch made it issue a warning about an invalid URI.
* tools/virsh.c (VSH_OFLAG_EMPTY_OK): New option flag.
(vshCommandOptString): Per the declaration, value is required to
be non-NULL. Honor new flag.
(opts_connect): Allow empty string connection.
---
tools/virsh.c | 22 +++++++++++++---------
1 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/tools/virsh.c b/tools/virsh.c
index 42ebd55..ef0cfea 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -152,8 +152,9 @@ typedef enum {
/*
* Command Option Flags
*/
-#define VSH_OFLAG_NONE 0 /* without flags */
-#define VSH_OFLAG_REQ (1 << 1) /* option required */
+#define VSH_OFLAG_NONE 0 /* without flags */
+#define VSH_OFLAG_REQ (1 << 1) /* option required */
+#define VSH_OFLAG_EMPTY_OK (1 << 2) /* empty string option allowed */
/* dummy */
typedef struct __vshControl vshControl;
@@ -685,7 +686,8 @@ static const vshCmdInfo info_connect[] = {
};
static const vshCmdOptDef opts_connect[] = {
- {"name", VSH_OT_DATA, 0, N_("hypervisor connection URI")},
+ {"name", VSH_OT_DATA, VSH_OFLAG_EMPTY_OK,
+ N_("hypervisor connection URI")},
{"readonly", VSH_OT_BOOL, 0, N_("read-only connection")},
{NULL, 0, 0, NULL}
};
@@ -10993,14 +10995,16 @@ vshCommandOptString(const vshCmd *cmd, const char *name, const
char **value)
int ret = 0;
if (arg && arg->data) {
- ret = -1;
- if (*arg->data) {
- if (value) {
- *value = arg->data;
- ret = 1;
- }
+ if (*arg->data
+ || (arg->def && (arg->def->flag & VSH_OFLAG_EMPTY_OK)))
{
+ *value = arg->data;
+ ret = 1;
} else if (arg->def && ((arg->def->flag) & VSH_OFLAG_REQ))
{
vshError(NULL, _("Missing required option '%s'"), name);
+ ret = -1;
+ } else {
+ /* Treat "--option ''" as if option had not been specified.
*/
+ ret = 0;
}
}
--
1.7.4