• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2012, The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef ANDROID_FIXUP_H
18 #define ANDROID_FIXUP_H
19 
20 #define loff_t off_t
21 #define off64_t off_t
22 
23 #include <string.h>
24 #include <stdarg.h>
25 #include <stdlib.h>
26 #include <stdio.h>
27 #include <errno.h>
28 #include <locale.h> //LC_MESSAGES
29 
30 #ifndef TEMP_FAILURE_RETRY
31 #define TEMP_FAILURE_RETRY(exp) ({         \
32     typeof (exp) _rc;                      \
33     do {                                   \
34         _rc = (exp);                       \
35     } while (_rc == -1 && errno == EINTR); \
36     _rc; })
37 #endif
38 
39 #if __MAC_OS_X_VERSION_MIN_REQUIRED < 1070
strnlen(const char * __string,size_t __maxlen)40 static inline size_t strnlen (const char *__string, size_t __maxlen)
41 {
42         int len = 0;
43         while (__maxlen-- && *__string++)
44                 len++;
45         return len;
46 }
47 #endif
48 
mempcpy(void * __dest,const void * __src,size_t __n)49 static inline void *mempcpy (void * __dest, const void * __src, size_t __n)
50 {
51         memcpy(__dest, __src, __n);
52         return ((char *)__dest) + __n;
53 }
54 
55 #define __mempcpy mempcpy
56 
57 #define dgettext(domainname, msgid)  dcgettext (domainname, msgid, LC_MESSAGES)
58 
error(int status,int errnum,const char * fmt,...)59 static inline void __attribute__((noreturn)) error(int status, int errnum, const char *fmt, ...)
60 {
61         va_list lst;
62         va_start(lst, fmt);
63         vfprintf(stderr, fmt, lst);
64         fprintf(stderr, "error %d: %s\n", errnum, strerror(errno));
65         va_end(lst);
66         exit(status);
67 }
68 
dcgettext(char * __domainname,char * __msgid,int __category)69 static inline char *dcgettext (char *__domainname, char *__msgid, int __category)
70 {
71         error(EXIT_FAILURE, 0, "%s not implemented!", __FUNCTION__);
72         return NULL;
73 }
74 
75 /* workaround for canonicalize_file_name */
76 #define canonicalize_file_name(path) realpath(path, NULL)
77 
78 /* workaround for open64 */
79 #define open64(path, flags)     open(path, flags)
80 
81 /* rawmemchr */
rawmemchr(const void * s,int c)82 static inline void *rawmemchr(const void *s, int c)
83 {
84     const unsigned char *ptr = s;
85     while (1) {
86         if (*ptr == c) return (void *) ptr;
87         ptr++;
88     }
89 }
90 
91 #define strndup(str, size) strdup(str)
92 
tdestroy(void * root,void (* free_node)(void * nodep))93 static void tdestroy(void *root, void (*free_node)(void *nodep))
94 {
95 }
96 
97 #endif /* ANDROID_FIXUP_H */
98