[libvirt] [PATCH 03/10] Add an internal <secret> XML handling API

Daniel Veillard veillard at redhat.com
Tue Sep 8 09:18:55 UTC 2009


On Mon, Sep 07, 2009 at 04:12:38PM +0200, Miloslav Trmač wrote:
> Add a <secret> XML handling API, separate from the local driver, to
> avoid manually generating XML in other parts of libvirt.
> 
> * src/secret_conf.c, src/secret_conf.h: New files.
> * po/POTFILES.in, src/Makefile.am: Add secret_conf.
[...]
> +VIR_ENUM_IMPL(virSecretUsageType, VIR_SECRET_USAGE_TYPE_LAST, "none", "volume")
> +
> +void
> +virSecretDefFree(virSecretDefPtr def)
> +{
> +    if (def == NULL)
> +        return;
> +
> +    VIR_FREE(def->id);
> +    VIR_FREE(def->description);
> +    switch (def->usage_type) {
> +    case VIR_SECRET_USAGE_TYPE_NONE:
> +        break;
> +
> +    case VIR_SECRET_USAGE_TYPE_VOLUME:
> +        VIR_FREE(def->usage.volume);
> +        break;
> +
> +    default:
> +        VIR_ERROR(_("unexpected secret usage type %d"), def->usage_type);
> +        break;

  Hum, since the virSecretDefPtr is allocated by our own code, it's
  probably better to remove the default so that the compiler can tell us
  we missed one enum case if new ones gets added.

> +    }
> +    VIR_FREE(def);
> +}
> +
> +static int
> +virSecretDefParseUsage(virConnectPtr conn, xmlXPathContextPtr ctxt,
> +                       virSecretDefPtr def)
> +{
> +    char *type_str;
> +    int type;
> +
> +    type_str = virXPathString(conn, "string(./usage/@type)", ctxt);
> +    if (type_str == NULL) {
> +        virSecretReportError(conn, VIR_ERR_XML_ERROR, "%s",
> +                             _("unknown secret usage type"));

  _("missing secret usage type") would be more appropriate I guess

> +        return -1;
> +    }
> +    type = virSecretUsageTypeTypeFromString(type_str);
> +    if (type < 0) {
> +        virSecretReportError(conn, VIR_ERR_XML_ERROR,
> +                             _("unknown secret usage type %s"), type_str);
> +        VIR_FREE(type_str);
> +        return -1;
> +    }
> +    VIR_FREE(type_str);
> +    def->usage_type = type;
> +    switch (def->usage_type) {
> +    case VIR_SECRET_USAGE_TYPE_NONE:
> +        break;
> +
> +    case VIR_SECRET_USAGE_TYPE_VOLUME:
> +        def->usage.volume = virXPathString(conn, "string(./usage/volume)",
> +                                           ctxt);
> +        break;
> +
> +    default:

  Again default: here means a mismatch between
  virSecretUsageTypeTypeFromString and this function, best handled
statically IMHO.

> +        virSecretReportError(conn, VIR_ERR_INTERNAL_ERROR,
> +                             _("unexpected secret usage type %d"),
> +                             def->usage_type);
> +        return -1;
> +    }
> +    return 0;
> +}
[...]

  But this is mostly stylistic, ACK with the error message change

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list