[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:18:09 PDT 2011


On Fri, Apr 8, 2011 at 10:12 PM, Jakob Bornecrantz <wallbraker at gmail.com> wrote:
> 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?

Bah, read the code again while we only leak one string its still a
leak and valgrind will complain (libraries that have these type of
leaks is a pet peeve of mine). But making it not leak will be
ridiculous, bah humbug. Other then that I see no problems with the
patch, while you don't have my ACK/RB I'm not NACK:ing it either.

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