2 * Copyright (c) 2010-2014 Apple Inc. All rights reserved.
4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. The rights granted to you under the License
10 * may not be used to create, or enable the creation or redistribution of,
11 * unlawful or unlicensed copies of an Apple operating system, or to
12 * circumvent, violate, or enable the circumvention or violation of, any
13 * terms of an Apple operating system software license agreement.
15 * Please obtain a copy of the License at
16 * http://www.opensource.apple.com/apsl/ and read it before using this file.
18 * The Original Code and all software distributed under the License are
19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23 * Please see the License for the specific language governing rights and
24 * limitations under the License.
26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
29 #include "_libkernel_init.h"
32 extern _libkernel_functions_t _libkernel_functions
;
33 extern void mig_os_release(void* ptr
);
35 __attribute__((visibility("hidden")))
39 return _libkernel_functions
->malloc(size
);
42 __attribute__((visibility("hidden")))
46 return _libkernel_functions
->free(ptr
);
49 __attribute__((visibility("hidden")))
51 realloc(void *ptr
, size_t size
)
53 return _libkernel_functions
->realloc(ptr
, size
);
56 __attribute__((visibility("hidden")))
58 reallocf(void *ptr
, size_t size
)
60 void *nptr
= realloc(ptr
, size
);
66 __attribute__((visibility("hidden")))
68 _pthread_exit_if_canceled(int error
)
70 return _libkernel_functions
->_pthread_exit_if_canceled(error
);
73 __attribute__((visibility("hidden")))
75 _pthread_set_self(void *ptr
__attribute__((__unused__
))) {}
77 __attribute__((visibility("hidden")))
79 _pthread_clear_qos_tsd(mach_port_t thread_port
)
81 if (_libkernel_functions
->version
>= 3 &&
82 _libkernel_functions
->pthread_clear_qos_tsd
) {
83 return _libkernel_functions
->pthread_clear_qos_tsd(thread_port
);
88 * Upcalls to optimized libplatform string functions
91 static const struct _libkernel_string_functions
92 _libkernel_generic_string_functions
= {
93 .bzero
= _libkernel_bzero
,
94 .memmove
= _libkernel_memmove
,
95 .memset
= _libkernel_memset
,
96 .strchr
= _libkernel_strchr
,
97 .strcmp
= _libkernel_strcmp
,
98 .strcpy
= _libkernel_strcpy
,
99 .strlcpy
= _libkernel_strlcpy
,
100 .strlen
= _libkernel_strlen
,
102 static _libkernel_string_functions_t _libkernel_string_functions
=
103 &_libkernel_generic_string_functions
;
106 __libkernel_platform_init(_libkernel_string_functions_t fns
)
108 _libkernel_string_functions
= fns
;
112 __attribute__((visibility("hidden")))
114 bzero(void *s
, size_t n
)
116 return _libkernel_string_functions
->bzero(s
, n
);
119 __attribute__((visibility("hidden")))
121 memchr(const void *s
, int c
, size_t n
)
123 return _libkernel_string_functions
->memchr(s
, c
, n
);
126 __attribute__((visibility("hidden")))
128 memcmp(const void *s1
, const void *s2
, size_t n
)
130 return _libkernel_string_functions
->memcmp(s1
, s2
, n
);
133 __attribute__((visibility("hidden")))
135 memmove(void *dst
, const void *src
, size_t n
)
137 return _libkernel_string_functions
->memmove(dst
, src
, n
);
140 __attribute__((visibility("hidden")))
142 memcpy(void *dst
, const void *src
, size_t n
)
144 return _libkernel_string_functions
->memmove(dst
, src
, n
);
147 __attribute__((visibility("hidden")))
149 memccpy(void *__restrict dst
, const void *__restrict src
, int c
, size_t n
)
151 return _libkernel_string_functions
->memccpy(dst
, src
, c
, n
);
154 __attribute__((visibility("hidden")))
156 memset(void *b
, int c
, size_t len
)
158 return _libkernel_string_functions
->memset(b
, c
, len
);
161 __attribute__((visibility("hidden")))
163 strchr(const char *s
, int c
)
165 return _libkernel_string_functions
->strchr(s
, c
);
168 __attribute__((visibility("hidden")))
170 index(const char *s
, int c
)
172 return _libkernel_string_functions
->strchr(s
, c
);
175 __attribute__((visibility("hidden")))
177 strcmp(const char *s1
, const char *s2
)
179 return _libkernel_string_functions
->strcmp(s1
, s2
);
182 __attribute__((visibility("hidden")))
184 strcpy(char * restrict dst
, const char * restrict src
)
186 return _libkernel_string_functions
->strcpy(dst
, src
);
189 __attribute__((visibility("hidden")))
191 strlcat(char * restrict dst
, const char * restrict src
, size_t maxlen
)
193 return _libkernel_string_functions
->strlcat(dst
, src
, maxlen
);
196 __attribute__((visibility("hidden")))
198 strlcpy(char * restrict dst
, const char * restrict src
, size_t maxlen
)
200 return _libkernel_string_functions
->strlcpy(dst
, src
, maxlen
);
203 __attribute__((visibility("hidden")))
205 strlen(const char *str
)
207 return _libkernel_string_functions
->strlen(str
);
210 __attribute__((visibility("hidden")))
212 strncmp(const char *s1
, const char *s2
, size_t n
)
214 return _libkernel_string_functions
->strncmp(s1
, s2
, n
);
217 __attribute__((visibility("hidden")))
219 strncpy(char * restrict dst
, const char * restrict src
, size_t maxlen
)
221 return _libkernel_string_functions
->strncpy(dst
, src
, maxlen
);
224 __attribute__((visibility("hidden")))
226 strnlen(const char *s
, size_t maxlen
)
228 return _libkernel_string_functions
->strnlen(s
, maxlen
);
231 __attribute__((visibility("hidden")))
233 strstr(const char *s
, const char *find
)
235 return _libkernel_string_functions
->strstr(s
, find
);
239 * mach/mach.h voucher_mach_msg API
242 static const struct _libkernel_voucher_functions
243 _libkernel_voucher_functions_empty
;
244 static _libkernel_voucher_functions_t _libkernel_voucher_functions
=
245 &_libkernel_voucher_functions_empty
;
248 __libkernel_voucher_init(_libkernel_voucher_functions_t fns
)
250 _libkernel_voucher_functions
= fns
;
255 voucher_mach_msg_set(mach_msg_header_t
*msg
)
257 if (_libkernel_voucher_functions
->voucher_mach_msg_set
) {
258 return _libkernel_voucher_functions
->voucher_mach_msg_set(msg
);
264 voucher_mach_msg_clear(mach_msg_header_t
*msg
)
266 if (_libkernel_voucher_functions
->voucher_mach_msg_clear
) {
267 return _libkernel_voucher_functions
->voucher_mach_msg_clear(msg
);
271 voucher_mach_msg_state_t
272 voucher_mach_msg_adopt(mach_msg_header_t
*msg
)
274 if (_libkernel_voucher_functions
->voucher_mach_msg_adopt
) {
275 return _libkernel_voucher_functions
->voucher_mach_msg_adopt(msg
);
277 return VOUCHER_MACH_MSG_STATE_UNCHANGED
;
281 voucher_mach_msg_revert(voucher_mach_msg_state_t state
)
283 if (_libkernel_voucher_functions
->voucher_mach_msg_revert
) {
284 return _libkernel_voucher_functions
->voucher_mach_msg_revert(state
);