b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* $XdotOrg: xserver/xorg/hw/xfree86/os-support/xf86_libc.h,v 1.10 2006/01/28 02:20:37 anholt Exp $ */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/xf86_libc.h,v 3.63 2003/12/08 21:46:55 alanh Exp $ */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Copyright (c) 1997-2003 by The XFree86 Project, Inc.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Permission is hereby granted, free of charge, to any person obtaining a
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * copy of this software and associated documentation files (the "Software"),
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * to deal in the Software without restriction, including without limitation
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * the rights to use, copy, modify, merge, publish, distribute, sublicense,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * and/or sell copies of the Software, and to permit persons to whom the
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Software is furnished to do so, subject to the following conditions:
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * The above copyright notice and this permission notice shall be included in
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * all copies or substantial portions of the Software.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * OTHER DEALINGS IN THE SOFTWARE.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Except as contained in this notice, the name of the copyright holder(s)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * and author(s) shall not be used in advertising or otherwise to promote
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * the sale, use or other dealings in this Software without prior written
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * authorization from the copyright holder(s) and author(s).
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * This file is an attempt to make developing code for the new loadable module
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * architecure simpler. It tries to use macros to hide all libc wrappers so
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * that all that is needed to "port" a module to this architecture is to
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * include this one header file
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Revision history:
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * 0.4 Apr 12 1997 add the ANSI defines
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * 0.3 Feb 24 1997 handle getenv
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * 0.2 Feb 24 1997 hide few FILE functions
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * 0.1 Feb 24 1997 hide the trivial functions mem* str*
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * The first set of definitions are required both for modules and
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#if defined(XFree86LOADER) || defined(NEED_XF86_TYPES)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * First, the new data types
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * note: if some pointer is declared "opaque" here, pass it between
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * xf86* functions only, and don't rely on it having a whatever internal
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * structure, even if some source file might reveal the existence of
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * such a structure.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef void XF86FILE; /* opaque FILE replacement */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef void XF86fpos_t; /* opaque fpos_t replacement */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define _XF86NAMELEN 263 /* enough for a larger filename */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync /* (divisble by 8) */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* Note: the following is POSIX! POSIX only requires the d_name member.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * Normal Unix has often a number of other members, but don't rely on that
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsyncstruct _xf86dirent { /* types in struct dirent/direct: */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync char d_name[_XF86NAMELEN+1]; /* char [MAXNAMLEN]; might be smaller or unaligned */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync xf86dev_t st_rdev; /* This is incomplete, and makes assumptions */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* sysv IPC */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsynctypedef int xf86jmp_buf[1024] __attribute__ ((aligned (16))); /* guarantees 128-bit alignment! */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* for setvbuf */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* for open (XXX not complete) */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* for mmap */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* for fseek */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* for access */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* for chmod */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define XF86_S_ISUID 04000 /* set user ID on execution */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define XF86_S_ISGID 02000 /* set group ID on execution */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define XF86_S_IXUSR 00100 /* execute/search by owner */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define XF86_S_IXGRP 00010 /* execute/search by group */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define XF86_S_IXOTH 00001 /* execute/search by others */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* for mknod */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * errno values
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * They start at 1000 just so they don't match real errnos at all
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* sysv IPV */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* xf86shmget() */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* xf86shmat() */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define XF86SHM_RDONLY 010000 /* attach read-only else read-write */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define XF86SHM_RND 020000 /* round attach address to SHMLBA */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define XF86SHM_REMAP 040000 /* take-over region on attach */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* xf86shmclt() */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif /* defined(XFree86LOADER) || defined(NEED_XF86_TYPES) */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * the rest of this file should only be included for code that is supposed
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * to go into modules
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#if defined(XFree86LOADER) && !defined(DONT_DEFINE_WRAPPERS)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define freopen(ccp1,ccp2,FP) xf86freopen(ccp1,ccp2,FP)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define fwrite(cvp,I1,I2,FP) xf86fwrite(cvp,I1,I2,FP)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define strcasecmp(ccp1,ccp2) xf86strcasecmp(ccp1,ccp2)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define strncmp(ccp1,ccp2,I) xf86strncmp(ccp1,ccp2,I)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#define strncasecmp(ccp1,ccp2,I) xf86strncasecmp(ccp1,ccp2,I)
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* XXX Disable assert as if NDEBUG was defined */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* Some X headers defined this away too */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* non-ANSI C functions */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* some types */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * There should be no need to #undef any of these. If they are already
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * defined it is because some illegal header has been included.
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* some vars */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync * XXX Basic I/O functions BAD,BAD,BAD!
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* IPC stuff */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync/* Some ANSI macros */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync# define _FILEDEFED /* Already have FILE defined, don't redefine it */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif /* XFree86LOADER && !DONT_DEFINE_WRAPPERS */
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#if defined(XFree86LOADER) && \
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync (!defined(DONT_DEFINE_WRAPPERS) || defined(DEFINE_SETJMP_WRAPPERS))
b8e299dddd091ae24e0c08c45d91b8f937bd14d2vboxsync#endif /* XF86_LIBC_H */