COPY(9)                NetBSD Kernel Developer's Manual                COPY(9)

NAME
     copy, copyin, copyout, copystr, copyinstr, copyoutstr -- kernel space
     to/from user space copy functions

SYNOPSIS
     #include <sys/types.h>
     #include <sys/systm.h>

     int
     copyin(const void *uaddr, void *kaddr, size_t len);

     int
     copyout(const void *kaddr, void *uaddr, size_t len);

     int
     copystr(const void *kfaddr, void *kdaddr, size_t len, size_t *done);

     int
     copyinstr(const void *uaddr, void *kaddr, size_t len, size_t *done);

     int
     copyoutstr(const void *kaddr, void *uaddr, size_t len, size_t *done);

     int
     copyin_proc(struct proc *p, const void *uaddr, void *kaddr, size_t len);

     int
     copyout_proc(struct proc *p, const void *kaddr, void *uaddr, size_t len);

     int
     ioctl_copyin(int ioctlflags, const void *src, void *dst, size_t len);

     int
     ioctl_copyout(int ioctlflags, const void *src, void *dst, size_t len);

DESCRIPTION
     The copy functions are designed to copy contiguous data from one address
     to another.  All but copystr() copy data from user-space to kernel-space
     or vice-versa.

     The copy routines provide the following functionality:

     copyin()        Copies len bytes of data from the user-space address
                     uaddr in the current process to the kernel-space address
                     kaddr.

     copyout()       Copies len bytes of data from the kernel-space address
                     kaddr to the user-space address uaddr in the current
                     process.

     copystr()       Copies a NUL-terminated string, at most len bytes long,
                     from kernel-space address kfaddr to kernel-space address
                     kdaddr.  If the done argument is non-NULL, the number of
                     bytes actually copied, including the terminating NUL, is
                     returned in *done.

     copyinstr()     Copies a NUL-terminated string, at most len bytes long,
                     from user-space address uaddr in the current process to
                     kernel-space address kaddr.  If the done argument is non-
                     NULL, the number of bytes actually copied, including the
                     terminating NUL, is returned in *done.

     copyoutstr()    Copies a NUL-terminated string, at most len bytes long,
                     from kernel-space address kaddr to user-space address
                     uaddr in the current process.  If the done argument is
                     non-NULL, the number of bytes actually copied, including
                     the terminating NUL, is returned in *done.

     copyin_proc()   Like copyin(), except it operates on the address space of
                     the process p.

     copyout_proc()  Like copyout(), except it operates on the address space
                     of the process p.

     ioctl_copyin()  Like copyin(), except it operates on kernel adresses when
                     the FKIOCTL flag is passed in ioctlflags from the ioctl
                     call.

     ioctl_copyout()
                     Like copyout(), except it operates on kernel adresses
                     when the FKIOCTL flag is passed in ioctlflags from the
                     ioctl call.

RETURN VALUES
     The copy functions return 0 on success or EFAULT if a bad address is
     encountered.  In addition, the copystr(), copyinstr(), and copyoutstr()
     functions return ENAMETOOLONG if the string is longer than len bytes.

SEE ALSO
     fetch(9), store(9)

NetBSD 6.0                      August 28, 2005                     NetBSD 6.0