xref: /haiku/headers/build/HaikuBuildCompatibility.h (revision b357daa5c5ef5e693e51a19cdaf83edea1ad434f)
1 #ifndef HAIKU_BUILD_COMPATIBILITY_H
2 #define HAIKU_BUILD_COMPATIBILITY_H
3 
4 /*!
5 	This header is automatically included in all Haiku applications
6 	that are built for BeOS or a Haiku host (which might not be compatible
7 	with the current Haiku source anymore).
8 	It will make BeOS/Haiku a bit more Haiku compatible, and slightly more
9 	POSIX compatible, too. It is supposed to keep the BeOS compatibility
10 	kludges in our source files at a minimum.
11 */
12 
13 #ifdef HAIKU_TARGET_PLATFORM_LIBBE_TEST
14 #	define _BE_ERRNO_H_
15 		// this is what Dano/Zeta is using
16 #	include <Errors.h>
17 #endif
18 
19 #include <sys/stat.h>
20 #include <sys/types.h>
21 #include <SupportDefs.h>
22 #include <TypeConstants.h>
23 
24 #include <string.h>
25 
26 // no addr_t under standard BeOS
27 #if !defined(HAIKU_TARGET_PLATFORM_LIBBE_TEST) \
28 	&& !defined(HAIKU_HOST_PLATFORM_HAIKU)
29 	typedef unsigned long haiku_build_addr_t;
30 #	define addr_t haiku_build_addr_t
31 #endif
32 
33 #if !defined(HAIKU_TARGET_PLATFORM_LIBBE_TEST) \
34 	&& !defined(HAIKU_HOST_PLATFORM_HAIKU)
35 
36 struct sockaddr_storage {
37 	uint8	ss_len;			/* total length */
38 	uint8	ss_family;		/* address family */
39 	uint8	__ss_pad1[6];	/* align to quad */
40 	uint64	__ss_pad2;		/* force alignment to 64 bit */
41 	uint8	__ss_pad3[112];	/* pad to a total of 128 bytes */
42 };
43 
44 typedef int socklen_t;
45 
46 #endif	// !HAIKU_HOST_PLATFORM_HAIKU
47 
48 #ifndef DEFFILEMODE
49 #	define	DEFFILEMODE	(S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)
50 #endif
51 
52 #ifndef FS_WRITE_FSINFO_NAME
53 #	define	FS_WRITE_FSINFO_NAME	0x0001
54 #endif
55 
56 #ifndef B_CURRENT_TEAM
57 #	define B_CURRENT_TEAM	0
58 #endif
59 
60 #ifndef SYMLOOP_MAX
61 #	define SYMLOOP_MAX	(16)
62 #endif
63 
64 #ifndef B_FIRST_REAL_TIME_PRIORITY
65 #	define B_FIRST_REAL_TIME_PRIORITY B_REAL_TIME_DISPLAY_PRIORITY
66 #endif
67 
68 #if !defined(HAIKU_TARGET_PLATFORM_LIBBE_TEST) \
69 	&& !defined(B_SPINLOCK_INITIALIZER)
70 #	define B_SPINLOCK_INITIALIZER 0
71 #endif
72 
73 #if defined(__GNUC__) && !defined(_PRINTFLIKE)
74 #	define _PRINTFLIKE(_format_, _args_) \
75 		__attribute__((format(__printf__, _format_, _args_)))
76 #endif
77 
78 #if 0
79 // NOTE: This is probably only needed on platforms which don't use ELF
80 // as binary format. So could probably be removed completely.
81 #if defined(HAIKU_TARGET_PLATFORM_LIBBE_TEST) \
82 	&& !defined(HAIKU_HOST_PLATFORM_HAIKU)
83 // BeOS version of BeBuild.h defines this
84 #	define _IMPEXP_ROOT			__declspec(dllimport)
85 #	define _IMPEXP_BE			__declspec(dllimport)
86 #	define _IMPEXP_MEDIA		__declspec(dllimport)
87 #	define _IMPEXP_TRACKER		__declspec(dllimport)
88 #	define _IMPEXP_TRANSLATION	__declspec(dllimport)
89 #	define _IMPEXP_DEVICE		__declspec(dllimport)
90 #	define _IMPEXP_NET			__declspec(dllimport)
91 #endif
92 #endif
93 
94 #if defined(__cplusplus) && !defined(HAIKU_HOST_PLATFORM_HAIKU)
95 class BBuffer;
96 class BBufferConsumer;
97 class BBufferGroup;
98 class BContinuousParameter;
99 class BControllable;
100 class BFileInterface;
101 class BMimeType;
102 class BParameterWeb;
103 class BRegion;
104 class BTextView;
105 class BTranslator;
106 class BTimeSource;
107 struct entry_ref;
108 struct media_node;
109 #endif
110 
111 #ifdef __cplusplus
112 extern "C" {
113 #endif
114 
115 extern size_t	strnlen(const char *string, size_t count);
116 
117 extern size_t	strlcat(char *dest, const char *source, size_t length);
118 extern size_t   strlcpy(char *dest, const char *source, size_t length);
119 
120 extern char		*strcasestr(const char *string, const char *searchString);
121 
122 extern float	roundf(float value);
123 
124 #ifdef __cplusplus
125 }
126 #endif
127 
128 // These are R1-specific extensions
129 #if !defined(HAIKU_TARGET_PLATFORM_LIBBE_TEST) \
130 	&& !defined(HAIKU_HOST_PLATFORM_HAIKU)
131 #	define B_TRANSLATION_MAKE_VERSION(major, minor, revision) \
132 		((major << 8) | ((minor << 4) & 0xf0) | (revision & 0x0f))
133 #	define B_TRANSLATION_MAJOR_VERSION(v) (v >> 8)
134 #	define B_TRANSLATION_MINOR_VERSION(v) ((v >> 4) & 0xf)
135 #	define B_TRANSLATION_REVISION_VERSION(v) (v & 0xf)
136 #	ifndef USING_HAIKU_TYPE_CONSTANTS_H
137 #		define B_LARGE_ICON_TYPE		'ICON'
138 #		define B_MINI_ICON_TYPE			'MICN'
139 #		define B_VECTOR_ICON_TYPE		'VICN'
140 #		define B_BITMAP_NO_SERVER_LINK	0
141 #		define B_BITMAP_SCALE_BILINEAR	0
142 #	endif
143 #endif	// HAIKU_TARGET_PLATFORM_LIBBE_TEST
144 
145 #if !defined(HAIKU_TARGET_PLATFORM_LIBBE_TEST) \
146 	&& !defined(HAIKU_HOST_PLATFORM_HAIKU)
147 #	if !defined(B_NOT_SUPPORTED)
148 #		define B_NOT_SUPPORTED			(B_ERROR)
149 #	endif
150 #	define B_KERNEL_READ_AREA			0
151 #	define B_KERNEL_WRITE_AREA			0
152 #endif
153 
154 #include <limits.h>
155 
156 #ifndef INT32_MAX
157 #	define INT32_MAX INT_MAX
158 #endif
159 
160 #ifndef INT64_MAX
161 #	define INT64_MAX LONGLONG_MAX
162 #endif
163 
164 #if !defined(HAIKU_TARGET_PLATFORM_LIBBE_TEST) \
165 	&& !defined(HAIKU_HOST_PLATFORM_HAIKU)
166 #	define	B_MPEG_2_AUDIO_LAYER_1 (enum mpeg_id)0x201
167 #	define	B_MPEG_2_AUDIO_LAYER_2 (enum mpeg_id)0x202
168 #	define	B_MPEG_2_AUDIO_LAYER_3 (enum mpeg_id)0x203
169 #	define	B_MPEG_2_VIDEO (enum mpeg_id)0x211
170 #	define	B_MPEG_2_5_AUDIO_LAYER_1 (enum mpeg_id)0x301
171 #	define	B_MPEG_2_5_AUDIO_LAYER_2 (enum mpeg_id)0x302
172 #	define	B_MPEG_2_5_AUDIO_LAYER_3 (enum mpeg_id)0x303
173 #endif
174 
175 // TODO: experimental API (keep in sync with Accelerant.h)
176 #if !defined(HAIKU_TARGET_PLATFORM_LIBBE_TEST) \
177 	&& !defined(HAIKU_HOST_PLATFORM_HAIKU)
178 typedef struct {
179 	uint32	version;
180 	char	vendor[128];
181 	char	name[128];
182 	char	serial_number[128];
183 	uint32	product_id;
184 	struct {
185 		uint16	week;
186 		uint16	year;
187 	}		produced;
188 	float	width;
189 	float	height;
190 	uint32	min_horizontal_frequency;	// in kHz
191 	uint32	max_horizontal_frequency;
192 	uint32	min_vertical_frequency;		// in Hz
193 	uint32	max_vertical_frequency;
194 	uint32	max_pixel_clock;			// in kHz
195 } monitor_info;
196 #endif // !HAIKU_HOST_PLATFORM_HAIKU
197 
198 
199 #if !defined(B_HAIKU_32_BIT) && !defined(B_HAIKU_64_BIT)
200 #	ifdef HAIKU_HOST_PLATFORM_64_BIT
201 #		define B_HAIKU_64_BIT	1
202 #	else
203 #		define B_HAIKU_32_BIT	1
204 #	endif
205 #endif
206 
207 #ifndef B_PRId8
208 #	define	__HAIKU_PRI_PREFIX_32		"l"
209 #	define	__HAIKU_PRI_PREFIX_64		"ll"
210 #	define	__HAIKU_PRI_PREFIX_ADDR		"l"
211 
212 	/* printf()/scanf() format strings for [u]int* types */
213 #	define B_PRId8			"d"
214 #	define B_PRIi8			"i"
215 #	define B_PRId16			"d"
216 #	define B_PRIi16			"i"
217 #	define B_PRId32			__HAIKU_PRI_PREFIX_32 "d"
218 #	define B_PRIi32			__HAIKU_PRI_PREFIX_32 "i"
219 #	define B_PRId64			__HAIKU_PRI_PREFIX_64 "d"
220 #	define B_PRIi64			__HAIKU_PRI_PREFIX_64 "i"
221 #	define B_PRIu8			"u"
222 #	define B_PRIo8			"o"
223 #	define B_PRIx8			"x"
224 #	define B_PRIX8			"X"
225 #	define B_PRIu16			"u"
226 #	define B_PRIo16			"o"
227 #	define B_PRIx16			"x"
228 #	define B_PRIX16			"X"
229 #	define B_PRIu32			__HAIKU_PRI_PREFIX_32 "u"
230 #	define B_PRIo32			__HAIKU_PRI_PREFIX_32 "o"
231 #	define B_PRIx32			__HAIKU_PRI_PREFIX_32 "x"
232 #	define B_PRIX32			__HAIKU_PRI_PREFIX_32 "X"
233 #	define B_PRIu64			__HAIKU_PRI_PREFIX_64 "u"
234 #	define B_PRIo64			__HAIKU_PRI_PREFIX_64 "o"
235 #	define B_PRIx64			__HAIKU_PRI_PREFIX_64 "x"
236 #	define B_PRIX64			__HAIKU_PRI_PREFIX_64 "X"
237 
238 #	define B_SCNd8 			"hhd"
239 #	define B_SCNi8 			"hhi"
240 #	define B_SCNd16			"hd"
241 #	define B_SCNi16	 		"hi"
242 #	define B_SCNd32 		__HAIKU_PRI_PREFIX_32 "d"
243 #	define B_SCNi32	 		__HAIKU_PRI_PREFIX_32 "i"
244 #	define B_SCNd64			__HAIKU_PRI_PREFIX_64 "d"
245 #	define B_SCNi64 		__HAIKU_PRI_PREFIX_64 "i"
246 #	define B_SCNu8 			"hhu"
247 #	define B_SCNo8 			"hho"
248 #	define B_SCNx8 			"hhx"
249 #	define B_SCNu16			"hu"
250 #	define B_SCNo16			"ho"
251 #	define B_SCNx16			"hx"
252 #	define B_SCNu32 		__HAIKU_PRI_PREFIX_32 "u"
253 #	define B_SCNo32 		__HAIKU_PRI_PREFIX_32 "o"
254 #	define B_SCNx32 		__HAIKU_PRI_PREFIX_32 "x"
255 #	define B_SCNu64			__HAIKU_PRI_PREFIX_64 "u"
256 #	define B_SCNo64			__HAIKU_PRI_PREFIX_64 "o"
257 #	define B_SCNx64			__HAIKU_PRI_PREFIX_64 "x"
258 
259 	/* printf() format strings for some standard types */
260 	/* size_t */
261 #	define B_PRIuSIZE		__HAIKU_PRI_PREFIX_ADDR "u"
262 #	define B_PRIoSIZE		__HAIKU_PRI_PREFIX_ADDR "o"
263 #	define B_PRIxSIZE		__HAIKU_PRI_PREFIX_ADDR "x"
264 #	define B_PRIXSIZE		__HAIKU_PRI_PREFIX_ADDR "X"
265 	/* ssize_t */
266 #	define B_PRIdSSIZE		__HAIKU_PRI_PREFIX_ADDR "d"
267 #	define B_PRIiSSIZE		__HAIKU_PRI_PREFIX_ADDR "i"
268 	/* addr_t */
269 #	define B_PRIuADDR		__HAIKU_PRI_PREFIX_ADDR "u"
270 #	define B_PRIoADDR		__HAIKU_PRI_PREFIX_ADDR "o"
271 #	define B_PRIxADDR		__HAIKU_PRI_PREFIX_ADDR "x"
272 #	define B_PRIXADDR		__HAIKU_PRI_PREFIX_ADDR "X"
273 	/* off_t */
274 #	define B_PRIdOFF		B_PRId64
275 #	define B_PRIiOFF		B_PRIi64
276 	/* dev_t */
277 #	define B_PRIdDEV		B_PRId32
278 #	define B_PRIiDEV		B_PRIi32
279 	/* ino_t */
280 #	define B_PRIdINO		B_PRId64
281 #	define B_PRIiINO		B_PRIi64
282 	/* time_t */
283 #	if defined(__i386__) && !defined(__x86_64__)
284 #		define B_PRIdTIME		B_PRId32
285 #		define B_PRIiTIME		B_PRIi32
286 #	else
287 #		define B_PRIdTIME		B_PRId64
288 #		define B_PRIiTIME		B_PRIi64
289 #	endif
290 #endif	// !B_PRId8
291 
292 
293 #endif	// HAIKU_BUILD_COMPATIBILITY_H
294