On Thu, Mar 31, 2011 at 04:26:07PM +0300, Tiago Vignatti wrote:
> No functional changes. Spaghetti code for win! \o/
> 
> Signed-off-by: Tiago Vignatti <[email protected]>
> ---
>  hw/xfree86/loader/loadmod.c |   34 ++++++++++++++--------------------
>  1 files changed, 14 insertions(+), 20 deletions(-)
> 
> diff --git a/hw/xfree86/loader/loadmod.c b/hw/xfree86/loader/loadmod.c
> index 46ce68b..db8037c 100644
> --- a/hw/xfree86/loader/loadmod.c
> +++ b/hw/xfree86/loader/loadmod.c
> @@ -483,19 +483,15 @@ LoaderListDirs(const char **subdirlist, const char 
> **patternlist)
>      char *fp;
>      char **listing = NULL;
>      char **save;
> +    char **ret = NULL;
>      int n = 0;
>  
>      if (!(pathlist = InitPathList(NULL)))
>       return NULL;
> -    if (!(subdirs = InitSubdirs(subdirlist))) {
> -     FreePathList(pathlist);
> -     return NULL;
> -    }
> -    if (!(patterns = InitPatterns(patternlist))) {
> -     FreePathList(pathlist);
> -     FreeSubdirs(subdirs);
> -     return NULL;
> -    }
> +    if (!(subdirs = InitSubdirs(subdirlist)))
> +     goto InitSubdirs_fail;
> +    if (!(patterns = InitPatterns(patternlist)))
> +     goto InitPatterns_fail;
>  
>      for (elem = pathlist; *elem; elem++) {
>       for (s = subdirs; *s; s++) {
> @@ -529,20 +525,14 @@ LoaderListDirs(const char **subdirlist, const char 
> **patternlist)
>                                   save[n] = NULL;
>                                   FreeStringList(save);
>                               }
> -                             FreePathList(pathlist);
> -                             FreeSubdirs(subdirs);
> -                             FreePatterns(patterns);
>                               closedir(d);
> -                             return NULL;
> +                             goto bail;
>                           }
>                           listing[n] = malloc(len + 1);
>                           if (!listing[n]) {
>                               FreeStringList(listing);
> -                             FreePathList(pathlist);
> -                             FreeSubdirs(subdirs);
> -                             FreePatterns(patterns);
>                               closedir(d);
> -                             return NULL;
> +                             goto bail;
>                           }
>                           strncpy(listing[n], dp->d_name + match[1].rm_so,
>                                   len);
> @@ -558,11 +548,15 @@ LoaderListDirs(const char **subdirlist, const char 
> **patternlist)
>      }
>      if (listing)
>       listing[n] = NULL;
> +    ret = listing;
>  
> -    FreePathList(pathlist);
> -    FreeSubdirs(subdirs);
> +bail:
>      FreePatterns(patterns);
> -    return listing;
> +InitPatterns_fail:
> +    FreeSubdirs(subdirs);
> +InitSubdirs_fail:
> +    FreePathList(pathlist);
> +    return ret;

FreePatterns, FreePatterns and FreeSubdirs can all handle NULL, suggesting
that we don't need 3 labels but only one.

Cheers,
  Peter

>  }
>  
>  void
> -- 
> 1.7.0.4
> 
> 
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to