Message ID | 1296683167-24060-1-git-send-email-alevy@redhat.com |
---|---|
State | New |
Headers | show |
Please ignore, duplicate of 01/20 already on the list. It took so long for 01/20 to appear on the list that I thought it was lost. Alon On Wed, Feb 02, 2011 at 11:46:07PM +0200, Alon Levy wrote: > another callback added to PropertyInfo, for later use by PROP_TYPE_ENUM. > Allows printing of runtime computed options when doing: > qemu -device foo,? > --- > hw/qdev.c | 10 +++++++++- > hw/qdev.h | 1 + > 2 files changed, 10 insertions(+), 1 deletions(-) > > diff --git a/hw/qdev.c b/hw/qdev.c > index c7fec44..0b2ad3d 100644 > --- a/hw/qdev.c > +++ b/hw/qdev.c > @@ -187,7 +187,15 @@ int qdev_device_help(QemuOpts *opts) > if (!prop->info->parse) { > continue; /* no way to set it, don't show */ > } > - error_printf("%s.%s=%s\n", info->name, prop->name, prop->info->name); > + if (prop->info->print_options) { > + char buf[256]; > + int ret; > + ret = prop->info->print_options(info, prop, buf, sizeof(buf) - 3); > + error_printf("%s.%s=%s%s\n", info->name, prop->name, buf, > + ret == sizeof(buf) - 3 ? "..." : "" ); > + } else { > + error_printf("%s.%s=%s\n", info->name, prop->name, prop->info->name); > + } > } > return 1; > } > diff --git a/hw/qdev.h b/hw/qdev.h > index 9808f85..fa3221b 100644 > --- a/hw/qdev.h > +++ b/hw/qdev.h > @@ -109,6 +109,7 @@ struct PropertyInfo { > enum PropertyType type; > int (*parse)(DeviceState *dev, Property *prop, const char *str); > int (*print)(DeviceState *dev, Property *prop, char *dest, size_t len); > + int (*print_options)(DeviceInfo *info, Property *prop, char *dest, size_t len); > void (*free)(DeviceState *dev, Property *prop); > }; > > -- > 1.7.4 > >
diff --git a/hw/qdev.c b/hw/qdev.c index c7fec44..0b2ad3d 100644 --- a/hw/qdev.c +++ b/hw/qdev.c @@ -187,7 +187,15 @@ int qdev_device_help(QemuOpts *opts) if (!prop->info->parse) { continue; /* no way to set it, don't show */ } - error_printf("%s.%s=%s\n", info->name, prop->name, prop->info->name); + if (prop->info->print_options) { + char buf[256]; + int ret; + ret = prop->info->print_options(info, prop, buf, sizeof(buf) - 3); + error_printf("%s.%s=%s%s\n", info->name, prop->name, buf, + ret == sizeof(buf) - 3 ? "..." : "" ); + } else { + error_printf("%s.%s=%s\n", info->name, prop->name, prop->info->name); + } } return 1; } diff --git a/hw/qdev.h b/hw/qdev.h index 9808f85..fa3221b 100644 --- a/hw/qdev.h +++ b/hw/qdev.h @@ -109,6 +109,7 @@ struct PropertyInfo { enum PropertyType type; int (*parse)(DeviceState *dev, Property *prop, const char *str); int (*print)(DeviceState *dev, Property *prop, char *dest, size_t len); + int (*print_options)(DeviceInfo *info, Property *prop, char *dest, size_t len); void (*free)(DeviceState *dev, Property *prop); };