update from lite. delete obsolete (wfj) function, add hashinit()

This commit is contained in:
cgd 1994-05-18 10:21:18 +00:00
parent ad129cd0c4
commit 3ece2ea12e

View File

@ -1,6 +1,6 @@
/* /*
* Copyright (c) 1982, 1986, 1991 Regents of the University of California. * Copyright (c) 1982, 1986, 1991, 1993
* All rights reserved. * The Regents of the University of California. All rights reserved.
* (c) UNIX System Laboratories, Inc. * (c) UNIX System Laboratories, Inc.
* All or some portions of this file are derived from material licensed * All or some portions of this file are derived from material licensed
* to the University of California by American Telephone and Telegraph * to the University of California by American Telephone and Telegraph
@ -35,15 +35,16 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE. * SUCH DAMAGE.
* *
* from: @(#)kern_subr.c 7.7 (Berkeley) 4/15/91 * from: @(#)kern_subr.c 8.3 (Berkeley) 1/21/94
* $Id: kern_subr.c,v 1.9 1994/05/17 04:22:00 cgd Exp $ * $Id: kern_subr.c,v 1.10 1994/05/18 10:21:18 cgd Exp $
*/ */
#include <sys/param.h> #include <sys/param.h>
#include <sys/systm.h> #include <sys/systm.h>
#include <sys/proc.h> #include <sys/proc.h>
#include <sys/malloc.h>
#include <sys/queue.h>
int
uiomove(cp, n, uio) uiomove(cp, n, uio)
register caddr_t cp; register caddr_t cp;
register int n; register int n;
@ -53,7 +54,6 @@ uiomove(cp, n, uio)
u_int cnt; u_int cnt;
int error = 0; int error = 0;
#ifdef DIAGNOSTIC #ifdef DIAGNOSTIC
if (uio->uio_rw != UIO_READ && uio->uio_rw != UIO_WRITE) if (uio->uio_rw != UIO_READ && uio->uio_rw != UIO_WRITE)
panic("uiomove: mode"); panic("uiomove: mode");
@ -99,64 +99,20 @@ uiomove(cp, n, uio)
return (error); return (error);
} }
int
uioapply(func, arg1, arg2, uio)
int (*func)();
int arg1, arg2;
register struct uio *uio;
{
register struct iovec *iov;
u_int cnt, cnt1;
int error = 0;
/*#ifdef DIAGNOSTIC*/
if (uio->uio_rw != UIO_READ && uio->uio_rw != UIO_WRITE)
panic("uioapply: mode");
if (uio->uio_segflg == UIO_USERSPACE && uio->uio_procp != curproc)
panic("uioapply proc");
/*#endif*/
while (uio->uio_resid) {
iov = uio->uio_iov;
cnt = iov->iov_len;
if (cnt == 0) {
uio->uio_iov++;
uio->uio_iovcnt--;
continue;
}
cnt1 = cnt;
error = (*func)(arg1, arg2, uio->uio_offset, uio->uio_rw,
iov->iov_base, &cnt1, uio->uio_procp);
cnt -= cnt1;
iov->iov_base += cnt;
iov->iov_len -= cnt;
uio->uio_resid -= cnt;
uio->uio_offset += cnt;
if (error || cnt1)
return (error);
}
return (0);
}
/* /*
* Give next character to user as result of read. * Give next character to user as result of read.
*/ */
int
ureadc(c, uio) ureadc(c, uio)
register int c; register int c;
register struct uio *uio; register struct uio *uio;
{ {
register struct iovec *iov; register struct iovec *iov;
if (uio->uio_resid <= 0)
panic("ureadc: uio_resid == 0");
again: again:
if (uio->uio_iovcnt == 0) if (uio->uio_iovcnt == 0 || uio->uio_resid == 0)
panic("ureadc: uio_iovcnt == 0"); panic("ureadc");
iov = uio->uio_iov; iov = uio->uio_iov;
if (iov->iov_len <= 0) { if (iov->iov_len == 0) {
uio->uio_iovcnt--; uio->uio_iovcnt--;
uio->uio_iov++; uio->uio_iov++;
goto again; goto again;
@ -184,11 +140,10 @@ again:
return (0); return (0);
} }
#ifndef lint /* unused except by ct.c, other oddities XXX */ #ifdef vax /* unused except by ct.c, other oddities XXX */
/* /*
* Get next character written in by user from uio. * Get next character written in by user from uio.
*/ */
int
uwritec(uio) uwritec(uio)
struct uio *uio; struct uio *uio;
{ {
@ -229,4 +184,28 @@ again:
uio->uio_offset++; uio->uio_offset++;
return (c); return (c);
} }
#endif /* notdef */ #endif /* vax */
/*
* General routine to allocate a hash table.
*/
void *
hashinit(elements, type, hashmask)
int elements, type;
u_long *hashmask;
{
long hashsize;
LIST_HEAD(generic, generic) *hashtbl;
int i;
if (elements <= 0)
panic("hashinit: bad cnt");
for (hashsize = 1; hashsize <= elements; hashsize <<= 1)
continue;
hashsize >>= 1;
hashtbl = malloc((u_long)hashsize * sizeof(*hashtbl), type, M_WAITOK);
for (i = 0; i < hashsize; i++)
LIST_INIT(&hashtbl[i]);
*hashmask = hashsize - 1;
return (hashtbl);
}