diff options
author | Alan Coopersmith <[email protected]> | 2011-04-08 13:03:16 -0700 |
---|---|---|
committer | Alan Coopersmith <[email protected]> | 2011-04-08 17:36:46 -0700 |
commit | 64ce3933f59f71ac78d83b8b3db813b6d2619382 (patch) | |
tree | 65aebf7e65b07d0ad81a98984efaf7155edff0f3 /src/mesa | |
parent | ee678895e903f3ecbbd95b4584dbfbb127f9d4f0 (diff) |
Fix GET_PROGRAM_NAME() on Solaris to not try to modify a read-only string
Signed-off-by: Alan Coopersmith <[email protected]>
Diffstat (limited to 'src/mesa')
-rw-r--r-- | 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 0312c072437..0226b38c4fc 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) |