[libvirt] [PATCH v3 14/34] Adapt to VIR_STRDUP and VIR_STRNDUP in src/openvz/*

Eric Blake eblake at redhat.com
Wed May 8 23:43:33 UTC 2013


On 05/03/2013 08:53 AM, Michal Privoznik wrote:
> ---
>  src/openvz/openvz_conf.c   | 45 ++++++++++++++++++++++-----------------------
>  src/openvz/openvz_driver.c | 39 +++++++++++++++------------------------
>  2 files changed, 37 insertions(+), 47 deletions(-)
> 
> diff --git a/src/openvz/openvz_conf.c b/src/openvz/openvz_conf.c
> @@ -607,10 +603,10 @@ int openvzLoadDomains(struct openvz_driver *driver) {
>              goto cleanup;
>          }
>  
> -        if (!(def->os.type = strdup("exe")))
> -            goto no_memory;
> -        if (!(def->os.init = strdup("/sbin/init")))
> -            goto no_memory;
> +        if (VIR_STRDUP(def->os.type, "exe") < 0)
> +            goto cleanup;
> +        if (VIR_STRDUP(def->os.init, "/sbin/init") < 0)
> +            goto cleanup;

Could chain this in one 'if'.

> @@ -800,8 +796,7 @@ openvzReadConfigParam(const char *conf_file, const char *param, char **value)
>          saveptr = NULL;
>          if ((token = strtok_r(sf, "\"\t\n", &saveptr)) != NULL) {
>              VIR_FREE(*value);
> -            *value = strdup(token);
> -            if (*value == NULL) {
> +            if (VIR_STRDUP(*value, token) < 0) {
>                  err = 1;

silent->noisy, but leaves other error paths in this function silent (for
example, if fopen fails) - so there is no way the caller could be
reporting all errors correctly.  This one could probably use another
followup patch to clean it all up to have this function report errors on
all paths, and audit callers to avoid duplicate reporting.

Furthermore, we are using 'int err' as a boolean, so while we clean
things up, we should fix that.

> +++ b/src/openvz/openvz_driver.c
> @@ -88,7 +88,7 @@ static void openvzDriverUnlock(struct openvz_driver *driver)
>  
>  struct openvz_driver ovz_driver;
>  
> -static void cmdExecFree(const char *cmdExec[])
> +static void cmdExecFree(char *cmdExec[])

Do we even need this function, or can virStringFreeList do the same?
For that matter, can we use virCommand instead of hand-rolling our own
char*[] for command execution?  But that can be a followup patch.

> @@ -772,12 +766,14 @@ openvzGenerateVethName(int veid, char *dev_name_ve)
>  {
>      char    dev_name[32];
>      int     ifNo = 0;
> +    char    *ret;
>  
>      if (sscanf(dev_name_ve, "%*[^0-9]%d", &ifNo) != 1)
>          return NULL;
>      if (snprintf(dev_name, sizeof(dev_name), "veth%d.%d", veid, ifNo) < 7)
>          return NULL;
> -    return strdup(dev_name);
> +    ignore_value(VIR_STRDUP(ret, dev_name));

silent->noisy, but only on some of the failure paths.  Callers are
currently using virReportError(), which means you won't notice this on
your pass to clean up oom reporting; so add this to the list of things
that needs explicit followup.

> @@ -788,7 +784,7 @@ openvzGenerateContainerVethName(int veid)
>  
>      /* try to get line "^NETIF=..." from config */
>      if (openvzReadVPSConfigParam(veid, "NETIF", &temp) <= 0) {
> -        name = strdup("eth0");
> +        ignore_value(VIR_STRDUP(name, "eth0"));

Wow.  This function was previously reporting oom but callers were then
throwing it away to report internal error.  Again, something we ought to
clean up.

> @@ -821,7 +814,7 @@ openvzDomainSetNetwork(virConnectPtr conn, const char *vpsid,
>                         virBufferPtr configBuf)
>  {
>      int rc = 0, narg;
> -    const char *prog[OPENVZ_MAX_ARG];
> +    char *prog[OPENVZ_MAX_ARG];
>      char macaddr[VIR_MAC_STRING_BUFLEN];
>      virMacAddr host_mac;
>      char host_macaddr[VIR_MAC_STRING_BUFLEN];
> @@ -830,9 +823,9 @@ openvzDomainSetNetwork(virConnectPtr conn, const char *vpsid,
>  
>  #define ADD_ARG_LIT(thisarg)                                            \
>      do {                                                                \
> -        if (narg >= OPENVZ_MAX_ARG)                                             \
> +        if (narg >= OPENVZ_MAX_ARG)                                     \
>                   goto no_memory;                                        \
> -        if ((prog[narg++] = strdup(thisarg)) == NULL)                   \
> +        if (VIR_STRDUP(prog[narg++], thisarg) < 0)                      \
>              goto no_memory;                                             \
>      } while (0)

Again, why aren't we using virCommand?

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 621 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20130508/cf7bfb36/attachment-0001.sig>


More information about the libvir-list mailing list