X-Git-Url: https://pd.if.org/git/?p=zpackage;a=blobdiff_plain;f=elf%2Fsoname.c;h=8618152402d38c69c4240526d9b96a39f0162771;hp=8b6c451275f8a8e42d8f50cb58b028d380a7cc07;hb=HEAD;hpb=0f9755829b9975cd2f54325e0075dfeecb0595e2 diff --git a/elf/soname.c b/elf/soname.c index 8b6c451..8618152 100644 --- a/elf/soname.c +++ b/elf/soname.c @@ -23,6 +23,11 @@ int main(int ac, char **av) { char *name, *dynname; Elf64_Dyn *dent; + if (ac < 2) { + fprintf(stderr, "usage: soname \n"); + exit(EXIT_FAILURE); + } + if (lstat(av[1], &sbuf) == -1) { exit(1); } @@ -42,7 +47,7 @@ int main(int ac, char **av) { exit(1); } /* not at least the size of the elf header? */ - if (sbuf.st_size < sizeof(Elf64_Ehdr)) { + if ((size_t)sbuf.st_size < sizeof(Elf64_Ehdr)) { exit(1); } @@ -113,9 +118,10 @@ int main(int ac, char **av) { for (dent = (Elf64_Dyn *)((char *)elfbase + dynsect->sh_offset); dent->d_tag != DT_NULL; dent++) { if (dent->d_tag == DT_SONAME) { printf("%s\n", dynname + dent->d_un.d_val); - break; + /* TODO can there be more than one? */ + exit(0); } } - return 0; + return 11; }