2.3.4-16
[kopensolaris-gnu/glibc.git] / posix / bits / unistd.h
1 /* Checking macros for unistd functions.
2    Copyright (C) 2005 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, write to the Free
17    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18    02111-1307 USA.  */
19
20 #ifndef _UNISTD_H
21 # error "Never include <bits/unistd.h> directly; use <unistd.h> instead."
22 #endif
23
24 extern void __chk_fail (void) __attribute__((__noreturn__));
25 extern ssize_t __REDIRECT (__read_alias, (int __fd, void *__buf,
26                                           size_t __nbytes), read) __wur;
27
28 extern __always_inline __wur ssize_t
29 read (int __fd, void *__buf, size_t __nbytes)
30 {
31   if (__bos0 (__buf) != (size_t) -1 && __nbytes > __bos0 (__buf))
32     __chk_fail ();
33   return __read_alias (__fd, __buf, __nbytes);
34 }
35
36 #ifdef __USE_UNIX98
37 extern ssize_t __REDIRECT (__pread_alias,
38                            (int __fd, void *__buf, size_t __nbytes,
39                             __off_t __offset), pread) __wur;
40 extern ssize_t __REDIRECT (__pread64_alias,
41                            (int __fd, void *__buf, size_t __nbytes,
42                             __off64_t __offset), pread64) __wur;
43
44 # ifndef __USE_FILE_OFFSET64
45 extern __always_inline __wur ssize_t
46 pread (int __fd, void *__buf, size_t __nbytes, __off_t __offset)
47 {
48   if (__bos0 (__buf) != (size_t) -1 && __nbytes > __bos0 (__buf))
49     __chk_fail ();
50   return __pread_alias (__fd, __buf, __nbytes, __offset);
51 }
52 # else
53 extern __always_inline __wur ssize_t
54 pread (int __fd, void *__buf, size_t __nbytes, __off64_t __offset)
55 {
56   if (__bos0 (__buf) != (size_t) -1 && __nbytes > __bos0 (__buf))
57     __chk_fail ();
58   return __pread64_alias (__fd, __buf, __nbytes, __offset);
59 }
60 # endif
61
62 # ifdef __USE_LARGEFILE64
63 extern __always_inline __wur ssize_t
64 pread64 (int __fd, void *__buf, size_t __nbytes, __off64_t __offset)
65 {
66   if (__bos0 (__buf) != (size_t) -1 && __nbytes > __bos0 (__buf))
67     __chk_fail ();
68   return __pread64_alias (__fd, __buf, __nbytes, __offset);
69 }
70 # endif
71 #endif
72
73 #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K
74 extern int __REDIRECT_NTH (__readlink_alias,
75                            (__const char *__restrict __path,
76                             char *__restrict __buf, size_t __len), readlink)
77      __nonnull ((1, 2)) __wur;
78
79 extern __always_inline __nonnull ((1, 2)) __wur int
80 __NTH (readlink (__const char *__restrict __path, char *__restrict __buf,
81                  size_t __len))
82 {
83   if (__bos (__buf) != (size_t) -1 && __len > __bos (__buf))
84     __chk_fail ();
85   return __readlink_alias (__path, __buf, __len);
86 }
87 #endif
88
89 extern char *__REDIRECT_NTH (__getcwd_alias,
90                              (char *__buf, size_t __size), getcwd) __wur;
91
92 extern __always_inline __wur char *
93 __NTH (getcwd (char *__buf, size_t __size))
94 {
95   if (__bos (__buf) != (size_t) -1 && __size > __bos (__buf))
96     __chk_fail ();
97   return __getcwd_alias (__buf, __size);
98 }