Lines 3561-3577
rtld_dirname(const char *path, char *bname)
Link Here
|
3561 |
static int |
3561 |
static int |
3562 |
rtld_dirname_abs(const char *path, char *base) |
3562 |
rtld_dirname_abs(const char *path, char *base) |
3563 |
{ |
3563 |
{ |
3564 |
char base_rel[PATH_MAX]; |
3564 |
char *last; |
3565 |
|
3565 |
|
3566 |
if (rtld_dirname(path, base) == -1) |
3566 |
if (realpath(path, base) == NULL) |
3567 |
return (-1); |
3567 |
return (-1); |
3568 |
if (base[0] == '/') |
3568 |
last = strrchr(base, '/'); |
3569 |
return (0); |
3569 |
if (last == NULL) |
3570 |
if (getcwd(base_rel, sizeof(base_rel)) == NULL || |
|
|
3571 |
strlcat(base_rel, "/", sizeof(base_rel)) >= sizeof(base_rel) || |
3572 |
strlcat(base_rel, base, sizeof(base_rel)) >= sizeof(base_rel)) |
3573 |
return (-1); |
3570 |
return (-1); |
3574 |
strcpy(base, base_rel); |
3571 |
if (last != base) |
|
|
3572 |
*last = '\0'; |
3575 |
return (0); |
3573 |
return (0); |
3576 |
} |
3574 |
} |
3577 |
|
3575 |
|