summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTodd C. Miller <millert@cvs.openbsd.org>2002-05-15 20:10:33 +0000
committerTodd C. Miller <millert@cvs.openbsd.org>2002-05-15 20:10:33 +0000
commit01d0c41fec21590c57f71273972dc317fe0cc428 (patch)
tree650a450fd0e6fdfbfe1da3d6fbadbb115fd898da
parent73a98f6609fe8c45b63510445f57df8c1f375608 (diff)
uimove(9) from NetBSD with minor changes for OpenBSD. We should
consider changing the size parameter to uiomove() from int to size_t.
-rw-r--r--share/man/man9/Makefile5
-rw-r--r--share/man/man9/uiomove.9139
2 files changed, 142 insertions, 2 deletions
diff --git a/share/man/man9/Makefile b/share/man/man9/Makefile
index 786d8255702..e833f9cf268 100644
--- a/share/man/man9/Makefile
+++ b/share/man/man9/Makefile
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile,v 1.48 2002/02/28 19:22:05 csapuntz Exp $
+# $OpenBSD: Makefile,v 1.49 2002/05/15 20:10:32 millert Exp $
# $NetBSD: Makefile,v 1.4 1996/01/09 03:23:01 thorpej Exp $
# Makefile for section 9 (kernel function and variable) manual pages.
@@ -15,7 +15,7 @@ MAN= altq.9 audio.9 boot.9 bus_dma.9 bus_space.9 copy.9 crypto.9 ctxsw.9 \
ratecheck.9 resettodr.9 radio.9 random.9 \
shutdownhook_establish.9 sleep.9 spl.9 startuphook_establish.9 \
store.9 style.9 \
- time.9 timeout.9 tvtohz.9 uvm.9 \
+ time.9 timeout.9 tvtohz.9 uiomove.9 uvm.9 \
vaccess.9 vclean.9 vcount.9 vdevgone.9 vfinddev.9 vflush.9 vget.9 \
vgone.9 vhold.9 vinvalbuf.9 vput.9 vref.9 vrele.9 \
vm_allocate.9 vm_map_copy.9 vm_deallocate.9 \
@@ -109,6 +109,7 @@ MLINKS+=timeout.9 timeout_add.9 timeout.9 timeout_set.9 \
timeout.9 timeout_pending.9 timeout.9 timeout_del.9 \
timeout.9 timeout_initialized.9 timeout.9 untimeout.9 \
timeout.9 timeout_triggered.9
+MLINKS+=uiomove.9 uio.9
MLINKS+=vm_map_copy.9 vm_copy.9
MLINKS+=vm_map_inherit.9 vm_inherit.9
MLINKS+=vm_map_protect.9 vm_protect.9
diff --git a/share/man/man9/uiomove.9 b/share/man/man9/uiomove.9
new file mode 100644
index 00000000000..07ad2a52129
--- /dev/null
+++ b/share/man/man9/uiomove.9
@@ -0,0 +1,139 @@
+.\" $NetBSD: uiomove.9,v 1.6 2001/12/26 00:16:30 wiz Exp $
+.\"
+.\" Copyright (c) 1996 The NetBSD Foundation, Inc.
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\" 3. All advertising materials mentioning features or use of this software
+.\" must display the following acknowledgement:
+.\" This product includes software developed by the NetBSD
+.\" Foundation, Inc. and its contributors.
+.\" 4. Neither the name of The NetBSD Foundation nor the names of its
+.\" contributors may be used to endorse or promote products derived
+.\" from this software without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+.\" POSSIBILITY OF SUCH DAMAGE.
+.\"
+.Dd February 12, 1999
+.Dt UIOMOVE 9
+.Os
+.Sh NAME
+.Nm uiomove
+.Nd move data described by a struct uio
+.Sh SYNOPSIS
+.Fd #include <sys/systm.h>
+.Ft int
+.Fn uiomove "caddr_t buf" "int n" "struct uio *uio"
+.Sh DESCRIPTION
+The
+.Nm
+function copies up to
+.Fa n
+bytes between the kernel-space address pointed
+to by
+.Fa buf
+and the addresses described by
+.Fa uio ,
+which may be in user-space or kernel-space.
+.Pp
+The
+.Fa uio
+argument is a pointer to a
+.Fa struct uio
+as defined by
+.Aq Pa sys/uio.h :
+.Bd -literal
+struct uio {
+ struct iovec *uio_iov; /* pointer to array of iovecs */
+ int uio_iovcnt; /* number of iovecs in array */
+ off_t uio_offset; /* offset into file this uio corresponds to */
+ size_t uio_resid; /* residual i/o count */
+ enum uio_seg uio_segflg;
+ enum uio_rw uio_rw;
+ struct proc *uio_procp;/* process if UIO_USERSPACE */
+};
+.Ed
+.Pp
+A
+.Fa struct uio
+typically describes data in motion.
+Several of the fields described below reflect that expectation.
+.Bl -tag -width uio_xxxxxx
+.It uio_iov
+Pointer to array of
+.Fa struct iovecs :
+.Bd -literal
+struct iovec {
+ void *iov_base; /* Base address. */
+ size_t iov_len; /* Length. */
+};
+.Ed
+.It uio_iovcnt
+The number of iovecs in the array.
+.It uio_offset
+An offset into the corresponding object.
+.It uio_resid
+The amount of data remaining to be transferred.
+.It uio_segflg
+A flag indicating whether the space described is in user-space
+(UIO_USERSPACE) or kernel-space (UIO_SYSSPACE).
+.It uio_rw
+A flag indicating whether date should be read into the space
+(UIO_READ) or written from the space (UIO_WRITE).
+.It uio_procp
+A pointer to the process whose data area is described by the
+structure, or NULL if the area is in kernel-space.
+.El
+.Pp
+The value of
+.Fa uio->uio_rw
+controls whether
+.Nm
+copies data from
+.Fa buf
+to
+.Fa uio
+or vice versa.
+.Pp
+The lesser of
+.Fa n
+or
+.Fa uio->resid
+bytes are copied.
+.Pp
+.Nm
+changes fields of the structure pointed to by
+.Fa uio ,
+such that
+.Fa uio->uio_resid
+is decremented by the amount of data moved,
+.Fa uio->uio_offset
+is incremented by the same amount, and the array of iovecs is adjusted
+to point that much farther into the region described.
+This allows multiple calls to
+.Nm
+to easily be used to fill or drain the region of data.
+.Sh RETURN VALUES
+.Nm
+returns 0 on success or EFAULT if a bad address is encountered.
+.Sh SEE ALSO
+.Xr copy 9 ,
+.Xr fetch 9 ,
+.Xr store 9