1 /* Substitute for and wrapper around <unistd.h>.
2 Copyright (C) 2003-2020 Free Software Foundation, Inc.
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2, or (at your option)
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, see <https://www.gnu.org/licenses/>. */
17 #ifndef _@GUARD_PREFIX@_UNISTD_H
20 @PRAGMA_SYSTEM_HEADER@
24 #if @HAVE_UNISTD_H@ && defined _GL_INCLUDING_UNISTD_H
25 /* Special invocation convention:
26 - On Mac OS X 10.3.9 we have a sequence of nested includes
27 <unistd.h> -> <signal.h> -> <pthread.h> -> <unistd.h>
28 In this situation, the functions are not yet declared, therefore we cannot
29 provide the C++ aliases. */
31 #@INCLUDE_NEXT@ @NEXT_UNISTD_H@
34 /* Normal invocation convention. */
36 /* The include_next requires a split double-inclusion guard. */
38 # define _GL_INCLUDING_UNISTD_H
39 # @INCLUDE_NEXT@ @NEXT_UNISTD_H@
40 # undef _GL_INCLUDING_UNISTD_H
43 /* Get all possible declarations of gethostname(). */
44 #if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ \
45 && !defined _GL_INCLUDING_WINSOCK2_H
46 # define _GL_INCLUDING_WINSOCK2_H
47 # include <winsock2.h>
48 # undef _GL_INCLUDING_WINSOCK2_H
51 #if !defined _@GUARD_PREFIX@_UNISTD_H && !defined _GL_INCLUDING_WINSOCK2_H
52 #define _@GUARD_PREFIX@_UNISTD_H
54 /* NetBSD 5.0 mis-defines NULL. Also get size_t. */
55 /* But avoid namespace pollution on glibc systems. */
60 /* mingw doesn't define the SEEK_* or *_FILENO macros in <unistd.h>. */
61 /* MSVC declares 'unlink' in <stdio.h>, not in <unistd.h>. We must include
62 it before we #define unlink rpl_unlink. */
63 /* Cygwin 1.7.1 declares symlinkat in <stdio.h>, not in <unistd.h>. */
64 /* But avoid namespace pollution on glibc systems. */
65 #if (!(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) \
66 || ((@GNULIB_UNLINK@ || defined GNULIB_POSIXCHECK) \
67 && (defined _WIN32 && ! defined __CYGWIN__)) \
68 || ((@GNULIB_SYMLINKAT@ || defined GNULIB_POSIXCHECK) \
69 && defined __CYGWIN__)) \
70 && ! defined __GLIBC__
74 /* Cygwin 1.7.1 and Android 4.3 declare unlinkat in <fcntl.h>, not in
76 /* But avoid namespace pollution on glibc systems. */
77 #if (@GNULIB_UNLINKAT@ || defined GNULIB_POSIXCHECK) \
78 && (defined __CYGWIN__ || defined __ANDROID__) \
79 && ! defined __GLIBC__
83 /* mingw fails to declare _exit in <unistd.h>. */
84 /* mingw, MSVC, BeOS, Haiku declare environ in <stdlib.h>, not in
86 /* Solaris declares getcwd not only in <unistd.h> but also in <stdlib.h>. */
87 /* OSF Tru64 Unix cannot see gnulib rpl_strtod when system <stdlib.h> is
89 /* But avoid namespace pollution on glibc systems. */
90 #if !defined __GLIBC__ && !defined __osf__
91 # define __need_system_stdlib_h
93 # undef __need_system_stdlib_h
96 /* Native Windows platforms declare chdir, getcwd, rmdir in
97 <io.h> and/or <direct.h>, not in <unistd.h>.
98 They also declare access(), chmod(), close(), dup(), dup2(), isatty(),
99 lseek(), read(), unlink(), write() in <io.h>. */
100 #if ((@GNULIB_CHDIR@ || @GNULIB_GETCWD@ || @GNULIB_RMDIR@ \
101 || defined GNULIB_POSIXCHECK) \
102 && (defined _WIN32 && ! defined __CYGWIN__))
103 # include <io.h> /* mingw32, mingw64 */
104 # include <direct.h> /* mingw64, MSVC 9 */
105 #elif (@GNULIB_CLOSE@ || @GNULIB_DUP@ || @GNULIB_DUP2@ || @GNULIB_ISATTY@ \
106 || @GNULIB_LSEEK@ || @GNULIB_READ@ || @GNULIB_UNLINK@ || @GNULIB_WRITE@ \
107 || defined GNULIB_POSIXCHECK) \
108 && (defined _WIN32 && ! defined __CYGWIN__)
112 /* AIX and OSF/1 5.1 declare getdomainname in <netdb.h>, not in <unistd.h>.
113 NonStop Kernel declares gethostname in <netdb.h>, not in <unistd.h>. */
114 /* But avoid namespace pollution on glibc systems. */
115 #if ((@GNULIB_GETDOMAINNAME@ && (defined _AIX || defined __osf__)) \
116 || (@GNULIB_GETHOSTNAME@ && defined __TANDEM)) \
117 && !defined __GLIBC__
121 /* Mac OS X 10.13, Solaris 11.4, and Android 9.0 declare getentropy in
122 <sys/random.h>, not in <unistd.h>. */
123 /* But avoid namespace pollution on glibc systems. */
124 #if (@GNULIB_GETENTROPY@ || defined GNULIB_POSIXCHECK) \
125 && ((defined __APPLE__ && defined __MACH__) || defined __sun \
126 || defined __ANDROID__) \
127 && @UNISTD_H_HAVE_SYS_RANDOM_H@ \
128 && !defined __GLIBC__
129 # include <sys/random.h>
132 /* Android 4.3 declares fchownat in <sys/stat.h>, not in <unistd.h>. */
133 /* But avoid namespace pollution on glibc systems. */
134 #if (@GNULIB_FCHOWNAT@ || defined GNULIB_POSIXCHECK) && defined __ANDROID__ \
135 && !defined __GLIBC__
136 # include <sys/stat.h>
139 /* MSVC defines off_t in <sys/types.h>.
140 May also define off_t to a 64-bit type on native Windows. */
141 /* But avoid namespace pollution on glibc systems. */
143 /* Get off_t, ssize_t. */
144 # include <sys/types.h>
147 /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
149 /* The definition of _GL_ARG_NONNULL is copied here. */
151 /* The definition of _GL_WARN_ON_USE is copied here. */
154 /* Get getopt(), optarg, optind, opterr, optopt. */
155 #if @GNULIB_GETOPT_POSIX@ && @GNULIB_UNISTD_H_GETOPT@ && !defined _GL_SYSTEM_GETOPT
156 # include <getopt-cdefs.h>
157 # include <getopt-pfx-core.h>
160 #ifndef _GL_INLINE_HEADER_BEGIN
161 #error "Please include config.h first."
163 _GL_INLINE_HEADER_BEGIN
164 #ifndef _GL_UNISTD_INLINE
165 # define _GL_UNISTD_INLINE _GL_INLINE
168 /* Hide some function declarations from <winsock2.h>. */
170 #if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@
171 # if !defined _@GUARD_PREFIX@_SYS_SOCKET_H
172 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
174 # define socket socket_used_without_including_sys_socket_h
176 # define connect connect_used_without_including_sys_socket_h
178 # define accept accept_used_without_including_sys_socket_h
180 # define bind bind_used_without_including_sys_socket_h
182 # define getpeername getpeername_used_without_including_sys_socket_h
184 # define getsockname getsockname_used_without_including_sys_socket_h
186 # define getsockopt getsockopt_used_without_including_sys_socket_h
188 # define listen listen_used_without_including_sys_socket_h
190 # define recv recv_used_without_including_sys_socket_h
192 # define send send_used_without_including_sys_socket_h
194 # define recvfrom recvfrom_used_without_including_sys_socket_h
196 # define sendto sendto_used_without_including_sys_socket_h
198 # define setsockopt setsockopt_used_without_including_sys_socket_h
200 # define shutdown shutdown_used_without_including_sys_socket_h
202 _GL_WARN_ON_USE (socket
,
203 "socket() used without including <sys/socket.h>");
204 _GL_WARN_ON_USE (connect
,
205 "connect() used without including <sys/socket.h>");
206 _GL_WARN_ON_USE (accept
,
207 "accept() used without including <sys/socket.h>");
208 _GL_WARN_ON_USE (bind
,
209 "bind() used without including <sys/socket.h>");
210 _GL_WARN_ON_USE (getpeername
,
211 "getpeername() used without including <sys/socket.h>");
212 _GL_WARN_ON_USE (getsockname
,
213 "getsockname() used without including <sys/socket.h>");
214 _GL_WARN_ON_USE (getsockopt
,
215 "getsockopt() used without including <sys/socket.h>");
216 _GL_WARN_ON_USE (listen
,
217 "listen() used without including <sys/socket.h>");
218 _GL_WARN_ON_USE (recv
,
219 "recv() used without including <sys/socket.h>");
220 _GL_WARN_ON_USE (send
,
221 "send() used without including <sys/socket.h>");
222 _GL_WARN_ON_USE (recvfrom
,
223 "recvfrom() used without including <sys/socket.h>");
224 _GL_WARN_ON_USE (sendto
,
225 "sendto() used without including <sys/socket.h>");
226 _GL_WARN_ON_USE (setsockopt
,
227 "setsockopt() used without including <sys/socket.h>");
228 _GL_WARN_ON_USE (shutdown
,
229 "shutdown() used without including <sys/socket.h>");
232 # if !defined _@GUARD_PREFIX@_SYS_SELECT_H
233 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
235 # define select select_used_without_including_sys_select_h
237 _GL_WARN_ON_USE (select
,
238 "select() used without including <sys/select.h>");
244 /* OS/2 EMX lacks these macros. */
246 # define STDIN_FILENO 0
248 #ifndef STDOUT_FILENO
249 # define STDOUT_FILENO 1
251 #ifndef STDERR_FILENO
252 # define STDERR_FILENO 2
255 /* Ensure *_OK macros exist. */
264 /* Declare overridden functions. */
268 # if @REPLACE_ACCESS@
269 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
271 # define access rpl_access
273 _GL_FUNCDECL_RPL (access
, int, (const char *file
, int mode
)
274 _GL_ARG_NONNULL ((1)));
275 _GL_CXXALIAS_RPL (access
, int, (const char *file
, int mode
));
277 _GL_CXXALIAS_SYS (access
, int, (const char *file
, int mode
));
279 _GL_CXXALIASWARN (access
);
280 #elif defined GNULIB_POSIXCHECK
282 # if HAVE_RAW_DECL_ACCESS
283 /* The access() function is a security risk. */
284 _GL_WARN_ON_USE (access
, "access does not always support X_OK - "
285 "use gnulib module access for portability; "
286 "also, this function is a security risk - "
287 "use the gnulib module faccessat instead");
293 _GL_CXXALIAS_SYS (chdir
, int, (const char *file
) _GL_ARG_NONNULL ((1)));
294 _GL_CXXALIASWARN (chdir
);
295 #elif defined GNULIB_POSIXCHECK
297 # if HAVE_RAW_DECL_CHDIR
298 _GL_WARN_ON_USE (chown
, "chdir is not always in <unistd.h> - "
299 "use gnulib module chdir for portability");
305 /* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
306 to GID (if GID is not -1). Follow symbolic links.
307 Return 0 if successful, otherwise -1 and errno set.
308 See the POSIX:2008 specification
309 <https://pubs.opengroup.org/onlinepubs/9699919799/functions/chown.html. */
311 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
313 # define chown rpl_chown
315 _GL_FUNCDECL_RPL (chown
, int, (const char *file
, uid_t uid
, gid_t gid
)
316 _GL_ARG_NONNULL ((1)));
317 _GL_CXXALIAS_RPL (chown
, int, (const char *file
, uid_t uid
, gid_t gid
));
320 _GL_FUNCDECL_SYS (chown
, int, (const char *file
, uid_t uid
, gid_t gid
)
321 _GL_ARG_NONNULL ((1)));
323 _GL_CXXALIAS_SYS (chown
, int, (const char *file
, uid_t uid
, gid_t gid
));
325 _GL_CXXALIASWARN (chown
);
326 #elif defined GNULIB_POSIXCHECK
328 # if HAVE_RAW_DECL_CHOWN
329 _GL_WARN_ON_USE (chown
, "chown fails to follow symlinks on some systems and "
330 "doesn't treat a uid or gid of -1 on some systems - "
331 "use gnulib module chown for portability");
338 /* Automatically included by modules that need a replacement for close. */
339 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
341 # define close rpl_close
343 _GL_FUNCDECL_RPL (close
, int, (int fd
));
344 _GL_CXXALIAS_RPL (close
, int, (int fd
));
346 _GL_CXXALIAS_SYS (close
, int, (int fd
));
348 _GL_CXXALIASWARN (close
);
349 #elif @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
351 # define close close_used_without_requesting_gnulib_module_close
352 #elif defined GNULIB_POSIXCHECK
354 /* Assume close is always declared. */
355 _GL_WARN_ON_USE (close
, "close does not portably work on sockets - "
356 "use gnulib module close for portability");
360 #if @GNULIB_COPY_FILE_RANGE@
361 # if !@HAVE_COPY_FILE_RANGE@
362 _GL_FUNCDECL_SYS (copy_file_range
, ssize_t
, (int ifd
, off_t
*ipos
,
363 int ofd
, off_t
*opos
,
364 size_t len
, unsigned flags
));
365 _GL_CXXALIAS_SYS (copy_file_range
, ssize_t
, (int ifd
, off_t
*ipos
,
366 int ofd
, off_t
*opos
,
367 size_t len
, unsigned flags
));
369 _GL_CXXALIASWARN (copy_file_range
);
370 #elif defined GNULIB_POSIXCHECK
371 /* Assume copy_file_range is always declared. */
372 _GL_WARN_ON_USE (copy_file_range
,
373 "copy_file_range is unportable - "
374 "use gnulib module copy_file_range for portability");
380 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
383 _GL_FUNCDECL_RPL (dup
, int, (int oldfd
));
384 _GL_CXXALIAS_RPL (dup
, int, (int oldfd
));
386 _GL_CXXALIAS_SYS (dup
, int, (int oldfd
));
388 _GL_CXXALIASWARN (dup
);
389 #elif defined GNULIB_POSIXCHECK
391 # if HAVE_RAW_DECL_DUP
392 _GL_WARN_ON_USE (dup
, "dup is unportable - "
393 "use gnulib module dup for portability");
399 /* Copy the file descriptor OLDFD into file descriptor NEWFD. Do nothing if
400 NEWFD = OLDFD, otherwise close NEWFD first if it is open.
401 Return newfd if successful, otherwise -1 and errno set.
402 See the POSIX:2008 specification
403 <https://pubs.opengroup.org/onlinepubs/9699919799/functions/dup2.html>. */
405 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
406 # define dup2 rpl_dup2
408 _GL_FUNCDECL_RPL (dup2
, int, (int oldfd
, int newfd
));
409 _GL_CXXALIAS_RPL (dup2
, int, (int oldfd
, int newfd
));
412 _GL_FUNCDECL_SYS (dup2
, int, (int oldfd
, int newfd
));
414 _GL_CXXALIAS_SYS (dup2
, int, (int oldfd
, int newfd
));
416 _GL_CXXALIASWARN (dup2
);
417 #elif defined GNULIB_POSIXCHECK
419 # if HAVE_RAW_DECL_DUP2
420 _GL_WARN_ON_USE (dup2
, "dup2 is unportable - "
421 "use gnulib module dup2 for portability");
427 /* Copy the file descriptor OLDFD into file descriptor NEWFD, with the
429 The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
430 and O_TEXT, O_BINARY (defined in "binary-io.h").
431 Close NEWFD first if it is open.
432 Return newfd if successful, otherwise -1 and errno set.
433 See the Linux man page at
434 <https://www.kernel.org/doc/man-pages/online/pages/man2/dup3.2.html>. */
436 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
437 # define dup3 rpl_dup3
439 _GL_FUNCDECL_RPL (dup3
, int, (int oldfd
, int newfd
, int flags
));
440 _GL_CXXALIAS_RPL (dup3
, int, (int oldfd
, int newfd
, int flags
));
442 _GL_FUNCDECL_SYS (dup3
, int, (int oldfd
, int newfd
, int flags
));
443 _GL_CXXALIAS_SYS (dup3
, int, (int oldfd
, int newfd
, int flags
));
445 _GL_CXXALIASWARN (dup3
);
446 #elif defined GNULIB_POSIXCHECK
448 # if HAVE_RAW_DECL_DUP3
449 _GL_WARN_ON_USE (dup3
, "dup3 is unportable - "
450 "use gnulib module dup3 for portability");
456 # if defined __CYGWIN__ && !defined __i386__
457 /* The 'environ' variable is defined in a DLL. Therefore its declaration needs
458 the '__declspec(dllimport)' attribute, but the system's <unistd.h> lacks it.
459 This leads to a link error on 64-bit Cygwin when the option
460 -Wl,--disable-auto-import is in use. */
461 _GL_EXTERN_C
__declspec(dllimport
) char **environ
;
463 # if !@HAVE_DECL_ENVIRON@
464 /* Set of environment variables and values. An array of strings of the form
465 "VARIABLE=VALUE", terminated with a NULL. */
466 # if defined __APPLE__ && defined __MACH__
467 # include <TargetConditionals.h>
468 # if !TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR
469 # define _GL_USE_CRT_EXTERNS
472 # ifdef _GL_USE_CRT_EXTERNS
473 # include <crt_externs.h>
474 # define environ (*_NSGetEnviron ())
479 extern char **environ
;
485 #elif defined GNULIB_POSIXCHECK
486 # if HAVE_RAW_DECL_ENVIRON
487 _GL_UNISTD_INLINE
char ***
488 _GL_WARN_ON_USE_ATTRIBUTE ("environ is unportable - "
489 "use gnulib module environ for portability")
495 # define environ (*rpl_environ ())
500 #if @GNULIB_EUIDACCESS@
501 /* Like access(), except that it uses the effective user id and group id of
502 the current process. */
503 # if !@HAVE_EUIDACCESS@
504 _GL_FUNCDECL_SYS (euidaccess
, int, (const char *filename
, int mode
)
505 _GL_ARG_NONNULL ((1)));
507 _GL_CXXALIAS_SYS (euidaccess
, int, (const char *filename
, int mode
));
508 _GL_CXXALIASWARN (euidaccess
);
509 # if defined GNULIB_POSIXCHECK
510 /* Like access(), this function is a security risk. */
511 _GL_WARN_ON_USE (euidaccess
, "the euidaccess function is a security risk - "
512 "use the gnulib module faccessat instead");
514 #elif defined GNULIB_POSIXCHECK
516 # if HAVE_RAW_DECL_EUIDACCESS
517 _GL_WARN_ON_USE (euidaccess
, "euidaccess is unportable - "
518 "use gnulib module euidaccess for portability");
523 #if @GNULIB_FACCESSAT@
524 # if @REPLACE_FACCESSAT@
525 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
527 # define faccessat rpl_faccessat
529 _GL_FUNCDECL_RPL (faccessat
, int,
530 (int fd
, char const *name
, int mode
, int flag
)
531 _GL_ARG_NONNULL ((2)));
532 _GL_CXXALIAS_RPL (faccessat
, int,
533 (int fd
, char const *name
, int mode
, int flag
));
535 # if !@HAVE_FACCESSAT@
536 _GL_FUNCDECL_SYS (faccessat
, int,
537 (int fd
, char const *file
, int mode
, int flag
)
538 _GL_ARG_NONNULL ((2)));
540 _GL_CXXALIAS_SYS (faccessat
, int,
541 (int fd
, char const *file
, int mode
, int flag
));
543 _GL_CXXALIASWARN (faccessat
);
544 #elif defined GNULIB_POSIXCHECK
546 # if HAVE_RAW_DECL_FACCESSAT
547 _GL_WARN_ON_USE (faccessat
, "faccessat is not portable - "
548 "use gnulib module faccessat for portability");
554 /* Change the process' current working directory to the directory on which
555 the given file descriptor is open.
556 Return 0 if successful, otherwise -1 and errno set.
557 See the POSIX:2008 specification
558 <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fchdir.html>. */
560 _GL_FUNCDECL_SYS (fchdir
, int, (int /*fd*/));
562 /* Gnulib internal hooks needed to maintain the fchdir metadata. */
563 _GL_EXTERN_C
int _gl_register_fd (int fd
, const char *filename
)
564 _GL_ARG_NONNULL ((2));
565 _GL_EXTERN_C
void _gl_unregister_fd (int fd
);
566 _GL_EXTERN_C
int _gl_register_dup (int oldfd
, int newfd
);
567 _GL_EXTERN_C
const char *_gl_directory_name (int fd
);
570 # if !@HAVE_DECL_FCHDIR@
571 _GL_FUNCDECL_SYS (fchdir
, int, (int /*fd*/));
574 _GL_CXXALIAS_SYS (fchdir
, int, (int /*fd*/));
575 _GL_CXXALIASWARN (fchdir
);
576 #elif defined GNULIB_POSIXCHECK
578 # if HAVE_RAW_DECL_FCHDIR
579 _GL_WARN_ON_USE (fchdir
, "fchdir is unportable - "
580 "use gnulib module fchdir for portability");
585 #if @GNULIB_FCHOWNAT@
586 # if @REPLACE_FCHOWNAT@
587 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
589 # define fchownat rpl_fchownat
591 _GL_FUNCDECL_RPL (fchownat
, int, (int fd
, char const *file
,
592 uid_t owner
, gid_t group
, int flag
)
593 _GL_ARG_NONNULL ((2)));
594 _GL_CXXALIAS_RPL (fchownat
, int, (int fd
, char const *file
,
595 uid_t owner
, gid_t group
, int flag
));
597 # if !@HAVE_FCHOWNAT@
598 _GL_FUNCDECL_SYS (fchownat
, int, (int fd
, char const *file
,
599 uid_t owner
, gid_t group
, int flag
)
600 _GL_ARG_NONNULL ((2)));
602 _GL_CXXALIAS_SYS (fchownat
, int, (int fd
, char const *file
,
603 uid_t owner
, gid_t group
, int flag
));
605 _GL_CXXALIASWARN (fchownat
);
606 #elif defined GNULIB_POSIXCHECK
608 # if HAVE_RAW_DECL_FCHOWNAT
609 _GL_WARN_ON_USE (fchownat
, "fchownat is not portable - "
610 "use gnulib module openat for portability");
615 #if @GNULIB_FDATASYNC@
616 /* Synchronize changes to a file.
617 Return 0 if successful, otherwise -1 and errno set.
618 See POSIX:2008 specification
619 <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fdatasync.html>. */
620 # if !@HAVE_FDATASYNC@ || !@HAVE_DECL_FDATASYNC@
621 _GL_FUNCDECL_SYS (fdatasync
, int, (int fd
));
623 _GL_CXXALIAS_SYS (fdatasync
, int, (int fd
));
624 _GL_CXXALIASWARN (fdatasync
);
625 #elif defined GNULIB_POSIXCHECK
627 # if HAVE_RAW_DECL_FDATASYNC
628 _GL_WARN_ON_USE (fdatasync
, "fdatasync is unportable - "
629 "use gnulib module fdatasync for portability");
635 /* Synchronize changes, including metadata, to a file.
636 Return 0 if successful, otherwise -1 and errno set.
637 See POSIX:2008 specification
638 <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fsync.html>. */
640 _GL_FUNCDECL_SYS (fsync
, int, (int fd
));
642 _GL_CXXALIAS_SYS (fsync
, int, (int fd
));
643 _GL_CXXALIASWARN (fsync
);
644 #elif defined GNULIB_POSIXCHECK
646 # if HAVE_RAW_DECL_FSYNC
647 _GL_WARN_ON_USE (fsync
, "fsync is unportable - "
648 "use gnulib module fsync for portability");
653 #if @GNULIB_FTRUNCATE@
654 /* Change the size of the file to which FD is opened to become equal to LENGTH.
655 Return 0 if successful, otherwise -1 and errno set.
656 See the POSIX:2008 specification
657 <https://pubs.opengroup.org/onlinepubs/9699919799/functions/ftruncate.html>. */
658 # if @REPLACE_FTRUNCATE@
659 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
661 # define ftruncate rpl_ftruncate
663 _GL_FUNCDECL_RPL (ftruncate
, int, (int fd
, off_t length
));
664 _GL_CXXALIAS_RPL (ftruncate
, int, (int fd
, off_t length
));
666 # if !@HAVE_FTRUNCATE@
667 _GL_FUNCDECL_SYS (ftruncate
, int, (int fd
, off_t length
));
669 _GL_CXXALIAS_SYS (ftruncate
, int, (int fd
, off_t length
));
671 _GL_CXXALIASWARN (ftruncate
);
672 #elif defined GNULIB_POSIXCHECK
674 # if HAVE_RAW_DECL_FTRUNCATE
675 _GL_WARN_ON_USE (ftruncate
, "ftruncate is unportable - "
676 "use gnulib module ftruncate for portability");
682 /* Get the name of the current working directory, and put it in SIZE bytes
684 Return BUF if successful, or NULL if the directory couldn't be determined
685 or SIZE was too small.
686 See the POSIX:2008 specification
687 <https://pubs.opengroup.org/onlinepubs/9699919799/functions/getcwd.html>.
688 Additionally, the gnulib module 'getcwd' guarantees the following GNU
689 extension: If BUF is NULL, an array is allocated with 'malloc'; the array
690 is SIZE bytes long, unless SIZE == 0, in which case it is as big as
692 # if @REPLACE_GETCWD@
693 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
694 # define getcwd rpl_getcwd
696 _GL_FUNCDECL_RPL (getcwd
, char *, (char *buf
, size_t size
));
697 _GL_CXXALIAS_RPL (getcwd
, char *, (char *buf
, size_t size
));
699 /* Need to cast, because on mingw, the second parameter is
701 _GL_CXXALIAS_SYS_CAST (getcwd
, char *, (char *buf
, size_t size
));
703 _GL_CXXALIASWARN (getcwd
);
704 #elif defined GNULIB_POSIXCHECK
706 # if HAVE_RAW_DECL_GETCWD
707 _GL_WARN_ON_USE (getcwd
, "getcwd is unportable - "
708 "use gnulib module getcwd for portability");
713 #if @GNULIB_GETDOMAINNAME@
714 /* Return the NIS domain name of the machine.
715 WARNING! The NIS domain name is unrelated to the fully qualified host name
716 of the machine. It is also unrelated to email addresses.
717 WARNING! The NIS domain name is usually the empty string or "(none)" when
720 Put up to LEN bytes of the NIS domain name into NAME.
721 Null terminate it if the name is shorter than LEN.
722 If the NIS domain name is longer than LEN, set errno = EINVAL and return -1.
723 Return 0 if successful, otherwise set errno and return -1. */
724 # if @REPLACE_GETDOMAINNAME@
725 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
726 # undef getdomainname
727 # define getdomainname rpl_getdomainname
729 _GL_FUNCDECL_RPL (getdomainname
, int, (char *name
, size_t len
)
730 _GL_ARG_NONNULL ((1)));
731 _GL_CXXALIAS_RPL (getdomainname
, int, (char *name
, size_t len
));
733 # if !@HAVE_DECL_GETDOMAINNAME@
734 _GL_FUNCDECL_SYS (getdomainname
, int, (char *name
, size_t len
)
735 _GL_ARG_NONNULL ((1)));
737 _GL_CXXALIAS_SYS (getdomainname
, int, (char *name
, size_t len
));
739 _GL_CXXALIASWARN (getdomainname
);
740 #elif defined GNULIB_POSIXCHECK
741 # undef getdomainname
742 # if HAVE_RAW_DECL_GETDOMAINNAME
743 _GL_WARN_ON_USE (getdomainname
, "getdomainname is unportable - "
744 "use gnulib module getdomainname for portability");
749 #if @GNULIB_GETDTABLESIZE@
750 /* Return the maximum number of file descriptors in the current process.
751 In POSIX, this is same as sysconf (_SC_OPEN_MAX). */
752 # if @REPLACE_GETDTABLESIZE@
753 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
754 # undef getdtablesize
755 # define getdtablesize rpl_getdtablesize
757 _GL_FUNCDECL_RPL (getdtablesize
, int, (void));
758 _GL_CXXALIAS_RPL (getdtablesize
, int, (void));
760 # if !@HAVE_GETDTABLESIZE@
761 _GL_FUNCDECL_SYS (getdtablesize
, int, (void));
763 /* Need to cast, because on AIX, the parameter list is
765 _GL_CXXALIAS_SYS_CAST (getdtablesize
, int, (void));
767 _GL_CXXALIASWARN (getdtablesize
);
768 #elif defined GNULIB_POSIXCHECK
769 # undef getdtablesize
770 # if HAVE_RAW_DECL_GETDTABLESIZE
771 _GL_WARN_ON_USE (getdtablesize
, "getdtablesize is unportable - "
772 "use gnulib module getdtablesize for portability");
777 #if @GNULIB_GETENTROPY@
778 /* Fill a buffer with random bytes. */
779 # if !@HAVE_GETENTROPY@
780 _GL_FUNCDECL_SYS (getentropy
, int, (void *buffer
, size_t length
));
782 _GL_CXXALIAS_SYS (getentropy
, int, (void *buffer
, size_t length
));
783 _GL_CXXALIASWARN (getentropy
);
784 #elif defined GNULIB_POSIXCHECK
786 # if HAVE_RAW_DECL_GETENTROPY
787 _GL_WARN_ON_USE (getentropy
, "getentropy is unportable - "
788 "use gnulib module getentropy for portability");
793 #if @GNULIB_GETGROUPS@
794 /* Return the supplemental groups that the current process belongs to.
795 It is unspecified whether the effective group id is in the list.
796 If N is 0, return the group count; otherwise, N describes how many
797 entries are available in GROUPS. Return -1 and set errno if N is
798 not 0 and not large enough. Fails with ENOSYS on some systems. */
799 # if @REPLACE_GETGROUPS@
800 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
802 # define getgroups rpl_getgroups
804 _GL_FUNCDECL_RPL (getgroups
, int, (int n
, gid_t
*groups
));
805 _GL_CXXALIAS_RPL (getgroups
, int, (int n
, gid_t
*groups
));
807 # if !@HAVE_GETGROUPS@
808 _GL_FUNCDECL_SYS (getgroups
, int, (int n
, gid_t
*groups
));
810 _GL_CXXALIAS_SYS (getgroups
, int, (int n
, gid_t
*groups
));
812 _GL_CXXALIASWARN (getgroups
);
813 #elif defined GNULIB_POSIXCHECK
815 # if HAVE_RAW_DECL_GETGROUPS
816 _GL_WARN_ON_USE (getgroups
, "getgroups is unportable - "
817 "use gnulib module getgroups for portability");
822 #if @GNULIB_GETHOSTNAME@
823 /* Return the standard host name of the machine.
824 WARNING! The host name may or may not be fully qualified.
826 Put up to LEN bytes of the host name into NAME.
827 Null terminate it if the name is shorter than LEN.
828 If the host name is longer than LEN, set errno = EINVAL and return -1.
829 Return 0 if successful, otherwise set errno and return -1. */
830 # if @UNISTD_H_HAVE_WINSOCK2_H@
831 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
833 # define gethostname rpl_gethostname
835 _GL_FUNCDECL_RPL (gethostname
, int, (char *name
, size_t len
)
836 _GL_ARG_NONNULL ((1)));
837 _GL_CXXALIAS_RPL (gethostname
, int, (char *name
, size_t len
));
839 # if !@HAVE_GETHOSTNAME@
840 _GL_FUNCDECL_SYS (gethostname
, int, (char *name
, size_t len
)
841 _GL_ARG_NONNULL ((1)));
843 /* Need to cast, because on Solaris 10 and OSF/1 5.1 systems, the second
846 _GL_CXXALIAS_SYS_CAST (gethostname
, int, (char *name
, size_t len
));
848 _GL_CXXALIASWARN (gethostname
);
849 #elif @UNISTD_H_HAVE_WINSOCK2_H@
851 # define gethostname gethostname_used_without_requesting_gnulib_module_gethostname
852 #elif defined GNULIB_POSIXCHECK
854 # if HAVE_RAW_DECL_GETHOSTNAME
855 _GL_WARN_ON_USE (gethostname
, "gethostname is unportable - "
856 "use gnulib module gethostname for portability");
861 #if @GNULIB_GETLOGIN@
862 /* Returns the user's login name, or NULL if it cannot be found. Upon error,
863 returns NULL with errno set.
865 See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/getlogin.html>.
867 Most programs don't need to use this function, because the information is
868 available through environment variables:
869 ${LOGNAME-$USER} on Unix platforms,
870 $USERNAME on native Windows platforms.
872 # if !@HAVE_DECL_GETLOGIN@
873 _GL_FUNCDECL_SYS (getlogin
, char *, (void));
875 _GL_CXXALIAS_SYS (getlogin
, char *, (void));
876 _GL_CXXALIASWARN (getlogin
);
877 #elif defined GNULIB_POSIXCHECK
879 # if HAVE_RAW_DECL_GETLOGIN
880 _GL_WARN_ON_USE (getlogin
, "getlogin is unportable - "
881 "use gnulib module getlogin for portability");
886 #if @GNULIB_GETLOGIN_R@
887 /* Copies the user's login name to NAME.
888 The array pointed to by NAME has room for SIZE bytes.
890 Returns 0 if successful. Upon error, an error number is returned, or -1 in
891 the case that the login name cannot be found but no specific error is
892 provided (this case is hopefully rare but is left open by the POSIX spec).
894 See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/getlogin.html>.
896 Most programs don't need to use this function, because the information is
897 available through environment variables:
898 ${LOGNAME-$USER} on Unix platforms,
899 $USERNAME on native Windows platforms.
901 # if @REPLACE_GETLOGIN_R@
902 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
903 # define getlogin_r rpl_getlogin_r
905 _GL_FUNCDECL_RPL (getlogin_r
, int, (char *name
, size_t size
)
906 _GL_ARG_NONNULL ((1)));
907 _GL_CXXALIAS_RPL (getlogin_r
, int, (char *name
, size_t size
));
909 # if !@HAVE_DECL_GETLOGIN_R@
910 _GL_FUNCDECL_SYS (getlogin_r
, int, (char *name
, size_t size
)
911 _GL_ARG_NONNULL ((1)));
913 /* Need to cast, because on Solaris 10 systems, the second argument is
915 _GL_CXXALIAS_SYS_CAST (getlogin_r
, int, (char *name
, size_t size
));
917 _GL_CXXALIASWARN (getlogin_r
);
918 #elif defined GNULIB_POSIXCHECK
920 # if HAVE_RAW_DECL_GETLOGIN_R
921 _GL_WARN_ON_USE (getlogin_r
, "getlogin_r is unportable - "
922 "use gnulib module getlogin_r for portability");
927 #if @GNULIB_GETPAGESIZE@
928 # if @REPLACE_GETPAGESIZE@
929 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
930 # define getpagesize rpl_getpagesize
932 _GL_FUNCDECL_RPL (getpagesize
, int, (void));
933 _GL_CXXALIAS_RPL (getpagesize
, int, (void));
935 /* On HP-UX, getpagesize exists, but it is not declared in <unistd.h> even if
936 the compiler options -D_HPUX_SOURCE -D_XOPEN_SOURCE=600 are used. */
938 _GL_FUNCDECL_SYS (getpagesize
, int, (void));
940 # if !@HAVE_GETPAGESIZE@
941 # if !defined getpagesize
942 /* This is for POSIX systems. */
943 # if !defined _gl_getpagesize && defined _SC_PAGESIZE
944 # if ! (defined __VMS && __VMS_VER < 70000000)
945 # define _gl_getpagesize() sysconf (_SC_PAGESIZE)
948 /* This is for older VMS. */
949 # if !defined _gl_getpagesize && defined __VMS
951 # define _gl_getpagesize() 8192
953 # define _gl_getpagesize() 512
956 /* This is for BeOS. */
957 # if !defined _gl_getpagesize && @HAVE_OS_H@
959 # if defined B_PAGE_SIZE
960 # define _gl_getpagesize() B_PAGE_SIZE
963 /* This is for AmigaOS4.0. */
964 # if !defined _gl_getpagesize && defined __amigaos4__
965 # define _gl_getpagesize() 2048
967 /* This is for older Unix systems. */
968 # if !defined _gl_getpagesize && @HAVE_SYS_PARAM_H@
969 # include <sys/param.h>
970 # ifdef EXEC_PAGESIZE
971 # define _gl_getpagesize() EXEC_PAGESIZE
977 # define _gl_getpagesize() (NBPG * CLSIZE)
980 # define _gl_getpagesize() NBPC
985 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
986 # define getpagesize() _gl_getpagesize ()
988 # if !GNULIB_defined_getpagesize_function
989 _GL_UNISTD_INLINE
int
992 return _gl_getpagesize ();
994 # define GNULIB_defined_getpagesize_function 1
999 /* Need to cast, because on Cygwin 1.5.x systems, the return type is size_t. */
1000 _GL_CXXALIAS_SYS_CAST (getpagesize
, int, (void));
1002 # if @HAVE_DECL_GETPAGESIZE@
1003 _GL_CXXALIASWARN (getpagesize
);
1005 #elif defined GNULIB_POSIXCHECK
1007 # if HAVE_RAW_DECL_GETPAGESIZE
1008 _GL_WARN_ON_USE (getpagesize
, "getpagesize is unportable - "
1009 "use gnulib module getpagesize for portability");
1014 #if @GNULIB_GETPASS@
1015 /* Function getpass() from module 'getpass':
1016 Read a password from /dev/tty or stdin.
1017 Function getpass() from module 'getpass-gnu':
1018 Read a password of arbitrary length from /dev/tty or stdin. */
1019 # if @REPLACE_GETPASS@
1020 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1022 # define getpass rpl_getpass
1024 _GL_FUNCDECL_RPL (getpass
, char *, (const char *prompt
)
1025 _GL_ARG_NONNULL ((1)));
1026 _GL_CXXALIAS_RPL (getpass
, char *, (const char *prompt
));
1028 # if !@HAVE_GETPASS@
1029 _GL_FUNCDECL_SYS (getpass
, char *, (const char *prompt
)
1030 _GL_ARG_NONNULL ((1)));
1032 _GL_CXXALIAS_SYS (getpass
, char *, (const char *prompt
));
1034 _GL_CXXALIASWARN (getpass
);
1035 #elif defined GNULIB_POSIXCHECK
1037 # if HAVE_RAW_DECL_GETPASS
1038 _GL_WARN_ON_USE (getpass
, "getpass is unportable - "
1039 "use gnulib module getpass or getpass-gnu for portability");
1044 #if @GNULIB_GETUSERSHELL@
1045 /* Return the next valid login shell on the system, or NULL when the end of
1046 the list has been reached. */
1047 # if !@HAVE_DECL_GETUSERSHELL@
1048 _GL_FUNCDECL_SYS (getusershell
, char *, (void));
1050 _GL_CXXALIAS_SYS (getusershell
, char *, (void));
1051 _GL_CXXALIASWARN (getusershell
);
1052 #elif defined GNULIB_POSIXCHECK
1053 # undef getusershell
1054 # if HAVE_RAW_DECL_GETUSERSHELL
1055 _GL_WARN_ON_USE (getusershell
, "getusershell is unportable - "
1056 "use gnulib module getusershell for portability");
1060 #if @GNULIB_GETUSERSHELL@
1061 /* Rewind to pointer that is advanced at each getusershell() call. */
1062 # if !@HAVE_DECL_GETUSERSHELL@
1063 _GL_FUNCDECL_SYS (setusershell
, void, (void));
1065 _GL_CXXALIAS_SYS (setusershell
, void, (void));
1066 _GL_CXXALIASWARN (setusershell
);
1067 #elif defined GNULIB_POSIXCHECK
1068 # undef setusershell
1069 # if HAVE_RAW_DECL_SETUSERSHELL
1070 _GL_WARN_ON_USE (setusershell
, "setusershell is unportable - "
1071 "use gnulib module getusershell for portability");
1075 #if @GNULIB_GETUSERSHELL@
1076 /* Free the pointer that is advanced at each getusershell() call and
1077 associated resources. */
1078 # if !@HAVE_DECL_GETUSERSHELL@
1079 _GL_FUNCDECL_SYS (endusershell
, void, (void));
1081 _GL_CXXALIAS_SYS (endusershell
, void, (void));
1082 _GL_CXXALIASWARN (endusershell
);
1083 #elif defined GNULIB_POSIXCHECK
1084 # undef endusershell
1085 # if HAVE_RAW_DECL_ENDUSERSHELL
1086 _GL_WARN_ON_USE (endusershell
, "endusershell is unportable - "
1087 "use gnulib module getusershell for portability");
1092 #if @GNULIB_GROUP_MEMBER@
1093 /* Determine whether group id is in calling user's group list. */
1094 # if !@HAVE_GROUP_MEMBER@
1095 _GL_FUNCDECL_SYS (group_member
, int, (gid_t gid
));
1097 _GL_CXXALIAS_SYS (group_member
, int, (gid_t gid
));
1098 _GL_CXXALIASWARN (group_member
);
1099 #elif defined GNULIB_POSIXCHECK
1100 # undef group_member
1101 # if HAVE_RAW_DECL_GROUP_MEMBER
1102 _GL_WARN_ON_USE (group_member
, "group_member is unportable - "
1103 "use gnulib module group-member for portability");
1109 # if @REPLACE_ISATTY@
1110 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1112 # define isatty rpl_isatty
1114 _GL_FUNCDECL_RPL (isatty
, int, (int fd
));
1115 _GL_CXXALIAS_RPL (isatty
, int, (int fd
));
1117 _GL_CXXALIAS_SYS (isatty
, int, (int fd
));
1119 _GL_CXXALIASWARN (isatty
);
1120 #elif defined GNULIB_POSIXCHECK
1122 # if HAVE_RAW_DECL_ISATTY
1123 _GL_WARN_ON_USE (isatty
, "isatty has portability problems on native Windows - "
1124 "use gnulib module isatty for portability");
1130 /* Change the owner of FILE to UID (if UID is not -1) and the group of FILE
1131 to GID (if GID is not -1). Do not follow symbolic links.
1132 Return 0 if successful, otherwise -1 and errno set.
1133 See the POSIX:2008 specification
1134 <https://pubs.opengroup.org/onlinepubs/9699919799/functions/lchown.html>. */
1135 # if @REPLACE_LCHOWN@
1136 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1138 # define lchown rpl_lchown
1140 _GL_FUNCDECL_RPL (lchown
, int, (char const *file
, uid_t owner
, gid_t group
)
1141 _GL_ARG_NONNULL ((1)));
1142 _GL_CXXALIAS_RPL (lchown
, int, (char const *file
, uid_t owner
, gid_t group
));
1145 _GL_FUNCDECL_SYS (lchown
, int, (char const *file
, uid_t owner
, gid_t group
)
1146 _GL_ARG_NONNULL ((1)));
1148 _GL_CXXALIAS_SYS (lchown
, int, (char const *file
, uid_t owner
, gid_t group
));
1150 _GL_CXXALIASWARN (lchown
);
1151 #elif defined GNULIB_POSIXCHECK
1153 # if HAVE_RAW_DECL_LCHOWN
1154 _GL_WARN_ON_USE (lchown
, "lchown is unportable to pre-POSIX.1-2001 systems - "
1155 "use gnulib module lchown for portability");
1161 /* Create a new hard link for an existing file.
1162 Return 0 if successful, otherwise -1 and errno set.
1163 See POSIX:2008 specification
1164 <https://pubs.opengroup.org/onlinepubs/9699919799/functions/link.html>. */
1166 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1167 # define link rpl_link
1169 _GL_FUNCDECL_RPL (link
, int, (const char *path1
, const char *path2
)
1170 _GL_ARG_NONNULL ((1, 2)));
1171 _GL_CXXALIAS_RPL (link
, int, (const char *path1
, const char *path2
));
1174 _GL_FUNCDECL_SYS (link
, int, (const char *path1
, const char *path2
)
1175 _GL_ARG_NONNULL ((1, 2)));
1177 _GL_CXXALIAS_SYS (link
, int, (const char *path1
, const char *path2
));
1179 _GL_CXXALIASWARN (link
);
1180 #elif defined GNULIB_POSIXCHECK
1182 # if HAVE_RAW_DECL_LINK
1183 _GL_WARN_ON_USE (link
, "link is unportable - "
1184 "use gnulib module link for portability");
1190 /* Create a new hard link for an existing file, relative to two
1191 directories. FLAG controls whether symlinks are followed.
1192 Return 0 if successful, otherwise -1 and errno set. */
1193 # if @REPLACE_LINKAT@
1194 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1196 # define linkat rpl_linkat
1198 _GL_FUNCDECL_RPL (linkat
, int,
1199 (int fd1
, const char *path1
, int fd2
, const char *path2
,
1201 _GL_ARG_NONNULL ((2, 4)));
1202 _GL_CXXALIAS_RPL (linkat
, int,
1203 (int fd1
, const char *path1
, int fd2
, const char *path2
,
1207 _GL_FUNCDECL_SYS (linkat
, int,
1208 (int fd1
, const char *path1
, int fd2
, const char *path2
,
1210 _GL_ARG_NONNULL ((2, 4)));
1212 _GL_CXXALIAS_SYS (linkat
, int,
1213 (int fd1
, const char *path1
, int fd2
, const char *path2
,
1216 _GL_CXXALIASWARN (linkat
);
1217 #elif defined GNULIB_POSIXCHECK
1219 # if HAVE_RAW_DECL_LINKAT
1220 _GL_WARN_ON_USE (linkat
, "linkat is unportable - "
1221 "use gnulib module linkat for portability");
1227 /* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END.
1228 Return the new offset if successful, otherwise -1 and errno set.
1229 See the POSIX:2008 specification
1230 <https://pubs.opengroup.org/onlinepubs/9699919799/functions/lseek.html>. */
1231 # if @REPLACE_LSEEK@
1232 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1233 # define lseek rpl_lseek
1235 _GL_FUNCDECL_RPL (lseek
, off_t
, (int fd
, off_t offset
, int whence
));
1236 _GL_CXXALIAS_RPL (lseek
, off_t
, (int fd
, off_t offset
, int whence
));
1238 _GL_CXXALIAS_SYS (lseek
, off_t
, (int fd
, off_t offset
, int whence
));
1240 _GL_CXXALIASWARN (lseek
);
1241 #elif defined GNULIB_POSIXCHECK
1243 # if HAVE_RAW_DECL_LSEEK
1244 _GL_WARN_ON_USE (lseek
, "lseek does not fail with ESPIPE on pipes on some "
1245 "systems - use gnulib module lseek for portability");
1251 /* Create a pipe, defaulting to O_BINARY mode.
1252 Store the read-end as fd[0] and the write-end as fd[1].
1253 Return 0 upon success, or -1 with errno set upon failure. */
1255 _GL_FUNCDECL_SYS (pipe
, int, (int fd
[2]) _GL_ARG_NONNULL ((1)));
1257 _GL_CXXALIAS_SYS (pipe
, int, (int fd
[2]));
1258 _GL_CXXALIASWARN (pipe
);
1259 #elif defined GNULIB_POSIXCHECK
1261 # if HAVE_RAW_DECL_PIPE
1262 _GL_WARN_ON_USE (pipe
, "pipe is unportable - "
1263 "use gnulib module pipe-posix for portability");
1269 /* Create a pipe, applying the given flags when opening the read-end of the
1270 pipe and the write-end of the pipe.
1271 The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>)
1272 and O_TEXT, O_BINARY (defined in "binary-io.h").
1273 Store the read-end as fd[0] and the write-end as fd[1].
1274 Return 0 upon success, or -1 with errno set upon failure.
1275 See also the Linux man page at
1276 <https://www.kernel.org/doc/man-pages/online/pages/man2/pipe2.2.html>. */
1278 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1279 # define pipe2 rpl_pipe2
1281 _GL_FUNCDECL_RPL (pipe2
, int, (int fd
[2], int flags
) _GL_ARG_NONNULL ((1)));
1282 _GL_CXXALIAS_RPL (pipe2
, int, (int fd
[2], int flags
));
1284 _GL_FUNCDECL_SYS (pipe2
, int, (int fd
[2], int flags
) _GL_ARG_NONNULL ((1)));
1285 _GL_CXXALIAS_SYS (pipe2
, int, (int fd
[2], int flags
));
1287 _GL_CXXALIASWARN (pipe2
);
1288 #elif defined GNULIB_POSIXCHECK
1290 # if HAVE_RAW_DECL_PIPE2
1291 _GL_WARN_ON_USE (pipe2
, "pipe2 is unportable - "
1292 "use gnulib module pipe2 for portability");
1298 /* Read at most BUFSIZE bytes from FD into BUF, starting at OFFSET.
1299 Return the number of bytes placed into BUF if successful, otherwise
1300 set errno and return -1. 0 indicates EOF.
1301 See the POSIX:2008 specification
1302 <https://pubs.opengroup.org/onlinepubs/9699919799/functions/pread.html>. */
1303 # if @REPLACE_PREAD@
1304 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1306 # define pread rpl_pread
1308 _GL_FUNCDECL_RPL (pread
, ssize_t
,
1309 (int fd
, void *buf
, size_t bufsize
, off_t offset
)
1310 _GL_ARG_NONNULL ((2)));
1311 _GL_CXXALIAS_RPL (pread
, ssize_t
,
1312 (int fd
, void *buf
, size_t bufsize
, off_t offset
));
1315 _GL_FUNCDECL_SYS (pread
, ssize_t
,
1316 (int fd
, void *buf
, size_t bufsize
, off_t offset
)
1317 _GL_ARG_NONNULL ((2)));
1319 _GL_CXXALIAS_SYS (pread
, ssize_t
,
1320 (int fd
, void *buf
, size_t bufsize
, off_t offset
));
1322 _GL_CXXALIASWARN (pread
);
1323 #elif defined GNULIB_POSIXCHECK
1325 # if HAVE_RAW_DECL_PREAD
1326 _GL_WARN_ON_USE (pread
, "pread is unportable - "
1327 "use gnulib module pread for portability");
1333 /* Write at most BUFSIZE bytes from BUF into FD, starting at OFFSET.
1334 Return the number of bytes written if successful, otherwise
1335 set errno and return -1. 0 indicates nothing written. See the
1336 POSIX:2008 specification
1337 <https://pubs.opengroup.org/onlinepubs/9699919799/functions/pwrite.html>. */
1338 # if @REPLACE_PWRITE@
1339 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1341 # define pwrite rpl_pwrite
1343 _GL_FUNCDECL_RPL (pwrite
, ssize_t
,
1344 (int fd
, const void *buf
, size_t bufsize
, off_t offset
)
1345 _GL_ARG_NONNULL ((2)));
1346 _GL_CXXALIAS_RPL (pwrite
, ssize_t
,
1347 (int fd
, const void *buf
, size_t bufsize
, off_t offset
));
1350 _GL_FUNCDECL_SYS (pwrite
, ssize_t
,
1351 (int fd
, const void *buf
, size_t bufsize
, off_t offset
)
1352 _GL_ARG_NONNULL ((2)));
1354 _GL_CXXALIAS_SYS (pwrite
, ssize_t
,
1355 (int fd
, const void *buf
, size_t bufsize
, off_t offset
));
1357 _GL_CXXALIASWARN (pwrite
);
1358 #elif defined GNULIB_POSIXCHECK
1360 # if HAVE_RAW_DECL_PWRITE
1361 _GL_WARN_ON_USE (pwrite
, "pwrite is unportable - "
1362 "use gnulib module pwrite for portability");
1368 /* Read up to COUNT bytes from file descriptor FD into the buffer starting
1369 at BUF. See the POSIX:2008 specification
1370 <https://pubs.opengroup.org/onlinepubs/9699919799/functions/read.html>. */
1372 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1374 # define read rpl_read
1376 _GL_FUNCDECL_RPL (read
, ssize_t
, (int fd
, void *buf
, size_t count
)
1377 _GL_ARG_NONNULL ((2)));
1378 _GL_CXXALIAS_RPL (read
, ssize_t
, (int fd
, void *buf
, size_t count
));
1380 /* Need to cast, because on mingw, the third parameter is
1382 and the return type is 'int'. */
1383 _GL_CXXALIAS_SYS_CAST (read
, ssize_t
, (int fd
, void *buf
, size_t count
));
1385 _GL_CXXALIASWARN (read
);
1389 #if @GNULIB_READLINK@
1390 /* Read the contents of the symbolic link FILE and place the first BUFSIZE
1391 bytes of it into BUF. Return the number of bytes placed into BUF if
1392 successful, otherwise -1 and errno set.
1393 See the POSIX:2008 specification
1394 <https://pubs.opengroup.org/onlinepubs/9699919799/functions/readlink.html>. */
1395 # if @REPLACE_READLINK@
1396 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1397 # define readlink rpl_readlink
1399 _GL_FUNCDECL_RPL (readlink
, ssize_t
,
1400 (const char *restrict file
,
1401 char *restrict buf
, size_t bufsize
)
1402 _GL_ARG_NONNULL ((1, 2)));
1403 _GL_CXXALIAS_RPL (readlink
, ssize_t
,
1404 (const char *restrict file
,
1405 char *restrict buf
, size_t bufsize
));
1407 # if !@HAVE_READLINK@
1408 _GL_FUNCDECL_SYS (readlink
, ssize_t
,
1409 (const char *restrict file
,
1410 char *restrict buf
, size_t bufsize
)
1411 _GL_ARG_NONNULL ((1, 2)));
1413 _GL_CXXALIAS_SYS (readlink
, ssize_t
,
1414 (const char *restrict file
,
1415 char *restrict buf
, size_t bufsize
));
1417 _GL_CXXALIASWARN (readlink
);
1418 #elif defined GNULIB_POSIXCHECK
1420 # if HAVE_RAW_DECL_READLINK
1421 _GL_WARN_ON_USE (readlink
, "readlink is unportable - "
1422 "use gnulib module readlink for portability");
1427 #if @GNULIB_READLINKAT@
1428 # if @REPLACE_READLINKAT@
1429 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1430 # define readlinkat rpl_readlinkat
1432 _GL_FUNCDECL_RPL (readlinkat
, ssize_t
,
1433 (int fd
, char const *restrict file
,
1434 char *restrict buf
, size_t len
)
1435 _GL_ARG_NONNULL ((2, 3)));
1436 _GL_CXXALIAS_RPL (readlinkat
, ssize_t
,
1437 (int fd
, char const *restrict file
,
1438 char *restrict buf
, size_t len
));
1440 # if !@HAVE_READLINKAT@
1441 _GL_FUNCDECL_SYS (readlinkat
, ssize_t
,
1442 (int fd
, char const *restrict file
,
1443 char *restrict buf
, size_t len
)
1444 _GL_ARG_NONNULL ((2, 3)));
1446 _GL_CXXALIAS_SYS (readlinkat
, ssize_t
,
1447 (int fd
, char const *restrict file
,
1448 char *restrict buf
, size_t len
));
1450 _GL_CXXALIASWARN (readlinkat
);
1451 #elif defined GNULIB_POSIXCHECK
1453 # if HAVE_RAW_DECL_READLINKAT
1454 _GL_WARN_ON_USE (readlinkat
, "readlinkat is not portable - "
1455 "use gnulib module readlinkat for portability");
1461 /* Remove the directory DIR. */
1462 # if @REPLACE_RMDIR@
1463 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1464 # define rmdir rpl_rmdir
1466 _GL_FUNCDECL_RPL (rmdir
, int, (char const *name
) _GL_ARG_NONNULL ((1)));
1467 _GL_CXXALIAS_RPL (rmdir
, int, (char const *name
));
1469 _GL_CXXALIAS_SYS (rmdir
, int, (char const *name
));
1471 _GL_CXXALIASWARN (rmdir
);
1472 #elif defined GNULIB_POSIXCHECK
1474 # if HAVE_RAW_DECL_RMDIR
1475 _GL_WARN_ON_USE (rmdir
, "rmdir is unportable - "
1476 "use gnulib module rmdir for portability");
1481 #if @GNULIB_SETHOSTNAME@
1482 /* Set the host name of the machine.
1483 The host name may or may not be fully qualified.
1485 Put LEN bytes of NAME into the host name.
1486 Return 0 if successful, otherwise, set errno and return -1.
1488 Platforms with no ability to set the hostname return -1 and set
1490 # if !@HAVE_SETHOSTNAME@ || !@HAVE_DECL_SETHOSTNAME@
1491 _GL_FUNCDECL_SYS (sethostname
, int, (const char *name
, size_t len
)
1492 _GL_ARG_NONNULL ((1)));
1494 /* Need to cast, because on Solaris 11 2011-10, Mac OS X 10.5, IRIX 6.5
1495 and FreeBSD 6.4 the second parameter is int. On Solaris 11
1496 2011-10, the first parameter is not const. */
1497 _GL_CXXALIAS_SYS_CAST (sethostname
, int, (const char *name
, size_t len
));
1498 _GL_CXXALIASWARN (sethostname
);
1499 #elif defined GNULIB_POSIXCHECK
1501 # if HAVE_RAW_DECL_SETHOSTNAME
1502 _GL_WARN_ON_USE (sethostname
, "sethostname is unportable - "
1503 "use gnulib module sethostname for portability");
1509 /* Pause the execution of the current thread for N seconds.
1510 Returns the number of seconds left to sleep.
1511 See the POSIX:2008 specification
1512 <https://pubs.opengroup.org/onlinepubs/9699919799/functions/sleep.html>. */
1513 # if @REPLACE_SLEEP@
1514 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1516 # define sleep rpl_sleep
1518 _GL_FUNCDECL_RPL (sleep
, unsigned int, (unsigned int n
));
1519 _GL_CXXALIAS_RPL (sleep
, unsigned int, (unsigned int n
));
1522 _GL_FUNCDECL_SYS (sleep
, unsigned int, (unsigned int n
));
1524 _GL_CXXALIAS_SYS (sleep
, unsigned int, (unsigned int n
));
1526 _GL_CXXALIASWARN (sleep
);
1527 #elif defined GNULIB_POSIXCHECK
1529 # if HAVE_RAW_DECL_SLEEP
1530 _GL_WARN_ON_USE (sleep
, "sleep is unportable - "
1531 "use gnulib module sleep for portability");
1536 #if @GNULIB_SYMLINK@
1537 # if @REPLACE_SYMLINK@
1538 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1540 # define symlink rpl_symlink
1542 _GL_FUNCDECL_RPL (symlink
, int, (char const *contents
, char const *file
)
1543 _GL_ARG_NONNULL ((1, 2)));
1544 _GL_CXXALIAS_RPL (symlink
, int, (char const *contents
, char const *file
));
1546 # if !@HAVE_SYMLINK@
1547 _GL_FUNCDECL_SYS (symlink
, int, (char const *contents
, char const *file
)
1548 _GL_ARG_NONNULL ((1, 2)));
1550 _GL_CXXALIAS_SYS (symlink
, int, (char const *contents
, char const *file
));
1552 _GL_CXXALIASWARN (symlink
);
1553 #elif defined GNULIB_POSIXCHECK
1555 # if HAVE_RAW_DECL_SYMLINK
1556 _GL_WARN_ON_USE (symlink
, "symlink is not portable - "
1557 "use gnulib module symlink for portability");
1562 #if @GNULIB_SYMLINKAT@
1563 # if @REPLACE_SYMLINKAT@
1564 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1566 # define symlinkat rpl_symlinkat
1568 _GL_FUNCDECL_RPL (symlinkat
, int,
1569 (char const *contents
, int fd
, char const *file
)
1570 _GL_ARG_NONNULL ((1, 3)));
1571 _GL_CXXALIAS_RPL (symlinkat
, int,
1572 (char const *contents
, int fd
, char const *file
));
1574 # if !@HAVE_SYMLINKAT@
1575 _GL_FUNCDECL_SYS (symlinkat
, int,
1576 (char const *contents
, int fd
, char const *file
)
1577 _GL_ARG_NONNULL ((1, 3)));
1579 _GL_CXXALIAS_SYS (symlinkat
, int,
1580 (char const *contents
, int fd
, char const *file
));
1582 _GL_CXXALIASWARN (symlinkat
);
1583 #elif defined GNULIB_POSIXCHECK
1585 # if HAVE_RAW_DECL_SYMLINKAT
1586 _GL_WARN_ON_USE (symlinkat
, "symlinkat is not portable - "
1587 "use gnulib module symlinkat for portability");
1592 #if @GNULIB_TRUNCATE@
1593 /* Change the size of the file designated by FILENAME to become equal to LENGTH.
1594 Return 0 if successful, otherwise -1 and errno set.
1595 See the POSIX:2008 specification
1596 <https://pubs.opengroup.org/onlinepubs/9699919799/functions/truncate.html>. */
1597 # if @REPLACE_TRUNCATE@
1598 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1600 # define truncate rpl_truncate
1602 _GL_FUNCDECL_RPL (truncate
, int, (const char *filename
, off_t length
)
1603 _GL_ARG_NONNULL ((1)));
1604 _GL_CXXALIAS_RPL (truncate
, int, (const char *filename
, off_t length
));
1606 # if !@HAVE_DECL_TRUNCATE@
1607 _GL_FUNCDECL_SYS (truncate
, int, (const char *filename
, off_t length
)
1608 _GL_ARG_NONNULL ((1)));
1610 _GL_CXXALIAS_SYS (truncate
, int, (const char *filename
, off_t length
));
1612 _GL_CXXALIASWARN (truncate
);
1613 #elif defined GNULIB_POSIXCHECK
1615 # if HAVE_RAW_DECL_TRUNCATE
1616 _GL_WARN_ON_USE (truncate
, "truncate is unportable - "
1617 "use gnulib module truncate for portability");
1622 #if @GNULIB_TTYNAME_R@
1623 /* Store at most BUFLEN characters of the pathname of the terminal FD is
1624 open on in BUF. Return 0 on success, otherwise an error number. */
1625 # if @REPLACE_TTYNAME_R@
1626 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1628 # define ttyname_r rpl_ttyname_r
1630 _GL_FUNCDECL_RPL (ttyname_r
, int,
1631 (int fd
, char *buf
, size_t buflen
) _GL_ARG_NONNULL ((2)));
1632 _GL_CXXALIAS_RPL (ttyname_r
, int,
1633 (int fd
, char *buf
, size_t buflen
));
1635 # if !@HAVE_DECL_TTYNAME_R@
1636 _GL_FUNCDECL_SYS (ttyname_r
, int,
1637 (int fd
, char *buf
, size_t buflen
) _GL_ARG_NONNULL ((2)));
1639 _GL_CXXALIAS_SYS (ttyname_r
, int,
1640 (int fd
, char *buf
, size_t buflen
));
1642 _GL_CXXALIASWARN (ttyname_r
);
1643 #elif defined GNULIB_POSIXCHECK
1645 # if HAVE_RAW_DECL_TTYNAME_R
1646 _GL_WARN_ON_USE (ttyname_r
, "ttyname_r is not portable - "
1647 "use gnulib module ttyname_r for portability");
1653 # if @REPLACE_UNLINK@
1654 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1656 # define unlink rpl_unlink
1658 _GL_FUNCDECL_RPL (unlink
, int, (char const *file
) _GL_ARG_NONNULL ((1)));
1659 _GL_CXXALIAS_RPL (unlink
, int, (char const *file
));
1661 _GL_CXXALIAS_SYS (unlink
, int, (char const *file
));
1663 _GL_CXXALIASWARN (unlink
);
1664 #elif defined GNULIB_POSIXCHECK
1666 # if HAVE_RAW_DECL_UNLINK
1667 _GL_WARN_ON_USE (unlink
, "unlink is not portable - "
1668 "use gnulib module unlink for portability");
1673 #if @GNULIB_UNLINKAT@
1674 # if @REPLACE_UNLINKAT@
1675 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1677 # define unlinkat rpl_unlinkat
1679 _GL_FUNCDECL_RPL (unlinkat
, int, (int fd
, char const *file
, int flag
)
1680 _GL_ARG_NONNULL ((2)));
1681 _GL_CXXALIAS_RPL (unlinkat
, int, (int fd
, char const *file
, int flag
));
1683 # if !@HAVE_UNLINKAT@
1684 _GL_FUNCDECL_SYS (unlinkat
, int, (int fd
, char const *file
, int flag
)
1685 _GL_ARG_NONNULL ((2)));
1687 _GL_CXXALIAS_SYS (unlinkat
, int, (int fd
, char const *file
, int flag
));
1689 _GL_CXXALIASWARN (unlinkat
);
1690 #elif defined GNULIB_POSIXCHECK
1692 # if HAVE_RAW_DECL_UNLINKAT
1693 _GL_WARN_ON_USE (unlinkat
, "unlinkat is not portable - "
1694 "use gnulib module openat for portability");
1700 /* Pause the execution of the current thread for N microseconds.
1701 Returns 0 on completion, or -1 on range error.
1702 See the POSIX:2001 specification
1703 <https://pubs.opengroup.org/onlinepubs/009695399/functions/usleep.html>. */
1704 # if @REPLACE_USLEEP@
1705 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1707 # define usleep rpl_usleep
1709 _GL_FUNCDECL_RPL (usleep
, int, (useconds_t n
));
1710 _GL_CXXALIAS_RPL (usleep
, int, (useconds_t n
));
1713 _GL_FUNCDECL_SYS (usleep
, int, (useconds_t n
));
1715 /* Need to cast, because on Haiku, the first parameter is
1717 _GL_CXXALIAS_SYS_CAST (usleep
, int, (useconds_t n
));
1719 _GL_CXXALIASWARN (usleep
);
1720 #elif defined GNULIB_POSIXCHECK
1722 # if HAVE_RAW_DECL_USLEEP
1723 _GL_WARN_ON_USE (usleep
, "usleep is unportable - "
1724 "use gnulib module usleep for portability");
1730 /* Write up to COUNT bytes starting at BUF to file descriptor FD.
1731 See the POSIX:2008 specification
1732 <https://pubs.opengroup.org/onlinepubs/9699919799/functions/write.html>. */
1733 # if @REPLACE_WRITE@
1734 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
1736 # define write rpl_write
1738 _GL_FUNCDECL_RPL (write
, ssize_t
, (int fd
, const void *buf
, size_t count
)
1739 _GL_ARG_NONNULL ((2)));
1740 _GL_CXXALIAS_RPL (write
, ssize_t
, (int fd
, const void *buf
, size_t count
));
1742 /* Need to cast, because on mingw, the third parameter is
1744 and the return type is 'int'. */
1745 _GL_CXXALIAS_SYS_CAST (write
, ssize_t
, (int fd
, const void *buf
, size_t count
));
1747 _GL_CXXALIASWARN (write
);
1750 _GL_INLINE_HEADER_END
1752 #endif /* _@GUARD_PREFIX@_UNISTD_H */
1753 #endif /* _GL_INCLUDING_UNISTD_H */
1754 #endif /* _@GUARD_PREFIX@_UNISTD_H */