move RPATH search after LD_LIBRARY_PATH search
authorRich Felker <dalias@aerifal.cx>
Fri, 2 Aug 2013 14:02:29 +0000 (10:02 -0400)
committerRich Felker <dalias@aerifal.cx>
Fri, 2 Aug 2013 14:02:29 +0000 (10:02 -0400)
this is the modern way, and the only way that makes any sense. glibc
has this complicated mechanism with RPATH and RUNPATH that controls
whether RPATH is processed before or after LD_LIBRARY_PATH, presumably
to support legacy binaries, but there is no compelling reason to
support this, and better behavior is obtained by just fixing the
search order.

src/ldso/dynlink.c

index ff99489a207548ee133dfb49ffc2cc0bd5f9c1ff..d689f96e691b369aff95d773cea795719072eb5b 100644 (file)
@@ -517,8 +517,8 @@ static struct dso *load_library(const char *name)
                }
                if (strlen(name) > NAME_MAX) return 0;
                fd = -1;
-               if (r_path) fd = path_open(name, r_path, buf, sizeof buf);
-               if (fd < 0 && env_path) fd = path_open(name, env_path, buf, sizeof buf);
+               if (env_path) fd = path_open(name, env_path, buf, sizeof buf);
+               if (fd < 0 && r_path) fd = path_open(name, r_path, buf, sizeof buf);
                if (fd < 0) {
                        if (!sys_path) {
                                char *prefix = 0;