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
Thecopy
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 addresses when theFKIOCTL
flag is passed in ioctlflags from the ioctl call. ioctl_copyout
()- Like
copyout
(), except it operates on kernel addresses when theFKIOCTL
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.