123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578 |
- /* Substitute for and wrapper around <unistd.h>.
- Copyright (C) 2003-2009 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3, or (at your option)
- any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
- #ifndef _GL_UNISTD_H
- #if __GNUC__ >= 3
- @PRAGMA_SYSTEM_HEADER@
- #endif
- /* The include_next requires a split double-inclusion guard. */
- #if @HAVE_UNISTD_H@
- # @INCLUDE_NEXT@ @NEXT_UNISTD_H@
- #endif
- #ifndef _GL_UNISTD_H
- #define _GL_UNISTD_H
- /* mingw doesn't define the SEEK_* or *_FILENO macros in <unistd.h>. */
- #if !(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET)
- # include <stdio.h>
- #endif
- /* mingw fails to declare _exit in <unistd.h>. */
- /* mingw, BeOS, Haiku declare environ in <stdlib.h>, not in <unistd.h>. */
- #include <stdlib.h>
- #if @GNULIB_WRITE@ && @REPLACE_WRITE@ && @GNULIB_UNISTD_H_SIGPIPE@
- /* Get ssize_t. */
- # include <sys/types.h>
- #endif
- #if @GNULIB_GETHOSTNAME@
- /* Get all possible declarations of gethostname(). */
- # if @UNISTD_H_HAVE_WINSOCK2_H@
- # include <winsock2.h>
- # if !defined _GL_SYS_SOCKET_H
- # undef socket
- # define socket socket_used_without_including_sys_socket_h
- # undef connect
- # define connect connect_used_without_including_sys_socket_h
- # undef accept
- # define accept accept_used_without_including_sys_socket_h
- # undef bind
- # define bind bind_used_without_including_sys_socket_h
- # undef getpeername
- # define getpeername getpeername_used_without_including_sys_socket_h
- # undef getsockname
- # define getsockname getsockname_used_without_including_sys_socket_h
- # undef getsockopt
- # define getsockopt getsockopt_used_without_including_sys_socket_h
- # undef listen
- # define listen listen_used_without_including_sys_socket_h
- # undef recv
- # define recv recv_used_without_including_sys_socket_h
- # undef send
- # define send send_used_without_including_sys_socket_h
- # undef recvfrom
- # define recvfrom recvfrom_used_without_including_sys_socket_h
- # undef sendto
- # define sendto sendto_used_without_including_sys_socket_h
- # undef setsockopt
- # define setsockopt setsockopt_used_without_including_sys_socket_h
- # undef shutdown
- # define shutdown shutdown_used_without_including_sys_socket_h
- # endif
- # if !defined _GL_SYS_SELECT_H
- # undef select
- # define select select_used_without_including_sys_select_h
- # endif
- # endif
- #endif
- /* The definition of GL_LINK_WARNING is copied here. */
- /* OS/2 EMX lacks these macros. */
- #ifndef STDIN_FILENO
- # define STDIN_FILENO 0
- #endif
- #ifndef STDOUT_FILENO
- # define STDOUT_FILENO 1
- #endif
- #ifndef STDERR_FILENO
- # define STDERR_FILENO 2
- #endif
- /* Declare overridden functions. */
- #ifdef __cplusplus
- extern "C" {
- #endif
- #if @GNULIB_CHOWN@
- # if @REPLACE_CHOWN@
- # ifndef REPLACE_CHOWN
- # define REPLACE_CHOWN 1
- # endif
- # if REPLACE_CHOWN
- /* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
- to GID (if GID is not -1). Follow symbolic links.
- Return 0 if successful, otherwise -1 and errno set.
- See the POSIX:2001 specification
- <http://www.opengroup.org/susv3xsh/chown.html>. */
- # define chown rpl_chown
- extern int chown (const char *file, uid_t uid, gid_t gid);
- # endif
- # endif
- #elif defined GNULIB_POSIXCHECK
- # undef chown
- # define chown(f,u,g) \
- (GL_LINK_WARNING ("chown fails to follow symlinks on some systems and " \
- "doesn't treat a uid or gid of -1 on some systems - " \
- "use gnulib module chown for portability"), \
- chown (f, u, g))
- #endif
- #if @GNULIB_CLOSE@
- # if @REPLACE_CLOSE@
- /* Automatically included by modules that need a replacement for close. */
- # undef close
- # define close rpl_close
- extern int close (int);
- # endif
- #elif @UNISTD_H_HAVE_WINSOCK2_H@
- # undef close
- # define close close_used_without_requesting_gnulib_module_close
- #elif defined GNULIB_POSIXCHECK
- # undef close
- # define close(f) \
- (GL_LINK_WARNING ("close does not portably work on sockets - " \
- "use gnulib module close for portability"), \
- close (f))
- #endif
- #if @GNULIB_DUP2@
- # if !@HAVE_DUP2@
- /* Copy the file descriptor OLDFD into file descriptor NEWFD. Do nothing if
- NEWFD = OLDFD, otherwise close NEWFD first if it is open.
- Return 0 if successful, otherwise -1 and errno set.
- See the POSIX:2001 specification
- <http://www.opengroup.org/susv3xsh/dup2.html>. */
- extern int dup2 (int oldfd, int newfd);
- # endif
- #elif defined GNULIB_POSIXCHECK
- # undef dup2
- # define dup2(o,n) \
- (GL_LINK_WARNING ("dup2 is unportable - " \
- "use gnulib module dup2 for portability"), \
- dup2 (o, n))
- #endif
- #if @GNULIB_ENVIRON@
- # if !@HAVE_DECL_ENVIRON@
- /* Set of environment variables and values. An array of strings of the form
- "VARIABLE=VALUE", terminated with a NULL. */
- # if defined __APPLE__ && defined __MACH__
- # include <crt_externs.h>
- # define environ (*_NSGetEnviron ())
- # else
- extern char **environ;
- # endif
- # endif
- #elif defined GNULIB_POSIXCHECK
- # undef environ
- # define environ \
- (GL_LINK_WARNING ("environ is unportable - " \
- "use gnulib module environ for portability"), \
- environ)
- #endif
- #if @GNULIB_EUIDACCESS@
- # if !@HAVE_EUIDACCESS@
- /* Like access(), except that is uses the effective user id and group id of
- the current process. */
- extern int euidaccess (const char *filename, int mode);
- # endif
- #elif defined GNULIB_POSIXCHECK
- # undef euidaccess
- # define euidaccess(f,m) \
- (GL_LINK_WARNING ("euidaccess is unportable - " \
- "use gnulib module euidaccess for portability"), \
- euidaccess (f, m))
- #endif
- #if @GNULIB_FCHDIR@
- # if @REPLACE_FCHDIR@
- /* Change the process' current working directory to the directory on which
- the given file descriptor is open.
- Return 0 if successful, otherwise -1 and errno set.
- See the POSIX:2001 specification
- <http://www.opengroup.org/susv3xsh/fchdir.html>. */
- extern int fchdir (int /*fd*/);
- # define dup rpl_dup
- extern int dup (int);
- # define dup2 rpl_dup2
- extern int dup2 (int, int);
- # endif
- #elif defined GNULIB_POSIXCHECK
- # undef fchdir
- # define fchdir(f) \
- (GL_LINK_WARNING ("fchdir is unportable - " \
- "use gnulib module fchdir for portability"), \
- fchdir (f))
- #endif
- #if @GNULIB_FSYNC@
- /* Synchronize changes to a file.
- Return 0 if successful, otherwise -1 and errno set.
- See POSIX:2001 specification
- <http://www.opengroup.org/susv3xsh/fsync.html>. */
- # if !@HAVE_FSYNC@
- extern int fsync (int fd);
- # endif
- #elif defined GNULIB_POSIXCHECK
- # undef fsync
- # define fsync(fd) \
- (GL_LINK_WARNING ("fsync is unportable - " \
- "use gnulib module fsync for portability"), \
- fsync (fd))
- #endif
- #if @GNULIB_FTRUNCATE@
- # if !@HAVE_FTRUNCATE@
- /* Change the size of the file to which FD is opened to become equal to LENGTH.
- Return 0 if successful, otherwise -1 and errno set.
- See the POSIX:2001 specification
- <http://www.opengroup.org/susv3xsh/ftruncate.html>. */
- extern int ftruncate (int fd, off_t length);
- # endif
- #elif defined GNULIB_POSIXCHECK
- # undef ftruncate
- # define ftruncate(f,l) \
- (GL_LINK_WARNING ("ftruncate is unportable - " \
- "use gnulib module ftruncate for portability"), \
- ftruncate (f, l))
- #endif
- #if @GNULIB_GETCWD@
- /* Include the headers that might declare getcwd so that they will not
- cause confusion if included after this file. */
- # include <stdlib.h>
- # if @REPLACE_GETCWD@
- /* Get the name of the current working directory, and put it in SIZE bytes
- of BUF.
- Return BUF if successful, or NULL if the directory couldn't be determined
- or SIZE was too small.
- See the POSIX:2001 specification
- <http://www.opengroup.org/susv3xsh/getcwd.html>.
- Additionally, the gnulib module 'getcwd' guarantees the following GNU
- extension: If BUF is NULL, an array is allocated with 'malloc'; the array
- is SIZE bytes long, unless SIZE == 0, in which case it is as big as
- necessary. */
- # define getcwd rpl_getcwd
- extern char * getcwd (char *buf, size_t size);
- # endif
- #elif defined GNULIB_POSIXCHECK
- # undef getcwd
- # define getcwd(b,s) \
- (GL_LINK_WARNING ("getcwd is unportable - " \
- "use gnulib module getcwd for portability"), \
- getcwd (b, s))
- #endif
- #if @GNULIB_GETDOMAINNAME@
- /* Return the NIS domain name of the machine.
- WARNING! The NIS domain name is unrelated to the fully qualified host name
- of the machine. It is also unrelated to email addresses.
- WARNING! The NIS domain name is usually the empty string or "(none)" when
- not using NIS.
- Put up to LEN bytes of the NIS domain name into NAME.
- Null terminate it if the name is shorter than LEN.
- If the NIS domain name is longer than LEN, set errno = EINVAL and return -1.
- Return 0 if successful, otherwise set errno and return -1. */
- # if !@HAVE_GETDOMAINNAME@
- extern int getdomainname(char *name, size_t len);
- # endif
- #elif defined GNULIB_POSIXCHECK
- # undef getdomainname
- # define getdomainname(n,l) \
- (GL_LINK_WARNING ("getdomainname is unportable - " \
- "use gnulib module getdomainname for portability"), \
- getdomainname (n, l))
- #endif
- #if @GNULIB_GETDTABLESIZE@
- # if !@HAVE_GETDTABLESIZE@
- /* Return the maximum number of file descriptors in the current process. */
- extern int getdtablesize (void);
- # endif
- #elif defined GNULIB_POSIXCHECK
- # undef getdtablesize
- # define getdtablesize() \
- (GL_LINK_WARNING ("getdtablesize is unportable - " \
- "use gnulib module getdtablesize for portability"), \
- getdtablesize ())
- #endif
- #if @GNULIB_GETHOSTNAME@
- /* Return the standard host name of the machine.
- WARNING! The host name may or may not be fully qualified.
- Put up to LEN bytes of the host name into NAME.
- Null terminate it if the name is shorter than LEN.
- If the host name is longer than LEN, set errno = EINVAL and return -1.
- Return 0 if successful, otherwise set errno and return -1. */
- # if @UNISTD_H_HAVE_WINSOCK2_H@
- # undef gethostname
- # define gethostname rpl_gethostname
- # endif
- # if @UNISTD_H_HAVE_WINSOCK2_H@ || !@HAVE_GETHOSTNAME@
- extern int gethostname(char *name, size_t len);
- # endif
- #elif @UNISTD_H_HAVE_WINSOCK2_H@
- # undef gethostname
- # define gethostname gethostname_used_without_requesting_gnulib_module_gethostname
- #elif defined GNULIB_POSIXCHECK
- # undef gethostname
- # define gethostname(n,l) \
- (GL_LINK_WARNING ("gethostname is unportable - " \
- "use gnulib module gethostname for portability"), \
- gethostname (n, l))
- #endif
- #if @GNULIB_GETLOGIN_R@
- /* Copies the user's login name to NAME.
- The array pointed to by NAME has room for SIZE bytes.
- Returns 0 if successful. Upon error, an error number is returned, or -1 in
- the case that the login name cannot be found but no specific error is
- provided (this case is hopefully rare but is left open by the POSIX spec).
- See <http://www.opengroup.org/susv3xsh/getlogin.html>.
- */
- # if !@HAVE_DECL_GETLOGIN_R@
- # include <stddef.h>
- extern int getlogin_r (char *name, size_t size);
- # endif
- #elif defined GNULIB_POSIXCHECK
- # undef getlogin_r
- # define getlogin_r(n,s) \
- (GL_LINK_WARNING ("getlogin_r is unportable - " \
- "use gnulib module getlogin_r for portability"), \
- getlogin_r (n, s))
- #endif
- #if @GNULIB_GETPAGESIZE@
- # if @REPLACE_GETPAGESIZE@
- # define getpagesize rpl_getpagesize
- extern int getpagesize (void);
- # elif !@HAVE_GETPAGESIZE@
- /* This is for POSIX systems. */
- # if !defined getpagesize && defined _SC_PAGESIZE
- # if ! (defined __VMS && __VMS_VER < 70000000)
- # define getpagesize() sysconf (_SC_PAGESIZE)
- # endif
- # endif
- /* This is for older VMS. */
- # if !defined getpagesize && defined __VMS
- # ifdef __ALPHA
- # define getpagesize() 8192
- # else
- # define getpagesize() 512
- # endif
- # endif
- /* This is for BeOS. */
- # if !defined getpagesize && @HAVE_OS_H@
- # include <OS.h>
- # if defined B_PAGE_SIZE
- # define getpagesize() B_PAGE_SIZE
- # endif
- # endif
- /* This is for AmigaOS4.0. */
- # if !defined getpagesize && defined __amigaos4__
- # define getpagesize() 2048
- # endif
- /* This is for older Unix systems. */
- # if !defined getpagesize && @HAVE_SYS_PARAM_H@
- # include <sys/param.h>
- # ifdef EXEC_PAGESIZE
- # define getpagesize() EXEC_PAGESIZE
- # else
- # ifdef NBPG
- # ifndef CLSIZE
- # define CLSIZE 1
- # endif
- # define getpagesize() (NBPG * CLSIZE)
- # else
- # ifdef NBPC
- # define getpagesize() NBPC
- # endif
- # endif
- # endif
- # endif
- # endif
- #elif defined GNULIB_POSIXCHECK
- # undef getpagesize
- # define getpagesize() \
- (GL_LINK_WARNING ("getpagesize is unportable - " \
- "use gnulib module getpagesize for portability"), \
- getpagesize ())
- #endif
- #if @GNULIB_GETUSERSHELL@
- # if !@HAVE_GETUSERSHELL@
- /* Return the next valid login shell on the system, or NULL when the end of
- the list has been reached. */
- extern char *getusershell (void);
- /* Rewind to pointer that is advanced at each getusershell() call. */
- extern void setusershell (void);
- /* Free the pointer that is advanced at each getusershell() call and
- associated resources. */
- extern void endusershell (void);
- # endif
- #elif defined GNULIB_POSIXCHECK
- # undef getusershell
- # define getusershell() \
- (GL_LINK_WARNING ("getusershell is unportable - " \
- "use gnulib module getusershell for portability"), \
- getusershell ())
- # undef setusershell
- # define setusershell() \
- (GL_LINK_WARNING ("setusershell is unportable - " \
- "use gnulib module getusershell for portability"), \
- setusershell ())
- # undef endusershell
- # define endusershell() \
- (GL_LINK_WARNING ("endusershell is unportable - " \
- "use gnulib module getusershell for portability"), \
- endusershell ())
- #endif
- #if @GNULIB_LCHOWN@
- # if @REPLACE_LCHOWN@
- /* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
- to GID (if GID is not -1). Do not follow symbolic links.
- Return 0 if successful, otherwise -1 and errno set.
- See the POSIX:2001 specification
- <http://www.opengroup.org/susv3xsh/lchown.html>. */
- # define lchown rpl_lchown
- extern int lchown (char const *file, uid_t owner, gid_t group);
- # endif
- #elif defined GNULIB_POSIXCHECK
- # undef lchown
- # define lchown(f,u,g) \
- (GL_LINK_WARNING ("lchown is unportable to pre-POSIX.1-2001 " \
- "systems - use gnulib module lchown for portability"), \
- lchown (f, u, g))
- #endif
- #if @GNULIB_LINK@
- /* Create a new hard link for an existing file.
- Return 0 if successful, otherwise -1 and errno set.
- See POSIX:2001 specification
- <http://www.opengroup.org/susv3xsh/link.html>. */
- # if !@HAVE_LINK@
- extern int link (const char *path1, const char *path2);
- # endif
- #elif defined GNULIB_POSIXCHECK
- # undef link
- # define link(path1,path2) \
- (GL_LINK_WARNING ("link is unportable - " \
- "use gnulib module link for portability"), \
- link (path1, path2))
- #endif
- #if @GNULIB_LSEEK@
- # if @REPLACE_LSEEK@
- /* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END.
- Return the new offset if successful, otherwise -1 and errno set.
- See the POSIX:2001 specification
- <http://www.opengroup.org/susv3xsh/lseek.html>. */
- # define lseek rpl_lseek
- extern off_t lseek (int fd, off_t offset, int whence);
- # endif
- #elif defined GNULIB_POSIXCHECK
- # undef lseek
- # define lseek(f,o,w) \
- (GL_LINK_WARNING ("lseek does not fail with ESPIPE on pipes on some " \
- "systems - use gnulib module lseek for portability"), \
- lseek (f, o, w))
- #endif
- #if @GNULIB_READLINK@
- /* Read the contents of the symbolic link FILE and place the first BUFSIZE
- bytes of it into BUF. Return the number of bytes placed into BUF if
- successful, otherwise -1 and errno set.
- See the POSIX:2001 specification
- <http://www.opengroup.org/susv3xsh/readlink.html>. */
- # if !@HAVE_READLINK@
- # include <stddef.h>
- extern int readlink (const char *file, char *buf, size_t bufsize);
- # endif
- #elif defined GNULIB_POSIXCHECK
- # undef readlink
- # define readlink(f,b,s) \
- (GL_LINK_WARNING ("readlink is unportable - " \
- "use gnulib module readlink for portability"), \
- readlink (f, b, s))
- #endif
- #if @GNULIB_SLEEP@
- /* Pause the execution of the current thread for N seconds.
- Returns the number of seconds left to sleep.
- See the POSIX:2001 specification
- <http://www.opengroup.org/susv3xsh/sleep.html>. */
- # if !@HAVE_SLEEP@
- extern unsigned int sleep (unsigned int n);
- # endif
- #elif defined GNULIB_POSIXCHECK
- # undef sleep
- # define sleep(n) \
- (GL_LINK_WARNING ("sleep is unportable - " \
- "use gnulib module sleep for portability"), \
- sleep (n))
- #endif
- #if @GNULIB_WRITE@ && @REPLACE_WRITE@ && @GNULIB_UNISTD_H_SIGPIPE@
- /* Write up to COUNT bytes starting at BUF to file descriptor FD.
- See the POSIX:2001 specification
- <http://www.opengroup.org/susv3xsh/write.html>. */
- # undef write
- # define write rpl_write
- extern ssize_t write (int fd, const void *buf, size_t count);
- #endif
- #ifdef FCHDIR_REPLACEMENT
- /* gnulib internal function. */
- extern void _gl_unregister_fd (int fd);
- #endif
- #ifdef __cplusplus
- }
- #endif
- #endif /* _GL_UNISTD_H */
- #endif /* _GL_UNISTD_H */
|