util: fix mem leak of program path
Fixes: 759b940389
("util: Get program name based on path when possible")
Signed-off-by: Eric Engestrom <eric.engestrom@intel.com>
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
This commit is contained in:
parent
991137144a
commit
5b10ddf358
|
@ -33,6 +33,15 @@
|
||||||
#undef GET_PROGRAM_NAME
|
#undef GET_PROGRAM_NAME
|
||||||
|
|
||||||
#if defined(__linux__) && defined(HAVE_PROGRAM_INVOCATION_NAME)
|
#if defined(__linux__) && defined(HAVE_PROGRAM_INVOCATION_NAME)
|
||||||
|
|
||||||
|
static char *path = NULL;
|
||||||
|
|
||||||
|
static void __freeProgramPath()
|
||||||
|
{
|
||||||
|
free(path);
|
||||||
|
path = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static const char *
|
static const char *
|
||||||
__getProgramName()
|
__getProgramName()
|
||||||
{
|
{
|
||||||
|
@ -45,14 +54,10 @@ __getProgramName()
|
||||||
* Strip these arguments out by using the realpath only if it was
|
* Strip these arguments out by using the realpath only if it was
|
||||||
* a prefix of the invocation name.
|
* a prefix of the invocation name.
|
||||||
*/
|
*/
|
||||||
static char *path;
|
if (!path) {
|
||||||
|
|
||||||
if (!path)
|
|
||||||
/* Note: realpath() allocates memory that we will keep around for
|
|
||||||
* the lifetime of the app, and then leak as the app closes.
|
|
||||||
* FIXME: we should find a way to clean this properly
|
|
||||||
*/
|
|
||||||
path = realpath("/proc/self/exe", NULL);
|
path = realpath("/proc/self/exe", NULL);
|
||||||
|
atexit(__freeProgramPath);
|
||||||
|
}
|
||||||
|
|
||||||
if (path && strncmp(path, program_invocation_name, strlen(path)) == 0) {
|
if (path && strncmp(path, program_invocation_name, strlen(path)) == 0) {
|
||||||
/* This shouldn't be null because path is a a prefix,
|
/* This shouldn't be null because path is a a prefix,
|
||||||
|
|
Loading…
Reference in New Issue