---
name: "copystr"
section: "9freebsd"
platform: "linux"
package: "freebsd-manpages"
version: "12.2-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/copy/9freebsd"
---

# copystr(9freebsd)

kernel copy functions

Part of [copy(9freebsd)](/copy/9freebsd.md).

## NAME

**copy**, **copyin**, **copyin\_nofault**, **copyout**, **copyout\_nofault**, **copystr**, **copyinstr** – kernel copy functions

## SYNOPSIS

**#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*\

**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*);

## 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 **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).

## RETURN VALUES

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.

## SEE ALSO

[fetch(9)](/fetch/9.md), [store(9)](/store/9.md)
