Make getting ivl_root more robust

This commit is contained in:
Cary R 2016-08-14 19:41:04 -07:00
parent 446e825ed3
commit 9cf23b4c3b
1 changed files with 13 additions and 7 deletions

View File

@ -853,14 +853,20 @@ int main(int argc, char **argv)
/* Convert to a short name to remove any embedded spaces. */
GetShortPathName(tmppath, ivl_root, sizeof ivl_root);
#else
ssize_t len = 0;
if (access("/proc/self/exe", F_OK) != -1) {
readlink("/proc/self/exe", ivl_root, sizeof ivl_root);
} else {
/* In a UNIX environment, if /proc/self/exe does not
exist, the IVL_ROOT from the Makefile is
dependable. It points to the $prefix/lib/ivl directory,
where the sub-parts are installed. */
strcpy(ivl_root, IVL_ROOT);
len = readlink("/proc/self/exe", ivl_root, sizeof ivl_root);
assert(len < (ssize_t) sizeof ivl_root);
/* Terminate the string with a NULL. */
if (len > 0) ivl_root[len] = '\0';
}
/* In a UNIX environment, if /proc/self/exe does not exist or
reading fails, the IVL_ROOT from the Makefile is dependable.
It points to the $prefix/lib/ivl directory, where the
sub-parts are installed. */
if (len <= 0) {
assert(strlen(IVL_ROOT) < sizeof ivl_root);
strcpy(ivl_root, IVL_ROOT);
}
#endif
s = strrchr(ivl_root, sep);