1#ifndef BEOS_BUILD_COMPATIBILITY_H 2#define BEOS_BUILD_COMPATIBILITY_H 3 4#if defined(HAIKU_HOST_PLATFORM_CYGWIN) 5# ifndef __addr_t_defined 6# define __addr_t_defined 7# endif 8#endif 9 10#if defined(HAIKU_HOST_PLATFORM_CYGWIN) || defined(HAIKU_HOST_PLATFORM_SUNOS) 11#ifndef DEFFILEMODE 12#define DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH) 13#endif 14 15#ifndef S_IUMSK 16#define S_IUMSK 07777 17#endif 18 19#include <ctype.h> 20#endif 21 22#ifdef HAIKU_HOST_PLATFORM_SUNOS 23# include <limits.h> 24# ifndef NAME_MAX 25# define NAME_MAX MAXNAMELEN 26# endif 27#endif 28 29typedef unsigned long haiku_build_addr_t; 30#define addr_t haiku_build_addr_t 31 32#include <Errors.h> 33 34#include <fcntl.h> 35#include <stdio.h> 36#include <string.h> 37#include <sys/stat.h> 38#include <sys/types.h> 39#include <sys/uio.h> 40#include <unistd.h> 41 42#ifdef __cplusplus 43extern "C" { 44#endif 45 46// Is kernel-only under Linux. 47extern size_t strlcpy(char* dest, const char* source, size_t length); 48extern size_t strlcat(char* dest, const char* source, size_t length); 49 50#if defined(HAIKU_HOST_PLATFORM_FREEBSD) || defined(HAIKU_HOST_PLATFORM_DARWIN) 51extern size_t strnlen(const char* string, size_t length); 52#endif 53 54#if defined(HAIKU_HOST_PLATFORM_CYGWIN) || defined(HAIKU_HOST_PLATFORM_SUNOS) 55extern char* stpcpy(char* dest, const char* src); 56extern char* strcasestr(const char* s, const char* find); 57#endif 58 59// BeOS only 60extern ssize_t read_pos(int fd, off_t pos, void* buffer, size_t count); 61extern ssize_t write_pos(int fd, off_t pos, const void* buffer, size_t count); 62extern ssize_t readv_pos(int fd, off_t pos, const struct iovec* vec, 63 size_t count); 64extern ssize_t writev_pos(int fd, off_t pos, const struct iovec* vec, 65 size_t count); 66 67 68// There's no O_NOTRAVERSE under Linux and FreeBSD -- we replace it with a flag 69// that won't be used by our tools, preferrably a non-portable one; a fixed 70// constant could always lead to trouble on the host. 71// We can abuse this flag for our purposes as we filter it in libroot. 72#ifndef O_NOTRAVERSE 73# ifdef O_NOCTTY 74# define O_NOTRAVERSE O_NOCTTY 75# elif defined(O_RANDOM) 76# define O_NOTRAVERSE O_RANDOM 77# else 78# error "Search for a proper replacement value for O_NOTRAVERSE" 79# endif 80#endif 81 82#ifndef S_IUMSK 83# define S_IUMSK ALLPERMS 84#endif 85 86 87// remap strerror() 88extern char* _haiku_build_strerror(int errnum); 89 90#ifndef BUILDING_HAIKU_ERROR_MAPPER 91 92#undef strerror 93#define strerror(errnum) _haiku_build_strerror(errnum) 94 95#endif // BUILDING_HAIKU_ERROR_MAPPER 96 97 98// remap file descriptor functions 99int _haiku_build_fchmod(int fd, mode_t mode); 100int _haiku_build_fchmodat(int fd, const char* path, mode_t mode, int flag); 101int _haiku_build_fstat(int fd, struct stat* st); 102int _haiku_build_fstatat(int fd, const char* path, struct stat* st, 103 int flag); 104int _haiku_build_mkdirat(int fd, const char* path, mode_t mode); 105int _haiku_build_mkfifoat(int fd, const char* path, mode_t mode); 106int _haiku_build_utimensat(int fd, const char* path, 107 const struct timespec times[2], int flag); 108int _haiku_build_futimens(int fd, const struct timespec times[2]); 109int _haiku_build_faccessat(int fd, const char* path, int accessMode, 110 int flag); 111int _haiku_build_fchdir(int fd); 112int _haiku_build_close(int fd); 113int _haiku_build_dup(int fd); 114int _haiku_build_dup2(int fd1, int fd2); 115int _haiku_build_linkat(int toFD, const char* toPath, int pathFD, 116 const char* path, int flag); 117int _haiku_build_unlinkat(int fd, const char* path, int flag); 118ssize_t _haiku_build_readlinkat(int fd, const char* path, char* buffer, 119 size_t bufferSize); 120int _haiku_build_symlinkat(const char* toPath, int fd, 121 const char* symlinkPath); 122int _haiku_build_ftruncate(int fd, off_t newSize); 123int _haiku_build_fchown(int fd, uid_t owner, gid_t group); 124int _haiku_build_fchownat(int fd, const char* path, uid_t owner, 125 gid_t group, int flag); 126int _haiku_build_mknodat(int fd, const char* name, mode_t mode, dev_t dev); 127int _haiku_build_creat(const char* path, mode_t mode); 128#ifndef _HAIKU_BUILD_DONT_REMAP_FD_FUNCTIONS 129int _haiku_build_open(const char* path, int openMode, ...); 130int _haiku_build_openat(int fd, const char* path, int openMode, ...); 131int _haiku_build_fcntl(int fd, int op, ...); 132#else 133int _haiku_build_open(const char* path, int openMode, mode_t permissions); 134int _haiku_build_openat(int fd, const char* path, int openMode, 135 mode_t permissions); 136int _haiku_build_fcntl(int fd, int op, int argument); 137#endif 138int _haiku_build_renameat(int fromFD, const char* from, int toFD, 139 const char* to); 140 141#ifndef _HAIKU_BUILD_DONT_REMAP_FD_FUNCTIONS 142# define fchmod(fd, mode) _haiku_build_fchmod(fd, mode) 143# define fchmodat(fd, path, mode, flag) \ 144 _haiku_build_fchmodat(fd, path, mode, flag) 145# define fstat(fd, st) _haiku_build_fstat(fd, st) 146# define fstatat(fd, path, st, flag) _haiku_build_fstatat(fd, path, st, flag) 147# define mkdirat(fd, path, mode) _haiku_build_mkdirat(fd, path, mode) 148# define mkfifoat(fd, path, mode) _haiku_build_mkfifoat(fd, path, mode) 149# define utimensat(fd, path, times, flag) \ 150 _haiku_build_utimensat(fd, path, times, flag) 151# define futimens(fd, times) _haiku_build_futimens(fd, times) 152# define faccessat(fd, path, accessMode, flag) \ 153 _haiku_build_faccessat(fd, path, accessMode, flag) 154# define fchdir(fd) _haiku_build_fchdir(fd) 155# define close(fd) _haiku_build_close(fd) 156# define dup(fd) _haiku_build_dup(fd) 157# define dup2(fd1, fd2) _haiku_build_dup2(fd1, fd2) 158# define linkat(toFD, toPath, pathFD, path, flag) \ 159 _haiku_build_linkat(toFD, toPath, pathFD, path, flag) 160# define unlinkat(fd, path, flag) _haiku_build_unlinkat(fd, path, flag) 161# define readlinkat(fd, path, buffer, bufferSize) \ 162 _haiku_build_readlinkat(fd, path, buffer, bufferSize) 163# define symlinkat(toPath, fd, symlinkPath) \ 164 _haiku_build_symlinkat(toPath, fd, symlinkPath) 165# define ftruncate(fd, newSize) _haiku_build_ftruncate(fd, newSize) 166# define fchown(fd, owner, group) _haiku_build_fchown(fd, owner, group) 167# define fchownat(fd, path, owner, group, flag) \ 168 _haiku_build_fchownat(fd, path, owner, group, flag) 169# define mknodat(fd, name, mode, dev) \ 170 _haiku_build_mknodat(fd, name, mode, dev) 171# define creat(path, mode) _haiku_build_creat(path, mode) 172# define open(path, openMode...) _haiku_build_open(path, openMode) 173# define openat(fd, path, openMode...) \ 174 _haiku_build_openat(fd, path, openMode) 175# define fcntl(fd, op...) _haiku_build_fcntl(fd, op) 176# define renameat(fromFD, from, toFD, to) \ 177 _haiku_build_renameat(fromFD, from, toFD, to) 178#endif // _HAIKU_BUILD_DONT_REMAP_FD_FUNCTIONS 179 180 181#ifdef __cplusplus 182} // extern "C" 183#endif 184 185#endif // BEOS_BUILD_COMPATIBILITY_H 186 187