[PATCH libXau] Free XauFileName() static buffer at exit

walter harms wharms at bfs.de
Thu Apr 26 01:30:22 PDT 2012



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.douglas at 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



More information about the xorg-devel mailing list