On 07/23/2015 08:35 AM, Ján Tomko wrote:
[reducing the cc-list]
On Fri, Jul 17, 2015 at 02:43:31PM -0400, Laine Stump wrote:
> There are some non-0 default values in virDomainControllerDef (and
> will soon be more) that are easier to not forget if the remembering is
> done by a single initializer function (rather than inline code after
> allocating the obejct with generic VIR_ALLOC().
> ---
> new in V2
>
> src/conf/domain_conf.c | 64 +++++++++++++++++++++++++++++++++-----------------
> 1 file changed, 43 insertions(+), 21 deletions(-)
>
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index 5a9a88d..8dd4bf0 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -1527,6 +1527,37 @@ virDomainDiskSetFormat(virDomainDiskDefPtr def, int format)
> }
>
>
> +static virDomainControllerDefPtr
> +virDomainControllerDefNew(virDomainControllerType type)
> +{
> + virDomainControllerDefPtr def;
> +
> + if (VIR_ALLOC(def) < 0)
> + return NULL;
> +
> + def->type = type;
> +
> + /* initialize anything that has a non-0 default */
> + switch ((virDomainControllerType) def->type) {
> + case VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL:
> + def->opts.vioserial.ports = -1;
> + def->opts.vioserial.vectors = -1;
> + break;
> + case VIR_DOMAIN_CONTROLLER_TYPE_PCI:
> + case VIR_DOMAIN_CONTROLLER_TYPE_IDE:
> + case VIR_DOMAIN_CONTROLLER_TYPE_FDC:
> + case VIR_DOMAIN_CONTROLLER_TYPE_SCSI:
> + case VIR_DOMAIN_CONTROLLER_TYPE_SATA:
> + case VIR_DOMAIN_CONTROLLER_TYPE_CCID:
> + case VIR_DOMAIN_CONTROLLER_TYPE_USB:
> + case VIR_DOMAIN_CONTROLLER_TYPE_LAST:
> + break;
> + }
> +
The model could be initialized to -1 here as well.
> + return def;
> +}
> +
> +
> void virDomainControllerDefFree(virDomainControllerDefPtr def)
> {
> if (!def)
> @@ -7610,18 +7642,18 @@ virDomainControllerDefParseXML(xmlNodePtr node,
>
> ctxt->node = node;
>
> - if (VIR_ALLOC(def) < 0)
> - return NULL;
> -
> - type = virXMLPropString(node, "type");
> - if (type) {
> - if ((def->type = virDomainControllerTypeFromString(type)) < 0) {
> + typeStr = virXMLPropString(node, "type");
> + if (typeStr) {
> + if ((type = virDomainControllerTypeFromString(typeStr)) < 0) {
> virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> - _("Unknown controller type '%s'"),
type);
> + _("Unknown controller type '%s'"),
typeStr);
> goto error;
> }
> }
>
> + if (!(def = virDomainControllerDefNew(type)))
> + return NULL;
goto error;
Otherwise typeStr gets leaked.
Thanks! I've made both of those changes.