diff --git a/sbin/ldconfig/elfhints.c b/sbin/ldconfig/elfhints.c --- a/sbin/ldconfig/elfhints.c +++ b/sbin/ldconfig/elfhints.c @@ -62,6 +62,8 @@ { struct stat stbuf; int i; + int insert_at; + char *is_compat; /* Do some security checks */ if (!trusted && !insecure) { @@ -83,12 +85,22 @@ } } - for (i = 0; i < ndirs; i++) + is_compat = strstr(name, "/lib/compat"); + insert_at = ndirs; + for (i = 0; i < ndirs; i++) { if (strcmp(dirs[i], name) == 0) return; + if (!is_compat && strstr(dirs[i], "/lib/compat")) + insert_at--; + } if (ndirs >= MAXDIRS) errx(1, "\"%s\": Too many directories in path", hintsfile); - dirs[ndirs++] = name; + + for (i = ndirs; i > insert_at; i--) + dirs[i] = dirs[i - 1]; + + dirs[insert_at] = name; + ndirs++; } void