OSDN Git Service

Fix a couple of silly bugs I'd left in while fixing things
authorEric Andersen <andersen@codepoet.org>
Fri, 24 May 2002 14:30:15 +0000 (14:30 -0000)
committerEric Andersen <andersen@codepoet.org>
Fri, 24 May 2002 14:30:15 +0000 (14:30 -0000)
 -Erik

ldso/util/ldd.c

index 18efc50..6b9326b 100644 (file)
@@ -244,10 +244,12 @@ void locate_library_file(Elf32_Ehdr* ehdr, Elf32_Dyn* dynamic, char *strtab,
        /* Next look for libraries wherever the shared library 
         * loader was installed -- this is usually where we
         * should find things... */
-       search_for_named_library(lib->name, buf, interp_dir);
-       if (*buf != '\0') {
-               lib->path = buf;
-               return;
+       if (interp_dir) {
+               search_for_named_library(lib->name, buf, interp_dir);
+               if (*buf != '\0') {
+                       lib->path = buf;
+                       return;
+               }
        }
 
        /* Lastly, search the standard list of paths for the library.
@@ -355,6 +357,10 @@ static void find_elf_interpreter(Elf32_Ehdr* ehdr, Elf32_Dyn* dynamic, char *str
                tmp = strrchr(interp_dir, '/');
                if (*tmp)
                        *tmp = '\0';
+               else {
+                       free(interp_dir);
+                       interp_dir = interp;
+               }
                tmp1 = tmp = s;
                while (*tmp) {
                        if (*tmp == '/')
@@ -495,7 +501,7 @@ int main( int argc, char** argv)
                got_em_all=1;
                printf("\t%s => %s\n", cur->name, cur->path);
        }
-       if (got_em_all==1)
+       if (interp_dir && got_em_all==1)
                printf("\t%s => %s\n", interp, interp);
        if (got_em_all==0)
                printf("\tnot a dynamic executable\n");