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:
Eric Engestrom 2019-07-07 11:40:04 +01:00
parent 991137144a
commit 5b10ddf358
1 changed files with 12 additions and 7 deletions

View File

@ -33,6 +33,15 @@
#undef GET_PROGRAM_NAME
#if defined(__linux__) && defined(HAVE_PROGRAM_INVOCATION_NAME)
static char *path = NULL;
static void __freeProgramPath()
{
free(path);
path = NULL;
}
static const char *
__getProgramName()
{
@ -45,14 +54,10 @@ __getProgramName()
* Strip these arguments out by using the realpath only if it was
* a prefix of the invocation name.
*/
static char *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
*/
if (!path) {
path = realpath("/proc/self/exe", NULL);
atexit(__freeProgramPath);
}
if (path && strncmp(path, program_invocation_name, strlen(path)) == 0) {
/* This shouldn't be null because path is a a prefix,