[Mesa-dev] [PATCH v7 1/5] util: Get program name based on path when possible
Tapani Pälli
tapani.palli at intel.com
Thu Mar 21 07:14:15 UTC 2019
Hello;
One *very late* comment below ..
On 10/23/18 6:38 PM, Nicholas Kazlauskas wrote:
> 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 at itsqueeze.com>
> Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas at amd.com>
> Reviewed-by: Eric Engestrom <eric.engestrom at intel.com>
> ---
> src/util/u_process.c | 23 ++++++++++++++++++++++-
> 1 file changed, 22 insertions(+), 1 deletion(-)
>
> diff --git a/src/util/u_process.c b/src/util/u_process.c
> index 5e5927678d..a1667e7807 100644
> --- a/src/util/u_process.c
> +++ b/src/util/u_process.c
> @@ -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);
realpath allocates memory that we will leak, it's not much but just
wanted to mention, it might be not trivial to fix since I guess not all
variants of __getProgramName will allocate?
> +
> + 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.
>
More information about the mesa-dev
mailing list