xref: /utopia/UTPA2-700.0.x/projects/tools/lint/mips-linux-gnu_include/bits/fcntl2.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi /* Checking macros for fcntl functions.
2*53ee8cc1Swenshuai.xi    Copyright (C) 2007 Free Software Foundation, Inc.
3*53ee8cc1Swenshuai.xi    This file is part of the GNU C Library.
4*53ee8cc1Swenshuai.xi 
5*53ee8cc1Swenshuai.xi    The GNU C Library is free software; you can redistribute it and/or
6*53ee8cc1Swenshuai.xi    modify it under the terms of the GNU Lesser General Public
7*53ee8cc1Swenshuai.xi    License as published by the Free Software Foundation; either
8*53ee8cc1Swenshuai.xi    version 2.1 of the License, or (at your option) any later version.
9*53ee8cc1Swenshuai.xi 
10*53ee8cc1Swenshuai.xi    The GNU C Library is distributed in the hope that it will be useful,
11*53ee8cc1Swenshuai.xi    but WITHOUT ANY WARRANTY; without even the implied warranty of
12*53ee8cc1Swenshuai.xi    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13*53ee8cc1Swenshuai.xi    Lesser General Public License for more details.
14*53ee8cc1Swenshuai.xi 
15*53ee8cc1Swenshuai.xi    You should have received a copy of the GNU Lesser General Public
16*53ee8cc1Swenshuai.xi    License along with the GNU C Library; if not, write to the Free
17*53ee8cc1Swenshuai.xi    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18*53ee8cc1Swenshuai.xi    02111-1307 USA.  */
19*53ee8cc1Swenshuai.xi 
20*53ee8cc1Swenshuai.xi #ifndef	_FCNTL_H
21*53ee8cc1Swenshuai.xi # error "Never include <bits/fcntl2.h> directly; use <fcntl.h> instead."
22*53ee8cc1Swenshuai.xi #endif
23*53ee8cc1Swenshuai.xi 
24*53ee8cc1Swenshuai.xi /* Check that calls to open and openat with O_CREAT set have an
25*53ee8cc1Swenshuai.xi    appropriate third/fourth parameter.  */
26*53ee8cc1Swenshuai.xi #ifndef __USE_FILE_OFFSET64
27*53ee8cc1Swenshuai.xi extern int __open_2 (__const char *__path, int __oflag) __nonnull ((1));
28*53ee8cc1Swenshuai.xi extern int __REDIRECT (__open_alias, (__const char *__path, int __oflag, ...),
29*53ee8cc1Swenshuai.xi 		       open) __nonnull ((1));
30*53ee8cc1Swenshuai.xi #else
31*53ee8cc1Swenshuai.xi extern int __REDIRECT (__open_2, (__const char *__path, int __oflag),
32*53ee8cc1Swenshuai.xi 		       __open64_2) __nonnull ((1));
33*53ee8cc1Swenshuai.xi extern int __REDIRECT (__open_alias, (__const char *__path, int __oflag, ...),
34*53ee8cc1Swenshuai.xi 		       open64) __nonnull ((1));
35*53ee8cc1Swenshuai.xi #endif
36*53ee8cc1Swenshuai.xi __errordecl (__open_too_many_args,
37*53ee8cc1Swenshuai.xi 	     "open can be called either with 2 or 3 arguments, not more");
38*53ee8cc1Swenshuai.xi __errordecl (__open_missing_mode,
39*53ee8cc1Swenshuai.xi 	     "open with O_CREAT in second argument needs 3 arguments");
40*53ee8cc1Swenshuai.xi 
41*53ee8cc1Swenshuai.xi __extern_always_inline int
open(__const char * __path,int __oflag,...)42*53ee8cc1Swenshuai.xi open (__const char *__path, int __oflag, ...)
43*53ee8cc1Swenshuai.xi {
44*53ee8cc1Swenshuai.xi   if (__va_arg_pack_len () > 1)
45*53ee8cc1Swenshuai.xi     __open_too_many_args ();
46*53ee8cc1Swenshuai.xi 
47*53ee8cc1Swenshuai.xi   if (__builtin_constant_p (__oflag))
48*53ee8cc1Swenshuai.xi     {
49*53ee8cc1Swenshuai.xi       if ((__oflag & O_CREAT) != 0 && __va_arg_pack_len () < 1)
50*53ee8cc1Swenshuai.xi 	{
51*53ee8cc1Swenshuai.xi 	  __open_missing_mode ();
52*53ee8cc1Swenshuai.xi 	  return __open_2 (__path, __oflag);
53*53ee8cc1Swenshuai.xi 	}
54*53ee8cc1Swenshuai.xi       return __open_alias (__path, __oflag, __va_arg_pack ());
55*53ee8cc1Swenshuai.xi     }
56*53ee8cc1Swenshuai.xi 
57*53ee8cc1Swenshuai.xi   if (__va_arg_pack_len () < 1)
58*53ee8cc1Swenshuai.xi     return __open_2 (__path, __oflag);
59*53ee8cc1Swenshuai.xi 
60*53ee8cc1Swenshuai.xi   return __open_alias (__path, __oflag, __va_arg_pack ());
61*53ee8cc1Swenshuai.xi }
62*53ee8cc1Swenshuai.xi 
63*53ee8cc1Swenshuai.xi 
64*53ee8cc1Swenshuai.xi #ifdef __USE_LARGEFILE64
65*53ee8cc1Swenshuai.xi extern int __open64_2 (__const char *__path, int __oflag) __nonnull ((1));
66*53ee8cc1Swenshuai.xi extern int __REDIRECT (__open64_alias, (__const char *__path, int __oflag,
67*53ee8cc1Swenshuai.xi 					...), open64) __nonnull ((1));
68*53ee8cc1Swenshuai.xi __errordecl (__open64_too_many_args,
69*53ee8cc1Swenshuai.xi 	     "open64 can be called either with 2 or 3 arguments, not more");
70*53ee8cc1Swenshuai.xi __errordecl (__open64_missing_mode,
71*53ee8cc1Swenshuai.xi 	     "open64 with O_CREAT in second argument needs 3 arguments");
72*53ee8cc1Swenshuai.xi 
73*53ee8cc1Swenshuai.xi __extern_always_inline int
open64(__const char * __path,int __oflag,...)74*53ee8cc1Swenshuai.xi open64 (__const char *__path, int __oflag, ...)
75*53ee8cc1Swenshuai.xi {
76*53ee8cc1Swenshuai.xi   if (__va_arg_pack_len () > 1)
77*53ee8cc1Swenshuai.xi     __open64_too_many_args ();
78*53ee8cc1Swenshuai.xi 
79*53ee8cc1Swenshuai.xi   if (__builtin_constant_p (__oflag))
80*53ee8cc1Swenshuai.xi     {
81*53ee8cc1Swenshuai.xi       if ((__oflag & O_CREAT) != 0 && __va_arg_pack_len () < 1)
82*53ee8cc1Swenshuai.xi 	{
83*53ee8cc1Swenshuai.xi 	  __open64_missing_mode ();
84*53ee8cc1Swenshuai.xi 	  return __open64_2 (__path, __oflag);
85*53ee8cc1Swenshuai.xi 	}
86*53ee8cc1Swenshuai.xi       return __open64_alias (__path, __oflag, __va_arg_pack ());
87*53ee8cc1Swenshuai.xi     }
88*53ee8cc1Swenshuai.xi 
89*53ee8cc1Swenshuai.xi   if (__va_arg_pack_len () < 1)
90*53ee8cc1Swenshuai.xi     return __open64_2 (__path, __oflag);
91*53ee8cc1Swenshuai.xi 
92*53ee8cc1Swenshuai.xi   return __open64_alias (__path, __oflag, __va_arg_pack ());
93*53ee8cc1Swenshuai.xi }
94*53ee8cc1Swenshuai.xi #endif
95*53ee8cc1Swenshuai.xi 
96*53ee8cc1Swenshuai.xi 
97*53ee8cc1Swenshuai.xi #ifdef __USE_ATFILE
98*53ee8cc1Swenshuai.xi # ifndef __USE_FILE_OFFSET64
99*53ee8cc1Swenshuai.xi extern int __openat_2 (int __fd, __const char *__path, int __oflag)
100*53ee8cc1Swenshuai.xi      __nonnull ((2));
101*53ee8cc1Swenshuai.xi extern int __REDIRECT (__openat_alias, (int __fd, __const char *__path,
102*53ee8cc1Swenshuai.xi 					int __oflag, ...), openat)
103*53ee8cc1Swenshuai.xi      __nonnull ((2));
104*53ee8cc1Swenshuai.xi # else
105*53ee8cc1Swenshuai.xi extern int __REDIRECT (__openat_2, (int __fd, __const char *__path,
106*53ee8cc1Swenshuai.xi 				    int __oflag), __openat64_2)
107*53ee8cc1Swenshuai.xi      __nonnull ((2));
108*53ee8cc1Swenshuai.xi extern int __REDIRECT (__openat_alias, (int __fd, __const char *__path,
109*53ee8cc1Swenshuai.xi 					int __oflag, ...), openat64)
110*53ee8cc1Swenshuai.xi      __nonnull ((2));
111*53ee8cc1Swenshuai.xi # endif
112*53ee8cc1Swenshuai.xi __errordecl (__openat_too_many_args,
113*53ee8cc1Swenshuai.xi 	     "openat can be called either with 3 or 4 arguments, not more");
114*53ee8cc1Swenshuai.xi __errordecl (__openat_missing_mode,
115*53ee8cc1Swenshuai.xi 	     "openat with O_CREAT in third argument needs 4 arguments");
116*53ee8cc1Swenshuai.xi 
117*53ee8cc1Swenshuai.xi __extern_always_inline int
openat(int __fd,__const char * __path,int __oflag,...)118*53ee8cc1Swenshuai.xi openat (int __fd, __const char *__path, int __oflag, ...)
119*53ee8cc1Swenshuai.xi {
120*53ee8cc1Swenshuai.xi   if (__va_arg_pack_len () > 1)
121*53ee8cc1Swenshuai.xi     __openat_too_many_args ();
122*53ee8cc1Swenshuai.xi 
123*53ee8cc1Swenshuai.xi   if (__builtin_constant_p (__oflag))
124*53ee8cc1Swenshuai.xi     {
125*53ee8cc1Swenshuai.xi       if ((__oflag & O_CREAT) != 0 && __va_arg_pack_len () < 1)
126*53ee8cc1Swenshuai.xi 	{
127*53ee8cc1Swenshuai.xi 	  __openat_missing_mode ();
128*53ee8cc1Swenshuai.xi 	  return __openat_2 (__fd, __path, __oflag);
129*53ee8cc1Swenshuai.xi 	}
130*53ee8cc1Swenshuai.xi       return __openat_alias (__fd, __path, __oflag, __va_arg_pack ());
131*53ee8cc1Swenshuai.xi     }
132*53ee8cc1Swenshuai.xi 
133*53ee8cc1Swenshuai.xi   if (__va_arg_pack_len () < 1)
134*53ee8cc1Swenshuai.xi     return __openat_2 (__fd, __path, __oflag);
135*53ee8cc1Swenshuai.xi 
136*53ee8cc1Swenshuai.xi   return __openat_alias (__fd, __path, __oflag, __va_arg_pack ());
137*53ee8cc1Swenshuai.xi }
138*53ee8cc1Swenshuai.xi 
139*53ee8cc1Swenshuai.xi 
140*53ee8cc1Swenshuai.xi # ifdef __USE_LARGEFILE64
141*53ee8cc1Swenshuai.xi extern int __openat64_2 (int __fd, __const char *__path, int __oflag)
142*53ee8cc1Swenshuai.xi      __nonnull ((2));
143*53ee8cc1Swenshuai.xi extern int __REDIRECT (__openat64_alias, (int __fd, __const char *__path,
144*53ee8cc1Swenshuai.xi 					  int __oflag, ...), openat64)
145*53ee8cc1Swenshuai.xi      __nonnull ((2));
146*53ee8cc1Swenshuai.xi __errordecl (__openat64_too_many_args,
147*53ee8cc1Swenshuai.xi 	     "openat64 can be called either with 3 or 4 arguments, not more");
148*53ee8cc1Swenshuai.xi __errordecl (__openat64_missing_mode,
149*53ee8cc1Swenshuai.xi 	     "openat64 with O_CREAT in third argument needs 4 arguments");
150*53ee8cc1Swenshuai.xi 
151*53ee8cc1Swenshuai.xi __extern_always_inline int
openat64(int __fd,__const char * __path,int __oflag,...)152*53ee8cc1Swenshuai.xi openat64 (int __fd, __const char *__path, int __oflag, ...)
153*53ee8cc1Swenshuai.xi {
154*53ee8cc1Swenshuai.xi   if (__va_arg_pack_len () > 1)
155*53ee8cc1Swenshuai.xi     __openat64_too_many_args ();
156*53ee8cc1Swenshuai.xi 
157*53ee8cc1Swenshuai.xi   if (__builtin_constant_p (__oflag))
158*53ee8cc1Swenshuai.xi     {
159*53ee8cc1Swenshuai.xi       if ((__oflag & O_CREAT) != 0 && __va_arg_pack_len () < 1)
160*53ee8cc1Swenshuai.xi 	{
161*53ee8cc1Swenshuai.xi 	  __openat64_missing_mode ();
162*53ee8cc1Swenshuai.xi 	  return __openat64_2 (__fd, __path, __oflag);
163*53ee8cc1Swenshuai.xi 	}
164*53ee8cc1Swenshuai.xi       return __openat64_alias (__fd, __path, __oflag, __va_arg_pack ());
165*53ee8cc1Swenshuai.xi     }
166*53ee8cc1Swenshuai.xi 
167*53ee8cc1Swenshuai.xi   if (__va_arg_pack_len () < 1)
168*53ee8cc1Swenshuai.xi     return __openat64_2 (__fd, __path, __oflag);
169*53ee8cc1Swenshuai.xi 
170*53ee8cc1Swenshuai.xi   return __openat64_alias (__fd, __path, __oflag, __va_arg_pack ());
171*53ee8cc1Swenshuai.xi }
172*53ee8cc1Swenshuai.xi # endif
173*53ee8cc1Swenshuai.xi #endif
174