---
name: "acl_copy_ext"
section: "3"
platform: "linux"
package: "acl"
version: "2.4.0-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "macos"]
url: "https://new.carta.tech/acl_copy_ext"
---

# acl\_copy\_ext(3)

copy an ACL from internal to external representation

## NAME

**acl\_copy\_ext** – copy an ACL from internal to external representation

## LIBRARY

Linux Access Control Lists library (libacl, -lacl).

## SYNOPSIS

**#include \<sys/types.h\>**

**#include \<sys/acl.h\>**

*ssize\_t*\

**acl\_copy\_ext**(*void \*buf\_p*, *acl\_t acl*, *ssize\_t size*);

## DESCRIPTION

The **acl\_copy\_ext**() function copies the ACL pointed to by *acl* from system-managed space to the user managed space pointed to by *buf\_p*. The *size* parameter represents the size in bytes of the buffer pointed to by *buf\_p*. The format of the ACL placed in the buffer pointed to by *buf\_p* is a contiguous, persistent data item, the format of which is unspecified. It is the responsibility of the invoker to allocate an area large enough to hold the copied ACL. The size of the exportable, contiguous, persistent form of the ACL may be obtained by invoking the **acl\_size**() function.

Any ACL entry descriptors that refer to an entry in the ACL referenced by *acl* continue to refer to those entries. Any existing ACL pointers that refer to the ACL referenced by *acl* continue to refer to the ACL.

## RETURN VALUE

Upon success, this function returns the number of bytes placed in the buffer pointed to by *buf\_p*. On error, a value of (ssize\_t)-1 is returned and *errno* is set appropriately.

## ERRORS

If any of the following conditions occur, the **acl\_copy\_ext**() function returns a value of (ssize\_t)-1 and sets *errno* to the corresponding value:

- \[EINVAL\]

  The *size* parameter is zero or negative.

  The argument *acl* is not a valid pointer to an ACL.

  The ACL referenced by *acl* contains one or more improperly formed ACL entries, or for some other reason cannot be translated into the external form of an ACL.

- \[ERANGE\]

  The *size* parameter is greater than zero but smaller than the length of the contiguous, persistent form of the ACL.

## STANDARDS

IEEE Std 1003.1e draft 17 (“POSIX.1e”, abandoned)

## SEE ALSO

[acl\_copy\_int(3)](/acl_copy_int/3.md), [acl\_size(3)](/acl_size/3.md), [acl(5)](/acl/5.md)

## AUTHOR

Derived from the FreeBSD manual pages written by Robert N M Watson ⟨rwatson@FreeBSD.org⟩, and adapted for Linux by Andreas Gruenbacher ⟨andreas.gruenbacher@gmail.com⟩.
