copy
, copyin
,
copyin_nofault
, copyout
,
copyout_nofault
, copystr
,
copyinstr
—
heterogenous address space copy functions
#include <sys/types.h>
#include <sys/systm.h>
int
copyin
(const
void *uaddr, void
*kaddr, size_t
len);
int
copyin_nofault
(const
void *uaddr, void
*kaddr, size_t
len);
int
copyout
(const
void *kaddr, void
*uaddr, size_t
len);
int
copyout_nofault
(const
void *kaddr, void
*uaddr, size_t
len);
int __deprecated
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);
The copy
functions are designed to copy contiguous data
from one address space to another.
copystr
() is deprecated and should be
replaced with
strlcpy(9).
It will be removed from FreeBSD 13.
The copyin
() and
copyin_nofault
() functions copy
len bytes of data from the user-space address
uaddr to the kernel-space address
kaddr.
The copyout
() and
copyout_nofault
() functions copy
len bytes of data from the kernel-space address
kaddr to the user-space address
uaddr.
The copyin_nofault
() and
copyout_nofault
() functions require that the
kernel-space and user-space data be accessible without incurring a page
fault. The source and destination addresses must be physically mapped for
read and write access, respectively, and neither the source nor destination
addresses may be pageable.
The copystr
() function copies a
NUL-terminated string, at most len bytes long, from
kernel-space address kfaddr to kernel-space address
kdaddr. The number of bytes actually copied, including
the terminating NUL, is returned in *done (if
done is
non-NULL
).
The copyinstr
() function copies a
NUL-terminated string, at most len bytes long, from
user-space address uaddr to kernel-space address
kaddr. The number of bytes actually copied, including
the terminating NUL, is returned in *done (if
done is
non-NULL
).
The copy
functions return 0 on success. All but
copystr
() return EFAULT
if a
bad address is encountered. The copyin_nofault
() and
copyout_nofault
() functions return
EFAULT
if a page fault occurs. The
copystr
() and copyinstr
()
functions return ENAMETOOLONG
if the string is longer
than len bytes.