Am 20.04.2012 23:18, schrieb Chase Douglas:
> XauFileName() may allocate and return a static buffer. The only
> way to ensure it is freed is to deallocate it when the program exits.
> 
> Signed-off-by: Chase Douglas <chase.doug...@canonical.com>
> ---
>  AuFileName.c |   17 ++++++++++++++++-
>  1 files changed, 16 insertions(+), 1 deletions(-)
> 
> diff --git a/AuFileName.c b/AuFileName.c
> index f384f75..bc7b177 100644
> --- a/AuFileName.c
> +++ b/AuFileName.c
> @@ -31,13 +31,22 @@ in this Software without prior written authorization from 
> The Open Group.
>  #include <X11/Xos.h>
>  #include <stdlib.h>
>  
> +static char *buf = NULL;
> +
> +static void
> +free_filename_buffer(void)
> +{
> +    free(buf);
> +    buf = NULL;
> +}
> +
>  char *
>  XauFileName (void)
>  {
>      const char *slashDotXauthority = "/.Xauthority";
>      char    *name;
> -    static char      *buf;
>      static int       bsize;
> +    static int atexit_registered = 0;
>  #ifdef WIN32
>      char    dir[128];
>  #endif
> @@ -64,6 +73,12 @@ XauFileName (void)
>       buf = malloc ((unsigned) size);
>       if (!buf)
>           return NULL;
> +
> +        if (!atexit_registered) {
> +            atexit(free_filename_buffer);
> +            atexit_registered = 1;
> +        }
> +
>       bsize = size;
>      }
>      strcpy (buf, name);


Is XauFileName() a case for Xasprintf() ?

re,
 wh

_______________________________________________
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to