[Mesa-dev] [PATCH v7 1/5] util: Get program name based on path when possible
Eric Engestrom
eric.engestrom at intel.com
Thu Mar 21 10:02:28 UTC 2019
On Thursday, 2019-03-21 09:14:15 +0200, 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?
Yeah, I was aware of this, but it will only be called once and will live
for the lifetime of the app, so it doesn't hurt much, and when I looked
it seemed like a hard thing to fix, so I decided to just ignore it.
If this is a problem somewhere, you can raise a bug and/or add a FIXME
comment on the line, if only to document it.
More information about the mesa-dev
mailing list