summaryrefslogtreecommitdiff
blob: 97ac14160b8752aa9089a36bf6d063f984740dd2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Backport aligned_alloc for C++11 support.

http://lists.freebsd.org/pipermail/svn-src-stable-9/2012-November/003313.html

diff -uNr lib.old/libc/stdlib/Symbol.map lib/libc/stdlib/Symbol.map
--- lib.old/libc/stdlib/Symbol.map	2013-05-24 17:03:55.000000000 -0400
+++ lib/libc/stdlib/Symbol.map	2013-05-24 17:06:03.000000000 -0400
@@ -97,6 +97,7 @@
 	atoi_l;
 	atol_l;
 	atoll_l;
+	aligned_alloc;
 	at_quick_exit;
 	quick_exit;
 	strtod_l;
diff -uNr lib.old/libc/stdlib/malloc.c lib/libc/stdlib/malloc.c
--- lib.old/libc/stdlib/malloc.c	2013-05-24 17:03:55.000000000 -0400
+++ lib/libc/stdlib/malloc.c	2013-05-24 17:05:40.000000000 -0400
@@ -6046,6 +6046,21 @@
 }
 
 void *
+aligned_alloc(size_t alignment, size_t size)
+{
+	void *memptr;
+	int ret;
+
+	ret = posix_memalign(&memptr, alignment, size);
+	if (ret != 0) {
+		errno = ret;
+		return (NULL);
+	}
+	return (memptr);
+}
+
+
+void *
 calloc(size_t num, size_t size)
 {
 	void *ret;
diff -uNr includeold/stdlib.h include/stdlib.h
--- includeold/stdlib.h	2013-05-24 17:03:46.000000000 -0400
+++ include/stdlib.h	2013-05-24 17:04:46.000000000 -0400
@@ -155,6 +155,7 @@
  * If we're in a mode greater than C99, expose C1x functions.
  */
 #if __ISO_C_VISIBLE >= 2011 || __cplusplus >= 201103L
+void *	aligned_alloc(size_t, size_t);
 _Noreturn void
 	quick_exit(int);
 int	at_quick_exit(void (*)(void));