[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:24:12 UTC 2019


doh, it seems I used reply-list instead of reply-all, sending again with 
original author of the patch ..

On 3/21/19 9:14 AM, Tapani Pälli wrote:
> 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.
>>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list