[libvirt] [PATCH 3/4] nwfilter: Push configFile building into LoadConfig

John Ferlan jferlan at redhat.com
Sat Apr 30 13:32:38 UTC 2016



On 04/24/2016 07:22 PM, Cole Robinson wrote:
> This matches the pattern used for network object APIs, and we want
> configDir in LoadConfig for upcoming patches
> ---
>  src/conf/nwfilter_conf.c | 45 ++++++++++++++++++++++++---------------------
>  1 file changed, 24 insertions(+), 21 deletions(-)
> 
> diff --git a/src/conf/nwfilter_conf.c b/src/conf/nwfilter_conf.c
> index d02bbff..d8e83f0 100644
> --- a/src/conf/nwfilter_conf.c
> +++ b/src/conf/nwfilter_conf.c
> @@ -3156,30 +3156,39 @@ virNWFilterObjAssignDef(virNWFilterObjListPtr nwfilters,
>  
>  
>  static virNWFilterObjPtr
> -virNWFilterObjLoad(virNWFilterObjListPtr nwfilters,
> -                   const char *file,
> -                   const char *path)
> +virNWFilterLoadConfig(virNWFilterObjListPtr nwfilters,
> +                      const char *configDir,
> +                      const char *name)
>  {
> -    virNWFilterDefPtr def;
> +    virNWFilterDefPtr def = NULL;
>      virNWFilterObjPtr nwfilter;
> +    char *configFile = NULL;
>  
> -    if (!(def = virNWFilterDefParseFile(path)))
> -        return NULL;
> +    if (!(configFile = virFileBuildPath(configDir, name, ".xml")))
> +        goto error;
>  
> -    if (!virFileMatchesNameSuffix(file, def->name, ".xml")) {
> +    if (!(def = virNWFilterDefParseFile(configFile)))
> +        goto error;
> +
> +    if (STRNEQ(name, def->name)) {
>          virReportError(VIR_ERR_XML_ERROR,
> -                       _("network filter config filename '%s' does not match name '%s'"),
> -                       path, def->name);
> -        virNWFilterDefFree(def);
> -        return NULL;
> +                       _("network filter config filename '%s' "
> +                         "does not match name '%s'"),
> +                       configFile, def->name);
> +        goto error;
>      }
>  
>      if (!(nwfilter = virNWFilterObjAssignDef(nwfilters, def))) {
> -        virNWFilterDefFree(def);
> -        return NULL;
> +        goto error;
>      }

Make sure you run 'syntax-check'... A window I had used for compiles was
obscured and I see the syntax-check fails because of the { } and one
line goto error.

John
>  
> +    VIR_FREE(configFile);
>      return nwfilter;
> +
> + error:
> +    VIR_FREE(configFile);
> +    virNWFilterDefFree(def);
> +    return NULL;
>  }
>  
>  
> @@ -3200,23 +3209,17 @@ virNWFilterLoadAllConfigs(virNWFilterObjListPtr nwfilters,
>      }
>  
>      while ((ret = virDirRead(dir, &entry, configDir)) > 0) {
> -        char *path;
>          virNWFilterObjPtr nwfilter;
>  
>          if (entry->d_name[0] == '.')
>              continue;
>  
> -        if (!virFileHasSuffix(entry->d_name, ".xml"))
> -            continue;
> -
> -        if (!(path = virFileBuildPath(configDir, entry->d_name, NULL)))
> +        if (!virFileStripSuffix(entry->d_name, ".xml"))
>              continue;
>  
> -        nwfilter = virNWFilterObjLoad(nwfilters, entry->d_name, path);
> +        nwfilter = virNWFilterLoadConfig(nwfilters, configDir, entry->d_name);
>          if (nwfilter)
>              virNWFilterObjUnlock(nwfilter);
> -
> -        VIR_FREE(path);
>      }
>  
>      closedir(dir);
> 




More information about the libvir-list mailing list