[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