diff options
Diffstat (limited to 'lib/libc/posix1e/acl_init.c')
-rw-r--r-- | lib/libc/posix1e/acl_init.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/lib/libc/posix1e/acl_init.c b/lib/libc/posix1e/acl_init.c index 905df60..4fe4037 100644 --- a/lib/libc/posix1e/acl_init.c +++ b/lib/libc/posix1e/acl_init.c @@ -38,10 +38,22 @@ __FBSDID("$FreeBSD$"); #include <errno.h> #include <stdlib.h> #include <string.h> +#include <assert.h> + +#include "acl_support.h" + +#ifndef CTASSERT +#define CTASSERT(x) _CTASSERT(x, __LINE__) +#define _CTASSERT(x, y) __CTASSERT(x, y) +#define __CTASSERT(x, y) typedef char __assert_ ## y [(x) ? 1 : -1] +#endif + +CTASSERT(1 << _ACL_T_ALIGNMENT_BITS > sizeof(struct acl_t_struct)); acl_t acl_init(int count) { + int error; acl_t acl; if (count > ACL_MAX_ENTRIES) { @@ -53,11 +65,14 @@ acl_init(int count) return (NULL); } - acl = malloc(sizeof(struct acl_t_struct)); - if (acl != NULL) { - bzero(acl, sizeof(struct acl_t_struct)); - acl->ats_acl.acl_maxcnt = ACL_MAX_ENTRIES; - } + error = posix_memalign((void *)&acl, 1 << _ACL_T_ALIGNMENT_BITS, + sizeof(struct acl_t_struct)); + if (error) + return (NULL); + + bzero(acl, sizeof(struct acl_t_struct)); + acl->ats_brand = ACL_BRAND_UNKNOWN; + acl->ats_acl.acl_maxcnt = ACL_MAX_ENTRIES; return (acl); } |