summaryrefslogtreecommitdiffstats
path: root/lib/libc/posix1e/acl_init.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libc/posix1e/acl_init.c')
-rw-r--r--lib/libc/posix1e/acl_init.c25
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);
}
OpenPOWER on IntegriCloud