X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Funistd.in.h;h=a353b0c08de1bec023ba9f941bd4308816d1aa8c;hb=e8269e90e35140ebb75f39669d39bd021e364105;hp=13d1bbac965c42266cf96cc40766c9a0d736f44a;hpb=f84e1a91fb3c43ba06567cbaeaf641135170d35a;p=gnulib.git diff --git a/lib/unistd.in.h b/lib/unistd.in.h index 13d1bbac9..a353b0c08 100644 --- a/lib/unistd.in.h +++ b/lib/unistd.in.h @@ -1,5 +1,5 @@ /* Substitute for and wrapper around . - Copyright (C) 2003-2009 Free Software Foundation, Inc. + Copyright (C) 2003-2010 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 @@ -33,23 +33,43 @@ #include /* mingw doesn't define the SEEK_* or *_FILENO macros in . */ -#if !(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) +/* Cygwin 1.7.1 declares symlinkat in , not in . */ +/* But avoid namespace pollution on glibc systems. */ +#if (!(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) \ + || (@GNULIB_SYMLINKAT@ || defined GNULIB_POSIXCHECK)) \ + && ! defined __GLIBC__ # include #endif +/* Cygwin 1.7.1 declares unlinkat in , not in . */ +/* But avoid namespace pollution on glibc systems. */ +#if (@GNULIB_UNLINKAT@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ +# include +#endif + /* mingw fails to declare _exit in . */ /* mingw, BeOS, Haiku declare environ in , not in . */ -#include +/* Solaris declares getcwd not only in but also in . */ +/* But avoid namespace pollution on glibc systems. */ +#ifndef __GLIBC__ +# include +#endif -#if ((@GNULIB_WRITE@ && @REPLACE_WRITE@ && @GNULIB_UNISTD_H_SIGPIPE@) \ - || (@GNULIB_READLINK@ && (!@HAVE_READLINK@ || @REPLACE_READLINK@)) \ - || (@GNULIB_READLINKAT@ && !@HAVE_READLINKAT@)) +/* mingw declares getcwd in , not in . */ +#if ((@GNULIB_GETCWD@ || defined GNULIB_POSIXCHECK) \ + && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) +# include +#endif + +#if (@GNULIB_WRITE@ || @GNULIB_READLINK@ || @GNULIB_READLINKAT@ \ + || @GNULIB_PREAD@ || defined GNULIB_POSIXCHECK) /* Get ssize_t. */ # include #endif -/* Get getopt(), optarg, optind, opterr, optopt. */ -#if @GNULIB_UNISTD_H_GETOPT@ && !defined _GL_SYSTEM_GETOPT +/* Get getopt(), optarg, optind, opterr, optopt. + But avoid namespace pollution on glibc systems. */ +#if @GNULIB_UNISTD_H_GETOPT@ && !defined __GLIBC__ && !defined _GL_SYSTEM_GETOPT # include #endif @@ -59,43 +79,45 @@ # include # if !defined _GL_SYS_SOCKET_H # undef socket -# define socket socket_used_without_including_sys_socket_h +# define socket socket_used_without_including_sys_socket_h # undef connect -# define connect connect_used_without_including_sys_socket_h +# define connect connect_used_without_including_sys_socket_h # undef accept -# define accept accept_used_without_including_sys_socket_h +# define accept accept_used_without_including_sys_socket_h # undef bind -# define bind bind_used_without_including_sys_socket_h +# define bind bind_used_without_including_sys_socket_h # undef getpeername -# define getpeername getpeername_used_without_including_sys_socket_h +# define getpeername getpeername_used_without_including_sys_socket_h # undef getsockname -# define getsockname getsockname_used_without_including_sys_socket_h +# define getsockname getsockname_used_without_including_sys_socket_h # undef getsockopt -# define getsockopt getsockopt_used_without_including_sys_socket_h +# define getsockopt getsockopt_used_without_including_sys_socket_h # undef listen -# define listen listen_used_without_including_sys_socket_h +# define listen listen_used_without_including_sys_socket_h # undef recv -# define recv recv_used_without_including_sys_socket_h +# define recv recv_used_without_including_sys_socket_h # undef send -# define send send_used_without_including_sys_socket_h +# define send send_used_without_including_sys_socket_h # undef recvfrom -# define recvfrom recvfrom_used_without_including_sys_socket_h +# define recvfrom recvfrom_used_without_including_sys_socket_h # undef sendto -# define sendto sendto_used_without_including_sys_socket_h +# define sendto sendto_used_without_including_sys_socket_h # undef setsockopt -# define setsockopt setsockopt_used_without_including_sys_socket_h +# define setsockopt setsockopt_used_without_including_sys_socket_h # undef shutdown -# define shutdown shutdown_used_without_including_sys_socket_h +# 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 +# define select select_used_without_including_sys_select_h # endif # endif #endif /* The definition of GL_LINK_WARNING is copied here. */ +/* The definition of _GL_ARG_NONNULL is copied here. */ + /* OS/2 EMX lacks these macros. */ #ifndef STDIN_FILENO @@ -135,7 +157,8 @@ extern "C" { Return 0 if successful, otherwise -1 and errno set. See the POSIX:2001 specification . */ -extern int chown (const char *file, uid_t uid, gid_t gid); +extern int chown (const char *file, uid_t uid, gid_t gid) + _GL_ARG_NONNULL ((1)); # endif #elif defined GNULIB_POSIXCHECK # undef chown @@ -239,7 +262,7 @@ extern char **environ; # if !@HAVE_EUIDACCESS@ /* Like access(), except that it uses the effective user id and group id of the current process. */ -extern int euidaccess (const char *filename, int mode); +extern int euidaccess (const char *filename, int mode) _GL_ARG_NONNULL ((1)); # endif #elif defined GNULIB_POSIXCHECK # undef euidaccess @@ -252,11 +275,12 @@ extern int euidaccess (const char *filename, int mode); #if @GNULIB_FACCESSAT@ # if !@HAVE_FACCESSAT@ -int faccessat (int fd, char const *file, int mode, int flag); +extern int faccessat (int fd, char const *file, int mode, int flag) + _GL_ARG_NONNULL ((2)); # endif #elif defined GNULIB_POSIXCHECK # undef faccessat -# define faccessat(d,n,m,f) \ +# define faccessat(d,n,m,f) \ (GL_LINK_WARNING ("faccessat is not portable - " \ "use gnulib module faccessat for portability"), \ faccessat (d, n, m, f)) @@ -273,7 +297,8 @@ int faccessat (int fd, char const *file, int mode, int flag); extern int fchdir (int /*fd*/); /* Gnulib internal hooks needed to maintain the fchdir metadata. */ -extern int _gl_register_fd (int fd, const char *filename); +extern int _gl_register_fd (int fd, const char *filename) + _GL_ARG_NONNULL ((2)); extern void _gl_unregister_fd (int fd); extern int _gl_register_dup (int oldfd, int newfd); extern const char *_gl_directory_name (int fd); @@ -294,11 +319,12 @@ extern const char *_gl_directory_name (int fd); # define fchownat rpl_fchownat # endif # if !@HAVE_FCHOWNAT@ || @REPLACE_FCHOWNAT@ -extern int fchownat (int fd, char const *file, uid_t owner, gid_t group, int flag); +extern int fchownat (int fd, char const *file, uid_t owner, gid_t group, int flag) + _GL_ARG_NONNULL ((2)); # endif #elif defined GNULIB_POSIXCHECK # undef fchownat -# define fchownat(d,n,o,g,f) \ +# define fchownat(d,n,o,g,f) \ (GL_LINK_WARNING ("fchownat is not portable - " \ "use gnulib module openat for portability"), \ fchownat (d, n, o, g, f)) @@ -340,9 +366,6 @@ extern int ftruncate (int fd, off_t length); #if @GNULIB_GETCWD@ -/* Include the headers that might declare getcwd so that they will not - cause confusion if included after this file. */ -# include # if @REPLACE_GETCWD@ /* Get the name of the current working directory, and put it in SIZE bytes of BUF. @@ -378,7 +401,7 @@ extern char * getcwd (char *buf, size_t size); 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); +extern int getdomainname(char *name, size_t len) _GL_ARG_NONNULL ((1)); # endif #elif defined GNULIB_POSIXCHECK # undef getdomainname @@ -439,7 +462,7 @@ int getgroups (int n, gid_t *groups); # define gethostname rpl_gethostname # endif # if @UNISTD_H_HAVE_WINSOCK2_H@ || !@HAVE_GETHOSTNAME@ -extern int gethostname(char *name, size_t len); +extern int gethostname(char *name, size_t len) _GL_ARG_NONNULL ((1)); # endif #elif @UNISTD_H_HAVE_WINSOCK2_H@ # undef gethostname @@ -453,6 +476,29 @@ extern int gethostname(char *name, size_t len); #endif +#if @GNULIB_GETLOGIN@ +/* Returns the user's login name, or NULL if it cannot be found. Upon error, + returns NULL with errno set. + + See . + + Most programs don't need to use this function, because the information is + available through environment variables: + ${LOGNAME-$USER} on Unix platforms, + $USERNAME on native Windows platforms. + */ +# if !@HAVE_GETLOGIN@ +extern char *getlogin (void); +# endif +#elif defined GNULIB_POSIXCHECK +# undef getlogin +# define getlogin() \ + (GL_LINK_WARNING ("getlogin is unportable - " \ + "use gnulib module getlogin for portability"), \ + getlogin ()) +#endif + + #if @GNULIB_GETLOGIN_R@ /* Copies the user's login name to NAME. The array pointed to by NAME has room for SIZE bytes. @@ -462,9 +508,14 @@ extern int gethostname(char *name, size_t len); provided (this case is hopefully rare but is left open by the POSIX spec). See . + + Most programs don't need to use this function, because the information is + available through environment variables: + ${LOGNAME-$USER} on Unix platforms, + $USERNAME on native Windows platforms. */ # if !@HAVE_DECL_GETLOGIN_R@ -extern int getlogin_r (char *name, size_t size); +extern int getlogin_r (char *name, size_t size) _GL_ARG_NONNULL ((1)); # endif #elif defined GNULIB_POSIXCHECK # undef getlogin_r @@ -574,7 +625,8 @@ extern void endusershell (void); Return 0 if successful, otherwise -1 and errno set. See the POSIX:2001 specification . */ -extern int lchown (char const *file, uid_t owner, gid_t group); +extern int lchown (char const *file, uid_t owner, gid_t group) + _GL_ARG_NONNULL ((1)); # endif #elif defined GNULIB_POSIXCHECK # undef lchown @@ -594,7 +646,8 @@ extern int lchown (char const *file, uid_t owner, gid_t group); See POSIX:2001 specification . */ # if !@HAVE_LINK@ || @REPLACE_LINK@ -extern int link (const char *path1, const char *path2); +extern int link (const char *path1, const char *path2) + _GL_ARG_NONNULL ((1, 2)); # endif #elif defined GNULIB_POSIXCHECK # undef link @@ -614,11 +667,12 @@ extern int link (const char *path1, const char *path2); Return 0 if successful, otherwise -1 and errno set. */ # if !@HAVE_LINKAT@ || @REPLACE_LINKAT@ extern int linkat (int fd1, const char *path1, int fd2, const char *path2, - int flag); + int flag) + _GL_ARG_NONNULL ((2, 4)); # endif #elif defined GNULIB_POSIXCHECK # undef linkat -# define link(f1,path1,f2,path2,f) \ +# define linkat(f1,path1,f2,path2,f) \ (GL_LINK_WARNING ("linkat is unportable - " \ "use gnulib module linkat for portability"), \ linkat (f1, path1, f2, path2,f)) @@ -654,7 +708,7 @@ extern int linkat (int fd1, const char *path1, int fd2, const char *path2, # if @HAVE_PIPE2@ # define pipe2 rpl_pipe2 # endif -extern int pipe2 (int fd[2], int flags); +extern int pipe2 (int fd[2], int flags) _GL_ARG_NONNULL ((1)); #elif defined GNULIB_POSIXCHECK # undef pipe2 # define pipe2(f,o) \ @@ -673,11 +727,12 @@ extern int pipe2 (int fd[2], int flags); set errno and return -1. 0 indicates EOF. See the POSIX:2001 specification . */ # if !@HAVE_PREAD@ || @REPLACE_PREAD@ - extern ssize_t pread (int fd, char *buf, size_t bufsize, off_t offset); + extern ssize_t pread (int fd, void *buf, size_t bufsize, off_t offset) + _GL_ARG_NONNULL ((2)); # endif #elif defined GNULIB_POSIXCHECK # undef pread -# define pread(f,b,s,o) \ +# define pread(f,b,s,o) \ (GL_LINK_WARNING ("pread is unportable - " \ "use gnulib module pread for portability"), \ pread (f, b, s, o)) @@ -694,7 +749,8 @@ extern int pipe2 (int fd[2], int flags); See the POSIX:2001 specification . */ # if !@HAVE_READLINK@ || @REPLACE_READLINK@ -extern ssize_t readlink (const char *file, char *buf, size_t bufsize); +extern ssize_t readlink (const char *file, char *buf, size_t bufsize) + _GL_ARG_NONNULL ((1, 2)); # endif #elif defined GNULIB_POSIXCHECK # undef readlink @@ -707,11 +763,12 @@ extern ssize_t readlink (const char *file, char *buf, size_t bufsize); #if @GNULIB_READLINKAT@ # if !@HAVE_READLINKAT@ -ssize_t readlinkat (int fd, char const *file, char *buf, size_t len); +extern ssize_t readlinkat (int fd, char const *file, char *buf, size_t len) + _GL_ARG_NONNULL ((2, 3)); # endif #elif defined GNULIB_POSIXCHECK # undef readlinkat -# define readlinkat(d,n,b,l) \ +# define readlinkat(d,n,b,l) \ (GL_LINK_WARNING ("readlinkat is not portable - " \ "use gnulib module symlinkat for portability"), \ readlinkat (d, n, b, l)) @@ -722,7 +779,7 @@ ssize_t readlinkat (int fd, char const *file, char *buf, size_t len); # if @REPLACE_RMDIR@ # define rmdir rpl_rmdir /* Remove the directory DIR. */ -extern int rmdir (char const *name); +extern int rmdir (char const *name) _GL_ARG_NONNULL ((1)); # endif #elif defined GNULIB_POSIXCHECK # undef rmdir @@ -760,11 +817,12 @@ extern unsigned int sleep (unsigned int n); # define symlink rpl_symlink # endif # if !@HAVE_SYMLINK@ || @REPLACE_SYMLINK@ -int symlink (char const *contents, char const *file); +extern int symlink (char const *contents, char const *file) + _GL_ARG_NONNULL ((1, 2)); # endif #elif defined GNULIB_POSIXCHECK # undef symlink -# define symlink(c,n) \ +# define symlink(c,n) \ (GL_LINK_WARNING ("symlink is not portable - " \ "use gnulib module symlink for portability"), \ symlink (c, n)) @@ -773,11 +831,12 @@ int symlink (char const *contents, char const *file); #if @GNULIB_SYMLINKAT@ # if !@HAVE_SYMLINKAT@ -int symlinkat (char const *contents, int fd, char const *file); +extern int symlinkat (char const *contents, int fd, char const *file) + _GL_ARG_NONNULL ((1, 3)); # endif #elif defined GNULIB_POSIXCHECK # undef symlinkat -# define symlinkat(c,d,n) \ +# define symlinkat(c,d,n) \ (GL_LINK_WARNING ("symlinkat is not portable - " \ "use gnulib module symlinkat for portability"), \ symlinkat (c, d, n)) @@ -788,7 +847,7 @@ int symlinkat (char const *contents, int fd, char const *file); # if @REPLACE_UNLINK@ # undef unlink # define unlink rpl_unlink -extern int unlink (char const *file); +extern int unlink (char const *file) _GL_ARG_NONNULL ((1)); # endif #elif defined GNULIB_POSIXCHECK # undef unlink @@ -805,7 +864,7 @@ extern int unlink (char const *file); # define unlinkat rpl_unlinkat # endif # if !@HAVE_UNLINKAT@ || @REPLACE_UNLINKAT@ -extern int unlinkat (int fd, char const *file, int flag); +extern int unlinkat (int fd, char const *file, int flag) _GL_ARG_NONNULL ((2)); # endif #elif defined GNULIB_POSIXCHECK # undef unlinkat @@ -843,7 +902,8 @@ extern int usleep (useconds_t n); . */ # undef write # define write rpl_write -extern ssize_t write (int fd, const void *buf, size_t count); +extern ssize_t write (int fd, const void *buf, size_t count) + _GL_ARG_NONNULL ((2)); #endif