summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authorjeff <jeff@FreeBSD.org>2009-01-25 18:38:42 +0000
committerjeff <jeff@FreeBSD.org>2009-01-25 18:38:42 +0000
commit687eba74e7c539c4a18832b17a7fa25f7f637e48 (patch)
treeabc0f880ca371b963ccbe4d46f8990fc9255345f /sys/kern
parent2cc6f5c8ec03335a49f2e56f1e7e89cdc413d7f9 (diff)
downloadFreeBSD-src-687eba74e7c539c4a18832b17a7fa25f7f637e48.zip
FreeBSD-src-687eba74e7c539c4a18832b17a7fa25f7f637e48.tar.gz
- bit has to be fd_mask to work properly on 64bit platforms. Constants
must also be cast even though the result ultimately is promoted to 64bit. - Correct a loop index upper bound in selscan().
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/sys_generic.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/sys/kern/sys_generic.c b/sys/kern/sys_generic.c
index bcc2ebb..17a449e 100644
--- a/sys/kern/sys_generic.c
+++ b/sys/kern/sys_generic.c
@@ -965,8 +965,8 @@ selrescan(struct thread *td, fd_mask **ibits, fd_mask **obits)
struct selfd *sfp;
struct selfd *sfn;
struct file *fp;
- int fd, ev, n;
- int idx, bit;
+ fd_mask bit;
+ int fd, ev, n, idx;
fdp = td->td_proc->p_fd;
stp = td->td_sel;
@@ -984,7 +984,7 @@ selrescan(struct thread *td, fd_mask **ibits, fd_mask **obits)
return (EBADF);
}
idx = fd / NFDBITS;
- bit = 1 << (fd % NFDBITS);
+ bit = (fd_mask)1 << (fd % NFDBITS);
ev = fo_poll(fp, selflags(ibits, idx, bit), td->td_ucred, td);
if (ev != 0)
n += selsetbits(ibits, obits, idx, bit, ev);
@@ -1007,13 +1007,14 @@ selscan(td, ibits, obits, nfd)
{
struct filedesc *fdp;
struct file *fp;
+ fd_mask bit;
int ev, flags, end, fd;
- int n, idx, bit;
+ int n, idx;
fdp = td->td_proc->p_fd;
n = 0;
FILEDESC_SLOCK(fdp);
- for (idx = 0, fd = 0; idx < nfd; idx++) {
+ for (idx = 0, fd = 0; fd < nfd; idx++) {
end = imin(fd + NFDBITS, nfd);
for (bit = 1; fd < end; bit <<= 1, fd++) {
/* Compute the list of events we're interested in. */
OpenPOWER on IntegriCloud