]> git.proxmox.com Git - ceph.git/blob - ceph/src/include/compat.h
update sources to 12.2.7
[ceph.git] / ceph / src / include / compat.h
1 /*
2 * Ceph - scalable distributed file system
3 *
4 * Copyright (C) 2011 Stanislav Sedov <stas@FreeBSD.org>
5 *
6 * This is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License version 2.1, as published by the Free Software
9 * Foundation. See file COPYING.
10 */
11
12 #ifndef CEPH_COMPAT_H
13 #define CEPH_COMPAT_H
14
15 #include "acconfig.h"
16 #include <sys/types.h>
17
18 #if defined(__linux__)
19 #define PROCPREFIX
20 #endif
21
22 #if defined(__FreeBSD__)
23
24 // FreeBSD supports Linux procfs with its compatibility module
25 // And all compatibility stuff is standard mounted on this
26 #define PROCPREFIX "/compat/linux"
27
28 /* Make sure that ENODATA is defined in the correct way */
29 #ifndef ENODATA
30 #define ENODATA ENOATTR
31 #else
32 #if (ENODATA == 9919)
33 // #warning ENODATA already defined to be 9919, redefining to fix
34 // Silencing this warning because it fires at all files where compat.h
35 // is included after boost files.
36 //
37 // This value stems from the definition in the boost library
38 // And when this case occurs it is due to the fact that boost files
39 // are included before this file. Redefinition might not help in this
40 // case since already parsed code has evaluated to the wrong value.
41 // This would warrrant for d definition that would actually be evaluated
42 // at the location of usage and report a possible confict.
43 // This is left up to a future improvement
44 #elif (ENODATA != 87)
45 #warning ENODATA already defined to a value different from 87 (ENOATRR), refining to fix
46 #endif
47 #undef ENODATA
48 #define ENODATA ENOATTR
49 #endif
50 #ifndef MSG_MORE
51 #define MSG_MORE 0
52 #endif
53
54 #ifndef O_DSYNC
55 #define O_DSYNC O_SYNC
56 #endif
57
58 // Fix clock accuracy
59 #if !defined(CLOCK_MONOTONIC_COARSE)
60 #if defined(CLOCK_MONOTONIC_FAST)
61 #define CLOCK_MONOTONIC_COARSE CLOCK_MONOTONIC_FAST
62 #else
63 #define CLOCK_MONOTONIC_COARSE CLOCK_MONOTONIC
64 #endif
65 #endif
66 #if !defined(CLOCK_REALTIME_COARSE)
67 #if defined(CLOCK_REALTIME_FAST)
68 #define CLOCK_REALTIME_COARSE CLOCK_REALTIME_FAST
69 #else
70 #define CLOCK_REALTIME_COARSE CLOCK_REALTIME
71 #endif
72 #endif
73
74 /* And include the extra required include file */
75 #include <pthread_np.h>
76
77 #endif /* !__FreeBSD__ */
78
79 #if defined(__APPLE__) || defined(__FreeBSD__)
80 /* get PATH_MAX */
81 #include <limits.h>
82
83 #ifndef EREMOTEIO
84 #define EREMOTEIO 121
85 #endif
86
87 #ifndef HOST_NAME_MAX
88 #ifdef MAXHOSTNAMELEN
89 #define HOST_NAME_MAX MAXHOSTNAMELEN
90 #else
91 #define HOST_NAME_MAX 255
92 #endif
93 #endif
94
95 #endif /* __APPLE__ */
96
97 /* O_LARGEFILE is not defined/required on OSX/FreeBSD */
98 #ifndef O_LARGEFILE
99 #define O_LARGEFILE 0
100 #endif
101
102 /* Could be relevant for other platforms */
103 #ifndef ERESTART
104 #define ERESTART EINTR
105 #endif
106
107 #ifndef TEMP_FAILURE_RETRY
108 #define TEMP_FAILURE_RETRY(expression) ({ \
109 __typeof(expression) __result; \
110 do { \
111 __result = (expression); \
112 } while (__result == -1 && errno == EINTR); \
113 __result; })
114 #endif
115
116 #ifdef __cplusplus
117 # define VOID_TEMP_FAILURE_RETRY(expression) \
118 static_cast<void>(TEMP_FAILURE_RETRY(expression))
119 #else
120 # define VOID_TEMP_FAILURE_RETRY(expression) \
121 do { (void)TEMP_FAILURE_RETRY(expression); } while (0)
122 #endif
123
124 #if defined(__FreeBSD__) || defined(__APPLE__)
125 #define lseek64(fd, offset, whence) lseek(fd, offset, whence)
126 #endif
127
128 #if defined(__sun) || defined(_AIX)
129 #define LOG_AUTHPRIV (10<<3)
130 #define LOG_FTP (11<<3)
131 #define __STRING(x) "x"
132 #define IFTODT(mode) (((mode) & 0170000) >> 12)
133 #endif
134
135 #if defined(_AIX)
136 #define MSG_DONTWAIT MSG_NONBLOCK
137 #endif
138
139 #if defined(HAVE_PTHREAD_SETNAME_NP)
140 #if defined(__APPLE__)
141 #define ceph_pthread_setname(thread, name) ({ \
142 int __result = 0; \
143 if (thread == pthread_self()) \
144 __result = pthread_setname_np(name); \
145 __result; })
146 #else
147 #define ceph_pthread_setname pthread_setname_np
148 #endif
149 #elif defined(HAVE_PTHREAD_SET_NAME_NP)
150 /* Fix a small name diff */
151 #define ceph_pthread_setname pthread_set_name_np
152 #else
153 /* compiler warning free success noop */
154 #define ceph_pthread_setname(thread, name) ({ \
155 int __i = 0; \
156 __i; })
157 #endif
158
159 #if defined(HAVE_PTHREAD_GETNAME_NP)
160 #define ceph_pthread_getname pthread_getname_np
161 #else
162 /* compiler warning free success noop */
163 #define ceph_pthread_getname(thread, name, len) ({ \
164 if (name != NULL) \
165 *name = '\0'; \
166 0; })
167 #endif
168
169 int ceph_posix_fallocate(int fd, off_t offset, off_t len);
170
171 #endif /* !CEPH_COMPAT_H */