/* * Copyright (c) 1997-2003 by The XFree86 Project, Inc. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * Except as contained in this notice, the name of the copyright holder(s) * and author(s) shall not be used in advertising or otherwise to promote * the sale, use or other dealings in this Software without prior written * authorization from the copyright holder(s) and author(s). */ /* * This file is an attempt to make developing code for the new loadable module * architecure simpler. It tries to use macros to hide all libc wrappers so * that all that is needed to "port" a module to this architecture is to * include this one header file * * Revision history: * * * 0.4 Apr 12 1997 add the ANSI defines * 0.3 Feb 24 1997 handle getenv * 0.2 Feb 24 1997 hide few FILE functions * 0.1 Feb 24 1997 hide the trivial functions mem* str* */ #ifndef XF86_LIBC_H #define XF86_LIBC_H 1 #include #include /* * The first set of definitions are required both for modules and * libc_wrapper.c. */ /* * First, the new data types * * note: if some pointer is declared "opaque" here, pass it between * xf86* functions only, and don't rely on it having a whatever internal * structure, even if some source file might reveal the existence of * such a structure. */ typedef void XF86FILE; /* opaque FILE replacement */ extern XF86FILE* xf86stdin; extern XF86FILE* xf86stdout; extern XF86FILE* xf86stderr; typedef void XF86fpos_t; /* opaque fpos_t replacement */ #define _XF86NAMELEN 263 /* enough for a larger filename */ /* (divisble by 8) */ typedef void XF86DIR; /* opaque DIR replacement */ /* Note: the following is POSIX! POSIX only requires the d_name member. * Normal Unix has often a number of other members, but don't rely on that */ struct _xf86dirent { /* types in struct dirent/direct: */ char d_name[_XF86NAMELEN+1]; /* char [MAXNAMLEN]; might be smaller or unaligned */ }; typedef struct _xf86dirent XF86DIRENT; typedef unsigned long xf86size_t; typedef signed long xf86ssize_t; typedef unsigned long xf86dev_t; typedef unsigned int xf86mode_t; typedef unsigned int xf86uid_t; typedef unsigned int xf86gid_t; struct xf86stat { xf86dev_t st_rdev; /* This is incomplete, and makes assumptions */ }; /* sysv IPC */ typedef int xf86key_t; /* setjmp/longjmp */ #if defined(__ia64__) typedef int xf86jmp_buf[1024] __attribute__ ((aligned (16))); /* guarantees 128-bit alignment! */ #else typedef int xf86jmp_buf[1024]; #endif /* for setvbuf */ #define XF86_IONBF 1 #define XF86_IOFBF 2 #define XF86_IOLBF 3 /* for open (XXX not complete) */ #define XF86_O_RDONLY 0x0000 #define XF86_O_WRONLY 0x0001 #define XF86_O_RDWR 0x0002 #define XF86_O_CREAT 0x0200 /* for mmap */ #define XF86_PROT_EXEC 0x0001 #define XF86_PROT_READ 0x0002 #define XF86_PROT_WRITE 0x0004 #define XF86_PROT_NONE 0x0008 #define XF86_MAP_FIXED 0x0001 #define XF86_MAP_SHARED 0x0002 #define XF86_MAP_PRIVATE 0x0004 #define XF86_MAP_32BIT 0x0040 #define XF86_MAP_FAILED ((void *)-1) /* for fseek */ #define XF86_SEEK_SET 0 #define XF86_SEEK_CUR 1 #define XF86_SEEK_END 2 /* for access */ #define XF86_R_OK 0 #define XF86_W_OK 1 #define XF86_X_OK 2 #define XF86_F_OK 3 /* for chmod */ #define XF86_S_ISUID 04000 /* set user ID on execution */ #define XF86_S_ISGID 02000 /* set group ID on execution */ #define XF86_S_ISVTX 01000 /* sticky bit */ #define XF86_S_IRUSR 00400 /* read by owner */ #define XF86_S_IWUSR 00200 /* write by owner */ #define XF86_S_IXUSR 00100 /* execute/search by owner */ #define XF86_S_IRGRP 00040 /* read by group */ #define XF86_S_IWGRP 00020 /* write by group */ #define XF86_S_IXGRP 00010 /* execute/search by group */ #define XF86_S_IROTH 00004 /* read by others */ #define XF86_S_IWOTH 00002 /* write by others */ #define XF86_S_IXOTH 00001 /* execute/search by others */ /* for mknod */ #define XF86_S_IFREG 0010000 #define XF86_S_IFCHR 0020000 #define XF86_S_IFBLK 0040000 #define XF86_S_IFIFO 0100000 /* * errno values * They start at 1000 just so they don't match real errnos at all */ #define xf86_UNKNOWN 1000 #define xf86_EACCES 1001 #define xf86_EAGAIN 1002 #define xf86_EBADF 1003 #define xf86_EEXIST 1004 #define xf86_EFAULT 1005 #define xf86_EINTR 1006 #define xf86_EINVAL 1007 #define xf86_EISDIR 1008 #define xf86_ELOOP 1009 #define xf86_EMFILE 1010 #define xf86_ENAMETOOLONG 1011 #define xf86_ENFILE 1012 #define xf86_ENOENT 1013 #define xf86_ENOMEM 1014 #define xf86_ENOSPC 1015 #define xf86_ENOTDIR 1016 #define xf86_EPIPE 1017 #define xf86_EROFS 1018 #define xf86_ETXTBSY 1019 #define xf86_ENOTTY 1020 #define xf86_ENOSYS 1021 #define xf86_EBUSY 1022 #define xf86_ENODEV 1023 #define xf86_EIO 1024 #define xf86_ESRCH 1025 #define xf86_ENXIO 1026 #define xf86_E2BIG 1027 #define xf86_ENOEXEC 1028 #define xf86_ECHILD 1029 #define xf86_ENOTBLK 1030 #define xf86_EXDEV 1031 #define xf86_EFBIG 1032 #define xf86_ESPIPE 1033 #define xf86_EMLINK 1034 #define xf86_EDOM 1035 #define xf86_ERANGE 1036 /* sysv IPV */ /* xf86shmget() */ #define XF86IPC_CREAT 01000 #define XF86IPC_EXCL 02000 #define XF86IPC_NOWAIT 04000 #define XF86SHM_R 0400 #define XF86SHM_W 0200 #define XF86IPC_PRIVATE ((xf86key_t)0) /* xf86shmat() */ #define XF86SHM_RDONLY 010000 /* attach read-only else read-write */ #define XF86SHM_RND 020000 /* round attach address to SHMLBA */ #define XF86SHM_REMAP 040000 /* take-over region on attach */ /* xf86shmclt() */ #define XF86IPC_RMID 0 /* * the rest of this file should only be included for code that is supposed * to go into modules */ #if !defined(DONT_DEFINE_WRAPPERS) #undef abort #define abort() xf86abort() #undef abs #define abs(i) xf86abs(i) #undef acos #define acos(d) xf86acos(d) #undef asin #define asin(d) xf86asin(d) #undef atan #define atan(d) xf86atan(d) #undef atan2 #define atan2(d1,d2) xf86atan2(d1,d2) #undef atof #define atof(ccp) xf86atof(ccp) #undef atoi #define atoi(ccp) xf86atoi(ccp) #undef atol #define atol(ccp) xf86atol(ccp) #undef bsearch #define bsearch(a,b,c,d,e) xf86bsearch(a,b,c,d,e) #undef ceil #define ceil(d) xf86ceil(d) #undef calloc #define calloc(I1,I2) xf86calloc(I1,I2) #undef clearerr #define clearerr(FP) xf86clearerr(FP) #undef cos #define cos(d) xf86cos(d) #undef exit #define exit(i) xf86exit(i) #undef exp #define exp(d) xf86exp(d) #undef fabs #define fabs(d) xf86fabs(d) #undef fclose #define fclose(FP) xf86fclose(FP) #undef feof #define feof(FP) xf86feof(FP) #undef ferror #define ferror(FP) xf86ferror(FP) #undef fflush #define fflush(FP) xf86fflush(FP) #undef fgetc #define fgetc(FP) xf86fgetc(FP) #undef getc #define getc(FP) xf86getc(FP) #undef fgetpos #define fgetpos(FP,fpp) xf86fgetpos(FP,fpp) #undef fgets #define fgets(cp,i,FP) xf86fgets(cp,i,FP) #undef finite #define finite(d) xf86finite(d) #undef floor #define floor(d) xf86floor(d) #undef fmod #define fmod(d1,d2) xf86fmod(d1,d2) #undef fopen #define fopen(ccp1,ccp2) xf86fopen(ccp1,ccp2) #undef printf #define printf xf86printf #undef fprintf #define fprintf xf86fprintf #undef fputc #define fputc(i,FP) xf86fputc(i,FP) #undef fputs #define fputs(ccp,FP) xf86fputs(ccp,FP) #undef fread #define fread(vp,I1,I2,FP) xf86fread(vp,I1,I2,FP) #undef free #define free(vp) xf86free(vp) #undef freopen #define freopen(ccp1,ccp2,FP) xf86freopen(ccp1,ccp2,FP) #undef frexp #define frexp(x,exp) xf86frexp(x,exp) #undef fscanf #define fscanf xf86fscanf #undef fseek #define fseek(FP,l,i) xf86fseek(FP,l,i) #undef fsetpos #define fsetpos(FP,cfpp) xf86fsetpos(FP,cfpp) #undef ftell #define ftell(FP) xf86ftell(FP) #undef fwrite #define fwrite(cvp,I1,I2,FP) xf86fwrite(cvp,I1,I2,FP) #undef getenv #define getenv(ccp) xf86getenv(ccp) #undef isalnum #define isalnum(i) xf86isalnum(i) #undef isalpha #define isalpha(i) xf86isalpha(i) #undef iscntrl #define iscntrl(i) xf86iscntrl(i) #undef isdigit #define isdigit(i) xf86isdigit(i) #undef isgraph #define isgraph(i) xf86isgraph(i) #undef islower #define islower(i) xf86islower(i) #undef isprint #define isprint(i) xf86isprint(i) #undef ispunct #define ispunct(i) xf86ispunct(i) #undef isspace #define isspace(i) xf86isspace(i) #undef isupper #define isupper(i) xf86isupper(i) #undef isxdigit #define isxdigit(i) xf86isxdigit(i) #undef labs #define labs(l) xf86labs(l) #undef ldexp #define ldexp(x, exp) xf86ldexp(x, exp) #undef log #define log(d) xf86log(d) #undef log10 #define log10(d) xf86log10(d) #undef malloc #define malloc(I) xf86malloc(I) #undef memchr #define memchr(cvp,i,I) xf86memchr(cvp,i,I) #undef memcmp #define memcmp(cvp1,cvp2,I) xf86memcmp(cvp1,cvp2,I) #undef memcpy #define memcpy(vp,cvp,I) xf86memcpy(vp,cvp,I) #undef memmove #define memmove(vp,cvp,I) xf86memmove(vp,cvp,I) #undef memset #define memset(vp,int,I) xf86memset(vp,int,I) #undef modf #define modf(d,dp) xf86modf(d,dp) #undef perror #define perror(ccp) xf86perror(ccp) #undef pow #define pow(d1,d2) xf86pow(d1,d2) #undef random #define random() xf86random() #undef realloc #define realloc(vp,I) xf86realloc(vp,I) #undef remove #define remove(ccp) xf86remove(ccp) #undef rename #define rename(ccp1,ccp2) xf86rename(ccp1,ccp2) #undef rewind #define rewind(FP) xf86rewind(FP) #undef setbuf #define setbuf(FP,cp) xf86setbuf(FP,cp) #undef setvbuf #define setvbuf(FP,cp,i,I) xf86setvbuf(FP,cp,i,I) #undef sin #define sin(d) xf86sin(d) #undef snprintf #define snprintf xf86snprintf #undef sprintf #define sprintf xf86sprintf #undef sqrt #define sqrt(d) xf86sqrt(d) #undef sscanf #define sscanf xf86sscanf #undef strcat #define strcat(cp,ccp) xf86strcat(cp,ccp) #undef strcmp #define strcmp(ccp1,ccp2) xf86strcmp(ccp1,ccp2) #undef strcasecmp #define strcasecmp(ccp1,ccp2) xf86strcasecmp(ccp1,ccp2) #undef strcpy #define strcpy(cp,ccp) xf86strcpy(cp,ccp) #undef strcspn #define strcspn(ccp1,ccp2) xf86strcspn(ccp1,ccp2) #undef strerror #define strerror(i) xf86strerror(i) #undef strlcat #define strlcat(cp,ccp,I) xf86strlcat(cp,ccp,I) #undef strlcpy #define strlcpy(cp,ccp,I) xf86strlcpy(cp,ccp,I) #undef strlen #define strlen(ccp) xf86strlen(ccp) #undef strncmp #define strncmp(ccp1,ccp2,I) xf86strncmp(ccp1,ccp2,I) #undef strncasecmp #define strncasecmp(ccp1,ccp2,I) xf86strncasecmp(ccp1,ccp2,I) #undef strncpy #define strncpy(cp,ccp,I) xf86strncpy(cp,ccp,I) #undef strpbrk #define strpbrk(ccp1,ccp2) xf86strpbrk(ccp1,ccp2) #undef strchr #define strchr(ccp,i) xf86strchr(ccp,i) #undef strrchr #define strrchr(ccp,i) xf86strrchr(ccp,i) #undef strspn #define strspn(ccp1,ccp2) xf86strspn(ccp1,ccp2) #undef strstr #define strstr(ccp1,ccp2) xf86strstr(ccp1,ccp2) #undef srttod #define strtod(ccp,cpp) xf86strtod(ccp,cpp) #undef strtok #define strtok(cp,ccp) xf86strtok(cp,ccp) #undef strtol #define strtol(ccp,cpp,i) xf86strtol(ccp,cpp,i) #undef strtoul #define strtoul(ccp,cpp,i) xf86strtoul(ccp,cpp,i) #undef tan #define tan(d) xf86tan(d) #undef tmpfile #define tmpfile() xf86tmpfile() #undef tolower #define tolower(i) xf86tolower(i) #undef toupper #define toupper(i) xf86toupper(i) #undef ungetc #define ungetc(i,FP) xf86ungetc(i,FP) #undef vfprintf #define vfprintf(p,f,a) xf86vfprintf(p,f,a) #undef vsnprintf #define vsnprintf(s,n,f,a) xf86vsnprintf(s,n,f,a) #undef vsprintf #define vsprintf(s,f,a) xf86vsprintf(s,f,a) /* XXX Disable assert as if NDEBUG was defined */ /* Some X headers defined this away too */ #undef assert #define assert(a) ((void)0) #undef HUGE_VAL #define HUGE_VAL xf86HUGE_VAL #undef hypot #define hypot(x,y) xf86hypot(x,y) #undef qsort #define qsort(b, n, s, f) xf86qsort(b, n, s, f) /* non-ANSI C functions */ #undef opendir #define opendir(cp) xf86opendir(cp) #undef closedir #define closedir(DP) xf86closedir(DP) #undef readdir #define readdir(DP) xf86readdir(DP) #undef rewinddir #define rewinddir(DP) xf86rewinddir(DP) #undef bcopy #define bcopy(vp,cvp,I) xf86memmove(cvp,vp,I) #undef ffs #define ffs(i) xf86ffs(i) #undef strdup #define strdup(ccp) xf86strdup(ccp) #undef bzero #define bzero(vp,ui) xf86bzero(vp,ui) #undef execl #define execl xf86execl #undef chmod #define chmod(a,b) xf86chmod(a,b) #undef chown #define chown(a,b,c) xf86chown(a,b,c) #undef geteuid #define geteuid xf86geteuid #undef getegid #define getegid xf86getegid #undef getpid #define getpid xf86getpid #undef mknod #define mknod(a,b,c) xf86mknod(a,b,c) #undef sleep #define sleep(a) xf86sleep(a) #undef mkdir #define mkdir(a,b) xf86mkdir(a,b) #undef getpagesize #define getpagesize xf86getpagesize #undef shmget #define shmget(a,b,c) xf86shmget(a,b,c) #undef shmat #define shmat(a,b,c) xf86shmat(a,b,c) #undef shmdt #define shmdt(a) xf86shmdt(a) #undef shmctl #define shmctl(a,b,c) xf86shmctl(a,b,c) #undef S_ISUID #define S_ISUID XF86_S_ISUID #undef S_ISGID #define S_ISGID XF86_S_ISGID #undef S_ISVTX #define S_ISVTX XF86_S_ISVTX #undef S_IRUSR #define S_IRUSR XF86_S_IRUSR #undef S_IWUSR #define S_IWUSR XF86_S_IWUSR #undef S_IXUSR #define S_IXUSR XF86_S_IXUSR #undef S_IRGRP #define S_IRGRP XF86_S_IRGRP #undef S_IWGRP #define S_IWGRP XF86_S_IWGRP #undef S_IXGRP #define S_IXGRP XF86_S_IXGRP #undef S_IROTH #define S_IROTH XF86_S_IROTH #undef S_IWOTH #define S_IWOTH XF86_S_IWOTH #undef S_IXOTH #define S_IXOTH XF86_S_IXOTH #undef S_IFREG #define S_IFREG XF86_S_IFREG #undef S_IFCHR #define S_IFCHR XF86_S_IFCHR #undef S_IFBLK #define S_IFBLK XF86_S_IFBLK #undef S_IFIFO #define S_IFIFO XF86_S_IFIFO /* some types */ #undef FILE #define FILE XF86FILE #undef fpos_t #define fpos_t XF86fpos_t #undef DIR #define DIR XF86DIR #undef DIRENT #define DIRENT XF86DIRENT #undef size_t #define size_t xf86size_t #undef ssize_t #define ssize_t xf86ssize_t #undef dev_t #define dev_t xf86dev_t #undef mode_t #define mode_t xf86mode_t #undef uid_t #define uid_t xf86uid_t #undef gid_t #define gid_t xf86gid_t #undef stat_t #define stat_t struct xf86stat #undef ulong #define ulong unsigned long /* * There should be no need to #undef any of these. If they are already * defined it is because some illegal header has been included. */ /* some vars */ #undef stdin #define stdin xf86stdin #undef stdout #define stdout xf86stdout #undef stderr #define stderr xf86stderr #undef SEEK_SET #define SEEK_SET XF86_SEEK_SET #undef SEEK_CUR #define SEEK_CUR XF86_SEEK_CUR #undef SEEK_END #define SEEK_END XF86_SEEK_END /* * XXX Basic I/O functions BAD,BAD,BAD! */ #define open xf86open #define close(a) xf86close(a) #define lseek(a,b,c) xf86lseek(a,b,c) #if !defined(__DragonFly__) #define ioctl(a,b,c) xf86ioctl(a,b,c) #endif #define read(a,b,c) xf86read(a,b,c) #define write(a,b,c) xf86write(a,b,c) #define mmap(a,b,c,d,e,f) xf86mmap(a,b,c,d,e,f) #define munmap(a,b) xf86munmap(a,b) #define stat(a,b) xf86stat(a,b) #define fstat(a,b) xf86fstat(a,b) #define access(a,b) xf86access(a,b) #undef O_RDONLY #define O_RDONLY XF86_O_RDONLY #undef O_WRONLY #define O_WRONLY XF86_O_WRONLY #undef O_RDWR #define O_RDWR XF86_O_RDWR #undef O_CREAT #define O_CREAT XF86_O_CREAT #undef PROT_EXEC #define PROT_EXEC XF86_PROT_EXEC #undef PROT_READ #define PROT_READ XF86_PROT_READ #undef PROT_WRITE #define PROT_WRITE XF86_PROT_WRITE #undef PROT_NONE #define PROT_NONE XF86_PROT_NONE #undef MAP_FIXED #define MAP_FIXED XF86_MAP_FIXED #undef MAP_SHARED #define MAP_SHARED XF86_MAP_SHARED #undef MAP_PRIVATE #define MAP_PRIVATE XF86_MAP_PRIVATE #undef MAP_FAILED #define MAP_FAILED XF86_MAP_FAILED #undef R_OK #define R_OK XF86_R_OK #undef W_OK #define W_OK XF86_W_OK #undef X_OK #define X_OK XF86_X_OK #undef F_OK #define F_OK XF86_F_OK #undef errno #define errno xf86errno #undef putchar #define putchar(i) xf86fputc(i, xf86stdout) #undef puts #define puts(s) xf86fputs(s, xf86stdout) #undef EACCES #define EACCES xf86_EACCES #undef EAGAIN #define EAGAIN xf86_EAGAIN #undef EBADF #define EBADF xf86_EBADF #undef EEXIST #define EEXIST xf86_EEXIST #undef EFAULT #define EFAULT xf86_EFAULT #undef EINTR #define EINTR xf86_EINTR #undef EINVAL #define EINVAL xf86_EINVAL #undef EISDIR #define EISDIR xf86_EISDIR #undef ELOOP #define ELOOP xf86_ELOOP #undef EMFILE #define EMFILE xf86_EMFILE #undef ENAMETOOLONG #define ENAMETOOLONG xf86_ENAMETOOLONG #undef ENFILE #define ENFILE xf86_ENFILE #undef ENOENT #define ENOENT xf86_ENOENT #undef ENOMEM #define ENOMEM xf86_ENOMEM #undef ENOSPC #define ENOSPC xf86_ENOSPC #undef ENOTDIR #define ENOTDIR xf86_ENOTDIR #undef EPIPE #define EPIPE xf86_EPIPE #undef EROFS #define EROFS xf86_EROFS #undef ETXTBSY #define ETXTBSY xf86_ETXTBSY #undef ENOTTY #define ENOTTY xf86_ENOTTY #undef ENOSYS #define ENOSYS xf86_ENOSYS #undef EBUSY #define EBUSY xf86_EBUSY #undef ENODEV #define ENODEV xf86_ENODEV #undef EIO #define EIO xf86_EIO /* IPC stuff */ #undef SHM_RDONLY #define SHM_RDONLY XF86SHM_RDONLY #undef SHM_RND #define SHM_RND XF86SHM_RND #undef SHM_REMAP #define SHM_REMAP XF86SHM_REMAP #undef IPC_RMID #define IPC_RMID XF86IPC_RMID #undef IPC_CREAT #define IPC_CREAT XF86IPC_CREAT #undef IPC_EXCL #define IPC_EXCL XF86IPC_EXCL #undef PC_NOWAIT #define IPC_NOWAIT XF86IPC_NOWAIT #undef SHM_R #define SHM_R XF86SHM_R #undef SHM_W #define SHM_W XF86SHM_W #undef IPC_PRIVATE #define IPC_PRIVATE XF86IPC_PRIVATE /* Some ANSI macros */ #undef FILENAME_MAX #define FILENAME_MAX 1024 #if (defined(sun) && defined(__SVR4)) # define _FILEDEFED /* Already have FILE defined, don't redefine it */ #endif #endif /* !DONT_DEFINE_WRAPPERS */ #if (!defined(DONT_DEFINE_WRAPPERS) || defined(DEFINE_SETJMP_WRAPPERS)) #undef setjmp #define setjmp(a) xf86setjmp_macro(a) #undef longjmp #define longjmp(a,b) xf86longjmp(a,b) #undef jmp_buf #define jmp_buf xf86jmp_buf #endif #endif /* XF86_LIBC_H */