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)