Lines 130-136
static int relocate_objects(Obj_Entry *, bool, Obj
Link Here
|
130 |
static int resolve_objects_ifunc(Obj_Entry *first, bool bind_now, |
130 |
static int resolve_objects_ifunc(Obj_Entry *first, bool bind_now, |
131 |
int flags, RtldLockState *lockstate); |
131 |
int flags, RtldLockState *lockstate); |
132 |
static int rtld_dirname(const char *, char *); |
132 |
static int rtld_dirname(const char *, char *); |
133 |
static int rtld_dirname_abs(const char *, char *); |
133 |
static int rtld_dirname_abs(char *, char *); |
134 |
static void *rtld_dlopen(const char *name, int fd, int mode); |
134 |
static void *rtld_dlopen(const char *name, int fd, int mode); |
135 |
static void rtld_exit(void); |
135 |
static void rtld_exit(void); |
136 |
static char *search_library_path(const char *, const char *); |
136 |
static char *search_library_path(const char *, const char *); |
Lines 3559-3568
rtld_dirname(const char *path, char *bname)
Link Here
|
3559 |
} |
3559 |
} |
3560 |
|
3560 |
|
3561 |
static int |
3561 |
static int |
3562 |
rtld_dirname_abs(const char *path, char *base) |
3562 |
rtld_dirname_abs(char *path, char *base) |
3563 |
{ |
3563 |
{ |
3564 |
char base_rel[PATH_MAX]; |
3564 |
char base_rel[PATH_MAX]; |
|
|
3565 |
ssize_t len; |
3565 |
|
3566 |
|
|
|
3567 |
len = readlink(path, base_rel, sizeof(base_rel) - 1); |
3568 |
if (len != -1) { |
3569 |
base_rel[len] = '\0'; |
3570 |
path = base_rel; |
3571 |
} |
3566 |
if (rtld_dirname(path, base) == -1) |
3572 |
if (rtld_dirname(path, base) == -1) |
3567 |
return (-1); |
3573 |
return (-1); |
3568 |
if (base[0] == '/') |
3574 |
if (base[0] == '/') |