Home | History | Annotate | Download | only in lib
      1 /* -*- buffer-read-only: t -*- vi: set ro: */
      2 /* DO NOT EDIT! GENERATED AUTOMATICALLY! */
      3 /* Substitute for and wrapper around <unistd.h>.
      4    Copyright (C) 2003-2009 Free Software Foundation, Inc.
      5 
      6    This program is free software; you can redistribute it and/or modify
      7    it under the terms of the GNU General Public License as published by
      8    the Free Software Foundation; either version 3, or (at your option)
      9    any later version.
     10 
     11    This program is distributed in the hope that it will be useful,
     12    but WITHOUT ANY WARRANTY; without even the implied warranty of
     13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     14    GNU General Public License for more details.
     15 
     16    You should have received a copy of the GNU General Public License
     17    along with this program; if not, write to the Free Software Foundation,
     18    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
     19 
     20 #ifndef _GL_UNISTD_H
     21 
     22 #if __GNUC__ >= 3
     23 @PRAGMA_SYSTEM_HEADER@
     24 #endif
     25 
     26 /* The include_next requires a split double-inclusion guard.  */
     27 #if @HAVE_UNISTD_H@
     28 # @INCLUDE_NEXT@ @NEXT_UNISTD_H@
     29 #endif
     30 
     31 #ifndef _GL_UNISTD_H
     32 #define _GL_UNISTD_H
     33 
     34 /* mingw doesn't define the SEEK_* or *_FILENO macros in <unistd.h>.  */
     35 #if !(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET)
     36 # include <stdio.h>
     37 #endif
     38 
     39 /* mingw fails to declare _exit in <unistd.h>.  */
     40 /* mingw, BeOS, Haiku declare environ in <stdlib.h>, not in <unistd.h>.  */
     41 #include <stdlib.h>
     42 
     43 #if @GNULIB_WRITE@ && @REPLACE_WRITE@ && @GNULIB_UNISTD_H_SIGPIPE@
     44 /* Get ssize_t.  */
     45 # include <sys/types.h>
     46 #endif
     47 
     48 #if @GNULIB_GETHOSTNAME@
     49 /* Get all possible declarations of gethostname().  */
     50 # if @UNISTD_H_HAVE_WINSOCK2_H@
     51 #  include <winsock2.h>
     52 #  if !defined _GL_SYS_SOCKET_H
     53 #   undef socket
     54 #   define socket		socket_used_without_including_sys_socket_h
     55 #   undef connect
     56 #   define connect		connect_used_without_including_sys_socket_h
     57 #   undef accept
     58 #   define accept		accept_used_without_including_sys_socket_h
     59 #   undef bind
     60 #   define bind			bind_used_without_including_sys_socket_h
     61 #   undef getpeername
     62 #   define getpeername		getpeername_used_without_including_sys_socket_h
     63 #   undef getsockname
     64 #   define getsockname		getsockname_used_without_including_sys_socket_h
     65 #   undef getsockopt
     66 #   define getsockopt		getsockopt_used_without_including_sys_socket_h
     67 #   undef listen
     68 #   define listen		listen_used_without_including_sys_socket_h
     69 #   undef recv
     70 #   define recv			recv_used_without_including_sys_socket_h
     71 #   undef send
     72 #   define send			send_used_without_including_sys_socket_h
     73 #   undef recvfrom
     74 #   define recvfrom		recvfrom_used_without_including_sys_socket_h
     75 #   undef sendto
     76 #   define sendto		sendto_used_without_including_sys_socket_h
     77 #   undef setsockopt
     78 #   define setsockopt		setsockopt_used_without_including_sys_socket_h
     79 #   undef shutdown
     80 #   define shutdown		shutdown_used_without_including_sys_socket_h
     81 #  endif
     82 #  if !defined _GL_SYS_SELECT_H
     83 #   undef select
     84 #   define select		select_used_without_including_sys_select_h
     85 #  endif
     86 # endif
     87 #endif
     88 
     89 /* The definition of GL_LINK_WARNING is copied here.  */
     90 
     91 
     92 /* OS/2 EMX lacks these macros.  */
     93 #ifndef STDIN_FILENO
     94 # define STDIN_FILENO 0
     95 #endif
     96 #ifndef STDOUT_FILENO
     97 # define STDOUT_FILENO 1
     98 #endif
     99 #ifndef STDERR_FILENO
    100 # define STDERR_FILENO 2
    101 #endif
    102 
    103 /* Declare overridden functions.  */
    104 
    105 #ifdef __cplusplus
    106 extern "C" {
    107 #endif
    108 
    109 
    110 #if @GNULIB_CHOWN@
    111 # if @REPLACE_CHOWN@
    112 #  ifndef REPLACE_CHOWN
    113 #   define REPLACE_CHOWN 1
    114 #  endif
    115 #  if REPLACE_CHOWN
    116 /* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
    117    to GID (if GID is not -1).  Follow symbolic links.
    118    Return 0 if successful, otherwise -1 and errno set.
    119    See the POSIX:2001 specification
    120    <http://www.opengroup.org/susv3xsh/chown.html>.  */
    121 #   define chown rpl_chown
    122 extern int chown (const char *file, uid_t uid, gid_t gid);
    123 #  endif
    124 # endif
    125 #elif defined GNULIB_POSIXCHECK
    126 # undef chown
    127 # define chown(f,u,g) \
    128     (GL_LINK_WARNING ("chown fails to follow symlinks on some systems and " \
    129                       "doesn't treat a uid or gid of -1 on some systems - " \
    130                       "use gnulib module chown for portability"), \
    131      chown (f, u, g))
    132 #endif
    133 
    134 
    135 #if @GNULIB_CLOSE@
    136 # if @REPLACE_CLOSE@
    137 /* Automatically included by modules that need a replacement for close.  */
    138 #  undef close
    139 #  define close rpl_close
    140 extern int close (int);
    141 # endif
    142 #elif @UNISTD_H_HAVE_WINSOCK2_H@
    143 # undef close
    144 # define close close_used_without_requesting_gnulib_module_close
    145 #elif defined GNULIB_POSIXCHECK
    146 # undef close
    147 # define close(f) \
    148     (GL_LINK_WARNING ("close does not portably work on sockets - " \
    149                       "use gnulib module close for portability"), \
    150      close (f))
    151 #endif
    152 
    153 
    154 #if @GNULIB_DUP2@
    155 # if !@HAVE_DUP2@
    156 /* Copy the file descriptor OLDFD into file descriptor NEWFD.  Do nothing if
    157    NEWFD = OLDFD, otherwise close NEWFD first if it is open.
    158    Return 0 if successful, otherwise -1 and errno set.
    159    See the POSIX:2001 specification
    160    <http://www.opengroup.org/susv3xsh/dup2.html>.  */
    161 extern int dup2 (int oldfd, int newfd);
    162 # endif
    163 #elif defined GNULIB_POSIXCHECK
    164 # undef dup2
    165 # define dup2(o,n) \
    166     (GL_LINK_WARNING ("dup2 is unportable - " \
    167                       "use gnulib module dup2 for portability"), \
    168      dup2 (o, n))
    169 #endif
    170 
    171 
    172 #if @GNULIB_ENVIRON@
    173 # if !@HAVE_DECL_ENVIRON@
    174 /* Set of environment variables and values.  An array of strings of the form
    175    "VARIABLE=VALUE", terminated with a NULL.  */
    176 #  if defined __APPLE__ && defined __MACH__
    177 #   include <crt_externs.h>
    178 #   define environ (*_NSGetEnviron ())
    179 #  else
    180 extern char **environ;
    181 #  endif
    182 # endif
    183 #elif defined GNULIB_POSIXCHECK
    184 # undef environ
    185 # define environ \
    186     (GL_LINK_WARNING ("environ is unportable - " \
    187                       "use gnulib module environ for portability"), \
    188      environ)
    189 #endif
    190 
    191 
    192 #if @GNULIB_EUIDACCESS@
    193 # if !@HAVE_EUIDACCESS@
    194 /* Like access(), except that is uses the effective user id and group id of
    195    the current process.  */
    196 extern int euidaccess (const char *filename, int mode);
    197 # endif
    198 #elif defined GNULIB_POSIXCHECK
    199 # undef euidaccess
    200 # define euidaccess(f,m) \
    201     (GL_LINK_WARNING ("euidaccess is unportable - " \
    202                       "use gnulib module euidaccess for portability"), \
    203      euidaccess (f, m))
    204 #endif
    205 
    206 
    207 #if @GNULIB_FCHDIR@
    208 # if @REPLACE_FCHDIR@
    209 
    210 /* Change the process' current working directory to the directory on which
    211    the given file descriptor is open.
    212    Return 0 if successful, otherwise -1 and errno set.
    213    See the POSIX:2001 specification
    214    <http://www.opengroup.org/susv3xsh/fchdir.html>.  */
    215 extern int fchdir (int /*fd*/);
    216 
    217 #  define dup rpl_dup
    218 extern int dup (int);
    219 #  define dup2 rpl_dup2
    220 extern int dup2 (int, int);
    221 
    222 # endif
    223 #elif defined GNULIB_POSIXCHECK
    224 # undef fchdir
    225 # define fchdir(f) \
    226     (GL_LINK_WARNING ("fchdir is unportable - " \
    227                       "use gnulib module fchdir for portability"), \
    228      fchdir (f))
    229 #endif
    230 
    231 
    232 #if @GNULIB_FSYNC@
    233 /* Synchronize changes to a file.
    234    Return 0 if successful, otherwise -1 and errno set.
    235    See POSIX:2001 specification
    236    <http://www.opengroup.org/susv3xsh/fsync.html>.  */
    237 # if !@HAVE_FSYNC@
    238 extern int fsync (int fd);
    239 # endif
    240 #elif defined GNULIB_POSIXCHECK
    241 # undef fsync
    242 # define fsync(fd) \
    243     (GL_LINK_WARNING ("fsync is unportable - " \
    244                       "use gnulib module fsync for portability"), \
    245      fsync (fd))
    246 #endif
    247 
    248 
    249 #if @GNULIB_FTRUNCATE@
    250 # if !@HAVE_FTRUNCATE@
    251 /* Change the size of the file to which FD is opened to become equal to LENGTH.
    252    Return 0 if successful, otherwise -1 and errno set.
    253    See the POSIX:2001 specification
    254    <http://www.opengroup.org/susv3xsh/ftruncate.html>.  */
    255 extern int ftruncate (int fd, off_t length);
    256 # endif
    257 #elif defined GNULIB_POSIXCHECK
    258 # undef ftruncate
    259 # define ftruncate(f,l) \
    260     (GL_LINK_WARNING ("ftruncate is unportable - " \
    261                       "use gnulib module ftruncate for portability"), \
    262      ftruncate (f, l))
    263 #endif
    264 
    265 
    266 #if @GNULIB_GETCWD@
    267 /* Include the headers that might declare getcwd so that they will not
    268    cause confusion if included after this file.  */
    269 # include <stdlib.h>
    270 # if @REPLACE_GETCWD@
    271 /* Get the name of the current working directory, and put it in SIZE bytes
    272    of BUF.
    273    Return BUF if successful, or NULL if the directory couldn't be determined
    274    or SIZE was too small.
    275    See the POSIX:2001 specification
    276    <http://www.opengroup.org/susv3xsh/getcwd.html>.
    277    Additionally, the gnulib module 'getcwd' guarantees the following GNU
    278    extension: If BUF is NULL, an array is allocated with 'malloc'; the array
    279    is SIZE bytes long, unless SIZE == 0, in which case it is as big as
    280    necessary.  */
    281 #  define getcwd rpl_getcwd
    282 extern char * getcwd (char *buf, size_t size);
    283 # endif
    284 #elif defined GNULIB_POSIXCHECK
    285 # undef getcwd
    286 # define getcwd(b,s) \
    287     (GL_LINK_WARNING ("getcwd is unportable - " \
    288                       "use gnulib module getcwd for portability"), \
    289      getcwd (b, s))
    290 #endif
    291 
    292 
    293 #if @GNULIB_GETDOMAINNAME@
    294 /* Return the NIS domain name of the machine.
    295    WARNING! The NIS domain name is unrelated to the fully qualified host name
    296             of the machine.  It is also unrelated to email addresses.
    297    WARNING! The NIS domain name is usually the empty string or "(none)" when
    298             not using NIS.
    299 
    300    Put up to LEN bytes of the NIS domain name into NAME.
    301    Null terminate it if the name is shorter than LEN.
    302    If the NIS domain name is longer than LEN, set errno = EINVAL and return -1.
    303    Return 0 if successful, otherwise set errno and return -1.  */
    304 # if !@HAVE_GETDOMAINNAME@
    305 extern int getdomainname(char *name, size_t len);
    306 # endif
    307 #elif defined GNULIB_POSIXCHECK
    308 # undef getdomainname
    309 # define getdomainname(n,l) \
    310     (GL_LINK_WARNING ("getdomainname is unportable - " \
    311                       "use gnulib module getdomainname for portability"), \
    312      getdomainname (n, l))
    313 #endif
    314 
    315 
    316 #if @GNULIB_GETDTABLESIZE@
    317 # if !@HAVE_GETDTABLESIZE@
    318 /* Return the maximum number of file descriptors in the current process.  */
    319 extern int getdtablesize (void);
    320 # endif
    321 #elif defined GNULIB_POSIXCHECK
    322 # undef getdtablesize
    323 # define getdtablesize() \
    324     (GL_LINK_WARNING ("getdtablesize is unportable - " \
    325                       "use gnulib module getdtablesize for portability"), \
    326      getdtablesize ())
    327 #endif
    328 
    329 
    330 #if @GNULIB_GETHOSTNAME@
    331 /* Return the standard host name of the machine.
    332    WARNING! The host name may or may not be fully qualified.
    333 
    334    Put up to LEN bytes of the host name into NAME.
    335    Null terminate it if the name is shorter than LEN.
    336    If the host name is longer than LEN, set errno = EINVAL and return -1.
    337    Return 0 if successful, otherwise set errno and return -1.  */
    338 # if @UNISTD_H_HAVE_WINSOCK2_H@
    339 #  undef gethostname
    340 #  define gethostname rpl_gethostname
    341 # endif
    342 # if @UNISTD_H_HAVE_WINSOCK2_H@ || !@HAVE_GETHOSTNAME@
    343 extern int gethostname(char *name, size_t len);
    344 # endif
    345 #elif @UNISTD_H_HAVE_WINSOCK2_H@
    346 # undef gethostname
    347 # define gethostname gethostname_used_without_requesting_gnulib_module_gethostname
    348 #elif defined GNULIB_POSIXCHECK
    349 # undef gethostname
    350 # define gethostname(n,l) \
    351     (GL_LINK_WARNING ("gethostname is unportable - " \
    352                       "use gnulib module gethostname for portability"), \
    353      gethostname (n, l))
    354 #endif
    355 
    356 
    357 #if @GNULIB_GETLOGIN_R@
    358 /* Copies the user's login name to NAME.
    359    The array pointed to by NAME has room for SIZE bytes.
    360 
    361    Returns 0 if successful.  Upon error, an error number is returned, or -1 in
    362    the case that the login name cannot be found but no specific error is
    363    provided (this case is hopefully rare but is left open by the POSIX spec).
    364 
    365    See <http://www.opengroup.org/susv3xsh/getlogin.html>.
    366  */
    367 # if !@HAVE_DECL_GETLOGIN_R@
    368 #  include <stddef.h>
    369 extern int getlogin_r (char *name, size_t size);
    370 # endif
    371 #elif defined GNULIB_POSIXCHECK
    372 # undef getlogin_r
    373 # define getlogin_r(n,s) \
    374     (GL_LINK_WARNING ("getlogin_r is unportable - " \
    375                       "use gnulib module getlogin_r for portability"), \
    376      getlogin_r (n, s))
    377 #endif
    378 
    379 
    380 #if @GNULIB_GETPAGESIZE@
    381 # if @REPLACE_GETPAGESIZE@
    382 #  define getpagesize rpl_getpagesize
    383 extern int getpagesize (void);
    384 # elif !@HAVE_GETPAGESIZE@
    385 /* This is for POSIX systems.  */
    386 #  if !defined getpagesize && defined _SC_PAGESIZE
    387 #   if ! (defined __VMS && __VMS_VER < 70000000)
    388 #    define getpagesize() sysconf (_SC_PAGESIZE)
    389 #   endif
    390 #  endif
    391 /* This is for older VMS.  */
    392 #  if !defined getpagesize && defined __VMS
    393 #   ifdef __ALPHA
    394 #    define getpagesize() 8192
    395 #   else
    396 #    define getpagesize() 512
    397 #   endif
    398 #  endif
    399 /* This is for BeOS.  */
    400 #  if !defined getpagesize && @HAVE_OS_H@
    401 #   include <OS.h>
    402 #   if defined B_PAGE_SIZE
    403 #    define getpagesize() B_PAGE_SIZE
    404 #   endif
    405 #  endif
    406 /* This is for AmigaOS4.0.  */
    407 #  if !defined getpagesize && defined __amigaos4__
    408 #   define getpagesize() 2048
    409 #  endif
    410 /* This is for older Unix systems.  */
    411 #  if !defined getpagesize && @HAVE_SYS_PARAM_H@
    412 #   include <sys/param.h>
    413 #   ifdef EXEC_PAGESIZE
    414 #    define getpagesize() EXEC_PAGESIZE
    415 #   else
    416 #    ifdef NBPG
    417 #     ifndef CLSIZE
    418 #      define CLSIZE 1
    419 #     endif
    420 #     define getpagesize() (NBPG * CLSIZE)
    421 #    else
    422 #     ifdef NBPC
    423 #      define getpagesize() NBPC
    424 #     endif
    425 #    endif
    426 #   endif
    427 #  endif
    428 # endif
    429 #elif defined GNULIB_POSIXCHECK
    430 # undef getpagesize
    431 # define getpagesize() \
    432     (GL_LINK_WARNING ("getpagesize is unportable - " \
    433                       "use gnulib module getpagesize for portability"), \
    434      getpagesize ())
    435 #endif
    436 
    437 
    438 #if @GNULIB_GETUSERSHELL@
    439 # if !@HAVE_GETUSERSHELL@
    440 /* Return the next valid login shell on the system, or NULL when the end of
    441    the list has been reached.  */
    442 extern char *getusershell (void);
    443 /* Rewind to pointer that is advanced at each getusershell() call.  */
    444 extern void setusershell (void);
    445 /* Free the pointer that is advanced at each getusershell() call and
    446    associated resources.  */
    447 extern void endusershell (void);
    448 # endif
    449 #elif defined GNULIB_POSIXCHECK
    450 # undef getusershell
    451 # define getusershell() \
    452     (GL_LINK_WARNING ("getusershell is unportable - " \
    453                       "use gnulib module getusershell for portability"), \
    454      getusershell ())
    455 # undef setusershell
    456 # define setusershell() \
    457     (GL_LINK_WARNING ("setusershell is unportable - " \
    458                       "use gnulib module getusershell for portability"), \
    459      setusershell ())
    460 # undef endusershell
    461 # define endusershell() \
    462     (GL_LINK_WARNING ("endusershell is unportable - " \
    463                       "use gnulib module getusershell for portability"), \
    464      endusershell ())
    465 #endif
    466 
    467 
    468 #if @GNULIB_LCHOWN@
    469 # if @REPLACE_LCHOWN@
    470 /* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
    471    to GID (if GID is not -1).  Do not follow symbolic links.
    472    Return 0 if successful, otherwise -1 and errno set.
    473    See the POSIX:2001 specification
    474    <http://www.opengroup.org/susv3xsh/lchown.html>.  */
    475 #  define lchown rpl_lchown
    476 extern int lchown (char const *file, uid_t owner, gid_t group);
    477 # endif
    478 #elif defined GNULIB_POSIXCHECK
    479 # undef lchown
    480 # define lchown(f,u,g) \
    481     (GL_LINK_WARNING ("lchown is unportable to pre-POSIX.1-2001 " \
    482                       "systems - use gnulib module lchown for portability"), \
    483      lchown (f, u, g))
    484 #endif
    485 
    486 
    487 #if @GNULIB_LINK@
    488 /* Create a new hard link for an existing file.
    489    Return 0 if successful, otherwise -1 and errno set.
    490    See POSIX:2001 specification
    491    <http://www.opengroup.org/susv3xsh/link.html>.  */
    492 # if !@HAVE_LINK@
    493 extern int link (const char *path1, const char *path2);
    494 # endif
    495 #elif defined GNULIB_POSIXCHECK
    496 # undef link
    497 # define link(path1,path2) \
    498     (GL_LINK_WARNING ("link is unportable - " \
    499                       "use gnulib module link for portability"), \
    500      link (path1, path2))
    501 #endif
    502 
    503 
    504 #if @GNULIB_LSEEK@
    505 # if @REPLACE_LSEEK@
    506 /* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END.
    507    Return the new offset if successful, otherwise -1 and errno set.
    508    See the POSIX:2001 specification
    509    <http://www.opengroup.org/susv3xsh/lseek.html>.  */
    510 #  define lseek rpl_lseek
    511    extern off_t lseek (int fd, off_t offset, int whence);
    512 # endif
    513 #elif defined GNULIB_POSIXCHECK
    514 # undef lseek
    515 # define lseek(f,o,w) \
    516     (GL_LINK_WARNING ("lseek does not fail with ESPIPE on pipes on some " \
    517                       "systems - use gnulib module lseek for portability"), \
    518      lseek (f, o, w))
    519 #endif
    520 
    521 
    522 #if @GNULIB_READLINK@
    523 /* Read the contents of the symbolic link FILE and place the first BUFSIZE
    524    bytes of it into BUF.  Return the number of bytes placed into BUF if
    525    successful, otherwise -1 and errno set.
    526    See the POSIX:2001 specification
    527    <http://www.opengroup.org/susv3xsh/readlink.html>.  */
    528 # if !@HAVE_READLINK@
    529 #  include <stddef.h>
    530 extern int readlink (const char *file, char *buf, size_t bufsize);
    531 # endif
    532 #elif defined GNULIB_POSIXCHECK
    533 # undef readlink
    534 # define readlink(f,b,s) \
    535     (GL_LINK_WARNING ("readlink is unportable - " \
    536                       "use gnulib module readlink for portability"), \
    537      readlink (f, b, s))
    538 #endif
    539 
    540 
    541 #if @GNULIB_SLEEP@
    542 /* Pause the execution of the current thread for N seconds.
    543    Returns the number of seconds left to sleep.
    544    See the POSIX:2001 specification
    545    <http://www.opengroup.org/susv3xsh/sleep.html>.  */
    546 # if !@HAVE_SLEEP@
    547 extern unsigned int sleep (unsigned int n);
    548 # endif
    549 #elif defined GNULIB_POSIXCHECK
    550 # undef sleep
    551 # define sleep(n) \
    552     (GL_LINK_WARNING ("sleep is unportable - " \
    553                       "use gnulib module sleep for portability"), \
    554      sleep (n))
    555 #endif
    556 
    557 
    558 #if @GNULIB_WRITE@ && @REPLACE_WRITE@ && @GNULIB_UNISTD_H_SIGPIPE@
    559 /* Write up to COUNT bytes starting at BUF to file descriptor FD.
    560    See the POSIX:2001 specification
    561    <http://www.opengroup.org/susv3xsh/write.html>.  */
    562 # undef write
    563 # define write rpl_write
    564 extern ssize_t write (int fd, const void *buf, size_t count);
    565 #endif
    566 
    567 
    568 #ifdef FCHDIR_REPLACEMENT
    569 /* gnulib internal function.  */
    570 extern void _gl_unregister_fd (int fd);
    571 #endif
    572 
    573 
    574 #ifdef __cplusplus
    575 }
    576 #endif
    577 
    578 
    579 #endif /* _GL_UNISTD_H */
    580 #endif /* _GL_UNISTD_H */
    581