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 36struct 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 44typedef 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) 95class BBuffer; 96class BBufferConsumer; 97class BBufferGroup; 98class BContinuousParameter; 99class BControllable; 100class BFileInterface; 101class BMimeType; 102class BParameterWeb; 103class BRegion; 104class BTextView; 105class BTranslator; 106class BTimeSource; 107struct entry_ref; 108struct media_node; 109#endif 110 111#ifdef __cplusplus 112extern "C" { 113#endif 114 115extern size_t strnlen(const char *string, size_t count); 116 117extern size_t strlcat(char *dest, const char *source, size_t length); 118extern size_t strlcpy(char *dest, const char *source, size_t length); 119 120extern char *strcasestr(const char *string, const char *searchString); 121 122extern 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) 178typedef 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