Support passing a private ptr to CALLBACK options. This will make it possible
assigning options into specific struct kvms by passing them directly to parsers.

Signed-off-by: Sasha Levin <levinsasha...@gmail.com>
---
 tools/kvm/builtin-run.c               | 13 +++++++------
 tools/kvm/include/kvm/parse-options.h | 16 ++++++++++------
 2 files changed, 17 insertions(+), 12 deletions(-)

diff --git a/tools/kvm/builtin-run.c b/tools/kvm/builtin-run.c
index 2b4315b..52e0190 100644
--- a/tools/kvm/builtin-run.c
+++ b/tools/kvm/builtin-run.c
@@ -417,9 +417,10 @@ static int shmem_parser(const struct option *opt, const 
char *arg, int unset)
        OPT_CALLBACK('\0', "shmem", NULL,                               \
                     "[pci:]<addr>:<size>[:handle=<handle>][:create]",  \
                     "Share host shmem with guest via pci device",      \
-                    shmem_parser),                                     \
-       OPT_CALLBACK('d', "disk", NULL, "image or rootfs_dir", "Disk    \
-                       image or rootfs directory", img_name_parser),   \
+                    shmem_parser, NULL),                               \
+       OPT_CALLBACK('d', "disk", kvm, "image or rootfs_dir", "Disk     \
+                       image or rootfs directory", img_name_parser,    \
+                       NULL),                                          \
        OPT_BOOLEAN('\0', "balloon", &(cfg)->balloon, "Enable virtio    \
                        balloon"),                                      \
        OPT_BOOLEAN('\0', "vnc", &(cfg)->vnc, "Enable VNC framebuffer"),\
@@ -428,14 +429,14 @@ static int shmem_parser(const struct option *opt, const 
char *arg, int unset)
                        Number Generator"),                             \
        OPT_CALLBACK('\0', "9p", NULL, "dir_to_share,tag_name",         \
                     "Enable virtio 9p to share files between host and  \
-                    guest", virtio_9p_rootdir_parser),                 \
+                    guest", virtio_9p_rootdir_parser, NULL),           \
        OPT_STRING('\0', "console", &(cfg)->console, "serial, virtio or \
                        hv", "Console to use"),                         \
        OPT_STRING('\0', "dev", &(cfg)->dev, "device_file",             \
                        "KVM device file"),                             \
        OPT_CALLBACK('\0', "tty", NULL, "tty id",                       \
                     "Remap guest TTY into a pty on the host",          \
-                    tty_parser),                                       \
+                    tty_parser, NULL),                                 \
        OPT_STRING('\0', "sandbox", &(cfg)->sandbox, "script",          \
                        "Run this script when booting into custom       \
                        rootfs"),                                       \
@@ -455,7 +456,7 @@ static int shmem_parser(const struct option *opt, const 
char *arg, int unset)
        OPT_GROUP("Networking options:"),                               \
        OPT_CALLBACK_DEFAULT('n', "network", NULL, "network params",    \
                     "Create a new guest NIC",                          \
-                    netdev_parser, NULL),                              \
+                    netdev_parser, NULL, NULL),                        \
        OPT_BOOLEAN('\0', "no-dhcp", &(cfg)->no_dhcp, "Disable kernel DHCP\
                        in rootfs mode"),                               \
                                                                        \
diff --git a/tools/kvm/include/kvm/parse-options.h 
b/tools/kvm/include/kvm/parse-options.h
index 7886ff7..a8a25d0 100644
--- a/tools/kvm/include/kvm/parse-options.h
+++ b/tools/kvm/include/kvm/parse-options.h
@@ -89,6 +89,7 @@ const char *long_name;
 void *value;
 const char *argh;
 const char *help;
+void *ptr;
 
 int flags;
 parse_opt_cb *callback;
@@ -150,7 +151,7 @@ intptr_t defval;
        .help = (h)                         \
 }
 
-#define OPT_CALLBACK(s, l, v, a, h, f)      \
+#define OPT_CALLBACK(s, l, v, a, h, f, p)   \
 {                                          \
        .type = OPTION_CALLBACK,            \
        .short_name = (s),                  \
@@ -158,10 +159,11 @@ intptr_t defval;
        .value = (v),                       \
        (a),                                \
        .help = (h),                        \
-       .callback = (f)                     \
+       .callback = (f),                    \
+       .ptr = (p),                         \
 }
 
-#define OPT_CALLBACK_NOOPT(s, l, v, a, h, f) \
+#define OPT_CALLBACK_NOOPT(s, l, v, a, h, f, p) \
 {                                          \
        .type = OPTION_CALLBACK,            \
        .short_name = (s),                  \
@@ -170,10 +172,11 @@ intptr_t defval;
        (a),                                \
        .help = (h),                        \
        .callback = (f),                    \
-       .flags = PARSE_OPT_NOARG            \
+       .flags = PARSE_OPT_NOARG,           \
+       .ptr = (p),                         \
 }
 
-#define OPT_CALLBACK_DEFAULT(s, l, v, a, h, f, d) \
+#define OPT_CALLBACK_DEFAULT(s, l, v, a, h, f, d, p) \
 {                                          \
        .type = OPTION_CALLBACK,            \
        .short_name = (s),                  \
@@ -182,7 +185,8 @@ intptr_t defval;
        .help = (h),                        \
        .callback = (f),                    \
        .defval = (intptr_t)d,              \
-       .flags = PARSE_OPT_LASTARG_DEFAULT  \
+       .flags = PARSE_OPT_LASTARG_DEFAULT, \
+       .ptr = (p)                          \
 }
 
 #define OPT_END() { .type = OPTION_END }
-- 
1.7.12

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to