diff options
| author | Poul-Henning Kamp <phk@FreeBSD.org> | 1996-04-02 13:10:30 +0000 |
|---|---|---|
| committer | Poul-Henning Kamp <phk@FreeBSD.org> | 1996-04-02 13:10:30 +0000 |
| commit | 8ad11607c311b71795042870395681761b5e9db3 (patch) | |
| tree | c2485a48a8a2b35b58bdaaac85d90589d96ee38a /gnu | |
| parent | 710fd6c9c99ab2836c23257fcf8ab3f84c66a695 (diff) | |
Notes
Diffstat (limited to 'gnu')
| -rw-r--r-- | gnu/usr.bin/ld/ldconfig/ldconfig.c | 40 |
1 files changed, 30 insertions, 10 deletions
diff --git a/gnu/usr.bin/ld/ldconfig/ldconfig.c b/gnu/usr.bin/ld/ldconfig/ldconfig.c index 23978c2a888a..ed47604046c4 100644 --- a/gnu/usr.bin/ld/ldconfig/ldconfig.c +++ b/gnu/usr.bin/ld/ldconfig/ldconfig.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1993 Paul Kranenburg + * Copyright (c) 1993,1995 Paul Kranenburg * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -27,7 +27,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: ldconfig.c,v 1.9.4.1 1995/08/13 13:26:25 jkh Exp $ + * $Id: ldconfig.c,v 1.12 1996/02/26 02:22:33 pst Exp $ */ #include <sys/param.h> @@ -139,7 +139,7 @@ int silent; { DIR *dd; struct dirent *dp; - char name[MAXPATHLEN], rest[MAXPATHLEN]; + char name[MAXPATHLEN]; int dewey[MAXDEWEY], ndewey; if ((dd = opendir(dir)) == NULL) { @@ -149,17 +149,38 @@ int silent; } while ((dp = readdir(dd)) != NULL) { - int n; + register int n; + register char *cp; - name[0] = rest[0] = '\0'; + /* Check for `lib' prefix */ + if (dp->d_name[0] != 'l' || + dp->d_name[1] != 'i' || + dp->d_name[2] != 'b') + continue; + + /* Copy the entry minus prefix */ + (void)strcpy(name, dp->d_name + 3); + n = strlen(name); + if (n < 4) + continue; - n = sscanf(dp->d_name, "lib%[^.].so.%s", - name, rest); + /* Find ".so." in name */ + for (cp = name + n - 4; cp > name; --cp) { + if (cp[0] == '.' && + cp[1] == 's' && + cp[2] == 'o' && + cp[3] == '.') + break; + } + if (cp <= name) + continue; - if (n < 2 || rest[0] == '\0') + *cp = '\0'; + if (!isdigit(*(cp+4))) continue; - ndewey = getdewey(dewey, rest); + bzero((caddr_t)dewey, sizeof(dewey)); + ndewey = getdewey(dewey, cp + 4); enter(dir, dp->d_name, name, dewey, ndewey); } @@ -450,4 +471,3 @@ listhints() return; } - |
