[Mesa-dev] [PATCH] Fix GET_PROGRAM_NAME() on Solaris to not try to modify a read-only string

Jakob Bornecrantz wallbraker at gmail.com
Fri Apr 8 13:12:44 PDT 2011


On Fri, Apr 8, 2011 at 10:04 PM, Alan Coopersmith
<alan.coopersmith at oracle.com> wrote:
> Signed-off-by: Alan Coopersmith <alan.coopersmith at oracle.com>

Obvious question to this is was the string returned from
GET_PROGRAM_NAME freed in the past?

Cheers Jakob.

> ---
>  src/mesa/drivers/dri/common/xmlconfig.c |   20 +++++++++++++++++++-
>  1 files changed, 19 insertions(+), 1 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/common/xmlconfig.c b/src/mesa/drivers/dri/common/xmlconfig.c
> index 0312c07..0226b38 100644
> --- a/src/mesa/drivers/dri/common/xmlconfig.c
> +++ b/src/mesa/drivers/dri/common/xmlconfig.c
> @@ -64,7 +64,25 @@ extern char *program_invocation_name, *program_invocation_short_name;
>    the basename to match BSD getprogname() */
>  #    include <stdlib.h>
>  #    include <libgen.h>
> -#    define GET_PROGRAM_NAME() basename(getexecname())
> +
> +static const char *__getProgramName () {
> +    static const char *progname;
> +
> +    if (progname == NULL) {
> +       const char *e = getexecname();
> +       if (e != NULL) {
> +           /* Have to make a copy since getexecname can return a readonly
> +              string, but basename expects to be able to modify its arg. */
> +           char *n = strdup(e);
> +           if (n != NULL) {
> +               progname = basename(n);
> +           }
> +       }
> +    }
> +    return progname;
> +}
> +
> +#    define GET_PROGRAM_NAME() __getProgramName()
>  #endif
>
>  #if !defined(GET_PROGRAM_NAME)
> --
> 1.7.3.2
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>


More information about the mesa-dev mailing list