diff options
author | Otto Moerbeek <otto@cvs.openbsd.org> | 2006-03-24 20:00:36 +0000 |
---|---|---|
committer | Otto Moerbeek <otto@cvs.openbsd.org> | 2006-03-24 20:00:36 +0000 |
commit | d572705eefb36ad471cccb729541c936e90b5e95 (patch) | |
tree | df9011401ac84f1465c22119c7f5051060cd4303 /libexec | |
parent | bdedca315590daa1317187ee10451f928d9f7dd5 (diff) |
Remove telldir/seekdir support from the internal ld.so lib, it's not
used. ok drahn@
Diffstat (limited to 'libexec')
-rw-r--r-- | libexec/ld.so/dir.c | 97 |
1 files changed, 1 insertions, 96 deletions
diff --git a/libexec/ld.so/dir.c b/libexec/ld.so/dir.c index 337ec4be0e6..72c1bf84f94 100644 --- a/libexec/ld.so/dir.c +++ b/libexec/ld.so/dir.c @@ -1,4 +1,4 @@ -/* $OpenBSD: dir.c,v 1.10 2005/06/16 14:47:09 millert Exp $ */ +/* $OpenBSD: dir.c,v 1.11 2006/03/24 20:00:35 otto Exp $ */ /* * Copyright (c) 1983, 1993 * The Regents of the University of California. All rights reserved. @@ -96,11 +96,6 @@ _dl_opendir(const char *name) dirp->dd_fd = fd; dirp->dd_flags = DTF_NODUP; - /* - * Set up seek point for rewinddir. - */ - dirp->dd_rewind = _dl_telldir(dirp); - return (dirp); } @@ -117,7 +112,6 @@ _dl_closedir(DIR *dirp) int fd; int ret; - _dl_seekdir(dirp, dirp->dd_rewind); /* free seekdir storage */ fd = dirp->dd_fd; dirp->dd_fd = -1; dirp->dd_loc = 0; @@ -163,92 +157,3 @@ _dl_readdir(DIR *dirp) return (dp); } } - - -#if defined(LIBC_SCCS) && !defined(lint) -static char rcsid[] = "$ telldir.c,v 1.2 1996/08/19 08:26:35 tholo Exp $"; -#endif /* LIBC_SCCS and not lint */ - -/* - * The option SINGLEUSE may be defined to say that a telldir - * cookie may be used only once before it is freed. This option - * is used to avoid having memory usage grow without bound. - */ -#define SINGLEUSE - -/* - * One of these structures is malloced to describe the current directory - * position each time telldir is called. It records the current magic - * cookie returned by getdirentries and the offset within the buffer - * associated with that return value. - */ -struct ddloc { - struct ddloc *loc_next;/* next structure in list */ - long loc_index; /* key associated with structure */ - long loc_seek; /* magic cookie returned by getdirentries */ - long loc_loc; /* offset of entry in buffer */ -}; - -#define NDIRHASH 32 /* Num of hash lists, must be a power of 2 */ -#define LOCHASH(i) ((i)&(NDIRHASH-1)) - -static long dd_loccnt; /* Index of entry for sequential readdir's */ -static struct ddloc *dd_hash[NDIRHASH]; /* Hash list heads for ddlocs */ - -/* - * return a pointer into a directory - */ -long -_dl_telldir(const DIR *dirp) -{ - int index; - struct ddloc *lp; - - if ((lp = (struct ddloc *)_dl_malloc(sizeof(struct ddloc))) == NULL) - return (-1); - index = dd_loccnt++; - lp->loc_index = index; - lp->loc_seek = dirp->dd_seek; - lp->loc_loc = dirp->dd_loc; - lp->loc_next = dd_hash[LOCHASH(index)]; - dd_hash[LOCHASH(index)] = lp; - return (index); -} - -/* - * seek to an entry in a directory. - * Only values returned by "telldir" should be passed to seekdir. - */ -void -_dl_seekdir(DIR *dirp, long loc) -{ - struct ddloc *lp; - struct ddloc **prevlp; - struct dirent *dp; - - prevlp = &dd_hash[LOCHASH(loc)]; - lp = *prevlp; - while (lp != NULL) { - if (lp->loc_index == loc) - break; - prevlp = &lp->loc_next; - lp = lp->loc_next; - } - if (lp == NULL) - return; - if (lp->loc_loc == dirp->dd_loc && lp->loc_seek == dirp->dd_seek) - goto found; - _dl_lseek(dirp->dd_fd, (off_t)lp->loc_seek, SEEK_SET); - dirp->dd_seek = lp->loc_seek; - dirp->dd_loc = 0; - while (dirp->dd_loc < lp->loc_loc) { - dp = _dl_readdir(dirp); - if (dp == NULL) - break; - } -found: -#ifdef SINGLEUSE - *prevlp = lp->loc_next; - _dl_free((caddr_t)lp); -#endif -} |