diff options
Diffstat (limited to 'src/util/os_installation.c')
-rw-r--r-- | src/util/os_installation.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/util/os_installation.c b/src/util/os_installation.c index a94798d8d..30e729dc6 100644 --- a/src/util/os_installation.c +++ b/src/util/os_installation.c | |||
@@ -627,21 +627,24 @@ GNUNET_OS_installation_get_path (enum GNUNET_OS_InstallationPathKind dirkind) | |||
627 | char * | 627 | char * |
628 | GNUNET_OS_get_libexec_binary_path (const char *progname) | 628 | GNUNET_OS_get_libexec_binary_path (const char *progname) |
629 | { | 629 | { |
630 | static char *cache; | ||
630 | char *libexecdir; | 631 | char *libexecdir; |
631 | char *binary; | 632 | char *binary; |
632 | 633 | ||
633 | if (DIR_SEPARATOR == progname[0]) | 634 | if ( (DIR_SEPARATOR == progname[0]) || |
635 | (GNUNET_YES == GNUNET_STRINGS_path_is_absolute (progname, GNUNET_NO, NULL, NULL)) ) | ||
634 | return GNUNET_strdup (progname); | 636 | return GNUNET_strdup (progname); |
635 | if (GNUNET_YES == GNUNET_STRINGS_path_is_absolute (progname, GNUNET_NO, NULL, NULL)) | 637 | if (NULL != cache) |
636 | return GNUNET_strdup (progname); | 638 | libexecdir = cache; |
637 | libexecdir = GNUNET_OS_installation_get_path (GNUNET_OS_IPK_LIBEXECDIR); | 639 | else |
640 | libexecdir = GNUNET_OS_installation_get_path (GNUNET_OS_IPK_LIBEXECDIR); | ||
638 | if (NULL == libexecdir) | 641 | if (NULL == libexecdir) |
639 | return GNUNET_strdup (progname); | 642 | return GNUNET_strdup (progname); |
640 | GNUNET_asprintf (&binary, | 643 | GNUNET_asprintf (&binary, |
641 | "%s%s", | 644 | "%s%s", |
642 | libexecdir, | 645 | libexecdir, |
643 | progname); | 646 | progname); |
644 | GNUNET_free (libexecdir); | 647 | cache = libexecdir; |
645 | return binary; | 648 | return binary; |
646 | } | 649 | } |
647 | 650 | ||