mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-26 06:20:09 +01:00
util: Get program name based on path when possible
Some programs start with the path and command line arguments in argv[0] (program_invocation_name). Chromium is an example of an application using mesa that does this. This tries to query the real path for the symbolic link /proc/self/exe to find the program name instead. It only uses the realpath if it was a prefix of the invocation to avoid breaking wine programs. Cc: Timothy Arceri <tarceri@itsqueeze.com> Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com> Reviewed-by: Eric Engestrom <eric.engestrom@intel.com>
This commit is contained in:
parent
bf1dfcc3e8
commit
759b940389
1 changed files with 22 additions and 1 deletions
|
|
@ -41,8 +41,29 @@ static const char *
|
|||
__getProgramName()
|
||||
{
|
||||
char * arg = strrchr(program_invocation_name, '/');
|
||||
if (arg)
|
||||
if (arg) {
|
||||
/* If the / character was found this is likely a linux path or
|
||||
* an invocation path for a 64-bit wine program.
|
||||
*
|
||||
* However, some programs pass command line arguments into argv[0].
|
||||
* Strip these arguments out by using the realpath only if it was
|
||||
* a prefix of the invocation name.
|
||||
*/
|
||||
static char *path;
|
||||
|
||||
if (!path)
|
||||
path = realpath("/proc/self/exe", NULL);
|
||||
|
||||
if (path && strncmp(path, program_invocation_name, strlen(path)) == 0) {
|
||||
/* This shouldn't be null because path is a a prefix,
|
||||
* but check it anyway since path is static. */
|
||||
char * name = strrchr(path, '/');
|
||||
if (name)
|
||||
return name + 1;
|
||||
}
|
||||
|
||||
return arg+1;
|
||||
}
|
||||
|
||||
/* If there was no '/' at all we likely have a windows like path from
|
||||
* a wine application.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue