xrootd
XrdPosixLinkage.hh
Go to the documentation of this file.
1 #ifndef _XRDPOSIXLINKAGE_H_
2 #define _XRDPOSIXLINKAGE_H_
3 /******************************************************************************/
4 /* */
5 /* X r d P o s i x L i n k a g e . h h */
6 /* */
7 /* (c) 2005 by the Board of Trustees of the Leland Stanford, Jr., University */
8 /* All Rights Reserved */
9 /* Produced by Andrew Hanushevsky for Stanford University under contract */
10 /* DE-AC02-76-SFO0515 with the Department of Energy */
11 /* */
12 /* This file is part of the XRootD software suite. */
13 /* */
14 /* XRootD is free software: you can redistribute it and/or modify it under */
15 /* the terms of the GNU Lesser General Public License as published by the */
16 /* Free Software Foundation, either version 3 of the License, or (at your */
17 /* option) any later version. */
18 /* */
19 /* XRootD is distributed in the hope that it will be useful, but WITHOUT */
20 /* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
21 /* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
22 /* License for more details. */
23 /* */
24 /* You should have received a copy of the GNU Lesser General Public License */
25 /* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
26 /* COPYING (GPL license). If not, see <http://www.gnu.org/licenses/>. */
27 /* */
28 /* The copyright holder's institutional names and contributor's names may not */
29 /* be used to endorse or promote products derived from this software without */
30 /* specific prior written permission of the institution or contributor. */
31 /******************************************************************************/
32 
33 #include <sys/types.h>
34 #include <sys/stat.h>
35 #include <sys/statvfs.h>
36 #include <dirent.h>
37 #include <errno.h>
38 #include <fcntl.h>
39 #include <stdio.h>
40 #include <unistd.h>
41 
43 #include "XrdSys/XrdSysPlatform.hh"
44 
45 /******************************************************************************/
46 /* Posix Symbols vs Return Valus and Arguments */
47 /******************************************************************************/
48 
49 //#ifdef __linux__
50 //#define UNIX_PFX "__"
51 //#else
52 #define UNIX_PFX
53 //#endif
54 
55 #define Symb_Access UNIX_PFX "access"
56 #define Retv_Access int
57 #define Args_Access const char *path, int amode
58 
59 #define Symb_Acl UNIX_PFX "acl"
60 #define Retv_Acl int
61 #define Args_Acl const char *, int, int, void *
62 
63 #define Symb_Chdir UNIX_PFX "chdir"
64 #define Retv_Chdir int
65 #define Args_Chdir const char *path
66 
67 #define Symb_Close UNIX_PFX "close"
68 #define Retv_Close int
69 #define Args_Close int
70 
71 #define Symb_Closedir UNIX_PFX "closedir"
72 #define Retv_Closedir int
73 #define Args_Closedir DIR *
74 
75 #define Symb_Fclose UNIX_PFX "fclose"
76 #define Retv_Fclose int
77 #define Args_Fclose FILE *
78 
79 #define Symb_Fcntl UNIX_PFX "fcntl"
80 #define Retv_Fcntl int
81 #define Args_Fcntl int, int, ...
82 
83 #define Symb_Fcntl64 UNIX_PFX "fcntl64"
84 #define Retv_Fcntl64 int
85 #define Args_Fcntl64 int, int, ...
86 
87 #define Symb_Fdatasync UNIX_PFX "fdatasync"
88 #define Retv_Fdatasync int
89 #define Args_Fdatasync int
90 
91 #define Symb_Fflush UNIX_PFX "fflush"
92 #define Retv_Fflush int
93 #define Args_Fflush FILE *
94 
95 #define Symb_Fopen UNIX_PFX "fopen"
96 #define Retv_Fopen FILE *
97 #define Args_Fopen const char *, const char *
98 
99 #define Symb_Fopen64 UNIX_PFX "fopen64"
100 #define Retv_Fopen64 FILE *
101 #define Args_Fopen64 const char *, const char *
102 
103 #define Symb_Fread UNIX_PFX "fread"
104 #define Retv_Fread size_t
105 #define Args_Fread void *, size_t, size_t, FILE *
106 
107 #define Symb_Fseek UNIX_PFX "fseek"
108 #define Retv_Fseek int
109 #define Args_Fseek FILE *, long, int
110 
111 #define Symb_Fseeko UNIX_PFX "fseeko"
112 #define Retv_Fseeko int
113 #define Args_Fseeko FILE *, off_t, int
114 
115 #define Symb_Fseeko64 UNIX_PFX "fseeko64"
116 #define Retv_Fseeko64 int
117 #define Args_Fseeko64 FILE *, off64_t, int
118 
119 #ifdef __linux__
120 #define Symb_Fstat UNIX_PFX "__fxstat"
121 #define Retv_Fstat int
122 #define Args_Fstat int, int, struct stat *
123 #else
124 #define Symb_Fstat UNIX_PFX "fstat"
125 #define Retv_Fstat int
126 #define Args_Fstat int, struct stat *
127 #endif
128 
129 #ifdef __linux__
130 #define Symb_Fstat64 UNIX_PFX "__fxstat64"
131 #define Retv_Fstat64 int
132 #define Args_Fstat64 int, int, struct stat64 *
133 #else
134 #define Symb_Fstat64 UNIX_PFX "fstat64"
135 #define Retv_Fstat64 int
136 #define Args_Fstat64 int, struct stat64 *
137 #endif
138 
139 #define Symb_Fsync UNIX_PFX "fsync"
140 #define Retv_Fsync int
141 #define Args_Fsync int
142 
143 #define Symb_Ftell UNIX_PFX "ftell"
144 #define Retv_Ftell long
145 #define Args_Ftell FILE *
146 
147 #define Symb_Ftello UNIX_PFX "ftello"
148 #define Retv_Ftello off_t
149 #define Args_Ftello FILE *
150 
151 #define Symb_Ftello64 UNIX_PFX "ftello64"
152 #define Retv_Ftello64 off64_t
153 #define Args_Ftello64 FILE *
154 
155 #define Symb_Ftruncate UNIX_PFX "ftruncate"
156 #define Retv_Ftruncate int
157 #define Args_Ftruncate int, off_t
158 
159 #define Symb_Ftruncate64 UNIX_PFX "ftruncate64"
160 #define Retv_Ftruncate64 int
161 #define Args_Ftruncate64 int, off64_t
162 
163 #define Symb_Fwrite UNIX_PFX "fwrite"
164 #define Retv_Fwrite int
165 #define Args_Fwrite const void *, size_t, size_t, FILE *
166 
167 #define Symb_Fgetxattr UNIX_PFX "fgetxattr"
168 #define Retv_Fgetxattr ssize_t
169 #define Args_Fgetxattr int, const char *, const void *, size_t
170 
171 #define Symb_Getxattr UNIX_PFX "getxattr"
172 #define Retv_Getxattr ssize_t
173 #define Args_Getxattr const char *, const char *, const void *, size_t
174 
175 #define Symb_Lgetxattr UNIX_PFX "lgetxattr"
176 #define Retv_Lgetxattr ssize_t
177 #define Args_Lgetxattr const char *, const char *, const void *, size_t
178 
179 #define Symb_Lseek UNIX_PFX "lseek"
180 #define Retv_Lseek off_t
181 #define Args_Lseek int, off_t, int
182 
183 #define Symb_Lseek64 UNIX_PFX "lseek64"
184 #define Retv_Lseek64 off64_t
185 #define Args_Lseek64 int, off64_t, int
186 
187 #ifdef __linux__
188 #define Symb_Lstat UNIX_PFX "__lxstat"
189 #define Retv_Lstat int
190 #define Args_Lstat int, const char *, struct stat *
191 #else
192 #define Symb_Lstat UNIX_PFX "lstat"
193 #define Retv_Lstat int
194 #define Args_Lstat const char *, struct stat *
195 #endif
196 
197 #ifdef __linux__
198 #define Symb_Lstat64 UNIX_PFX "__lxstat64"
199 #define Retv_Lstat64 int
200 #define Args_Lstat64 int, const char *, struct stat64 *
201 #else
202 #define Symb_Lstat64 UNIX_PFX "lstat64"
203 #define Retv_Lstat64 int
204 #define Args_Lstat64 const char *, struct stat64 *
205 #endif
206 
207 #define Symb_Mkdir UNIX_PFX "mkdir"
208 #define Retv_Mkdir int
209 #define Args_Mkdir const char *, mode_t
210 
211 #define Symb_Open UNIX_PFX "open"
212 #define Retv_Open int
213 #define Args_Open const char *, int, ...
214 
215 #define Symb_Open64 UNIX_PFX "open64"
216 #define Retv_Open64 int
217 #define Args_Open64 const char *, int, ...
218 
219 #define Symb_Opendir UNIX_PFX "opendir"
220 #define Retv_Opendir DIR *
221 #define Args_Opendir const char *
222 
223 #define Symb_Pathconf UNIX_PFX "pathconf"
224 #define Retv_Pathconf long
225 #define Args_Pathconf const char *, int
226 
227 #define Symb_Pread UNIX_PFX "pread"
228 #define Retv_Pread ssize_t
229 #define Args_Pread int, void *, size_t, off_t
230 
231 #define Symb_Pread64 UNIX_PFX "pread64"
232 #define Retv_Pread64 ssize_t
233 #define Args_Pread64 int, void *, size_t, off64_t
234 
235 #define Symb_Pwrite UNIX_PFX "pwrite"
236 #define Retv_Pwrite ssize_t
237 #define Args_Pwrite int, const void *, size_t, off_t
238 
239 #define Symb_Pwrite64 UNIX_PFX "pwrite64"
240 #define Retv_Pwrite64 ssize_t
241 #define Args_Pwrite64 int, const void *, size_t, off64_t
242 
243 #define Symb_Read UNIX_PFX "read"
244 #define Retv_Read ssize_t
245 #define Args_Read int, void *, size_t
246 
247 #define Symb_Readv UNIX_PFX "readv"
248 #define Retv_Readv ssize_t
249 #define Args_Readv int, const struct iovec *, int
250 
251 #define Symb_Readdir UNIX_PFX "readdir"
252 #define Retv_Readdir struct dirent *
253 #define Args_Readdir DIR *
254 
255 #define Symb_Readdir64 UNIX_PFX "readdir64"
256 #define Retv_Readdir64 struct dirent64 *
257 #define Args_Readdir64 DIR *
258 
259 #define Symb_Readdir_r UNIX_PFX "readdir_r"
260 #define Retv_Readdir_r int
261 #define Args_Readdir_r DIR *, struct dirent *, struct dirent **
262 
263 #define Symb_Readdir64_r UNIX_PFX "readdir64_r"
264 #define Retv_Readdir64_r int
265 #define Args_Readdir64_r DIR *, struct dirent64 *, struct dirent64 **
266 
267 #define Symb_Rename UNIX_PFX "rename"
268 #define Retv_Rename int
269 #define Args_Rename const char *, const char *
270 
271 #define Symb_Rewinddir UNIX_PFX "rewinddir"
272 #define Retv_Rewinddir void
273 #define Args_Rewinddir DIR *
274 
275 #define Symb_Rmdir UNIX_PFX "rmdir"
276 #define Retv_Rmdir int
277 #define Args_Rmdir const char *
278 
279 #define Symb_Seekdir UNIX_PFX "seekdir"
280 #define Retv_Seekdir void
281 #define Args_Seekdir DIR *, long
282 
283 #ifdef __linux__
284 #define Symb_Stat UNIX_PFX "__xstat"
285 #define Retv_Stat int
286 #define Args_Stat int, const char *, struct stat *
287 #else
288 #define Symb_Stat UNIX_PFX "stat"
289 #define Retv_Stat int
290 #define Args_Stat const char *, struct stat *
291 #endif
292 
293 #ifdef __linux__
294 #define Symb_Stat64 UNIX_PFX "__xstat64"
295 #define Retv_Stat64 int
296 #define Args_Stat64 int, const char *, struct stat64 *
297 #else
298 #define Symb_Stat64 UNIX_PFX "stat64"
299 #define Retv_Stat64 int
300 #define Args_Stat64 const char *, struct stat64 *
301 #endif
302 
303 #define Symb_Statfs UNIX_PFX "statfs"
304 #define Retv_Statfs int
305 #define Args_Statfs const char *, struct statfs *
306 
307 #define Symb_Statfs64 UNIX_PFX "statfs64"
308 #define Retv_Statfs64 int
309 #define Args_Statfs64 const char *, struct statfs64 *
310 
311 #define Symb_Statvfs UNIX_PFX "statvfs"
312 #define Retv_Statvfs int
313 #define Args_Statvfs const char *, struct statvfs *
314 
315 #define Symb_Statvfs64 UNIX_PFX "statvfs64"
316 #define Retv_Statvfs64 int
317 #define Args_Statvfs64 const char *, struct statvfs64 *
318 
319 #define Symb_Telldir UNIX_PFX "telldir"
320 #define Retv_Telldir long
321 #define Args_Telldir DIR *
322 
323 #define Symb_Truncate UNIX_PFX "truncate"
324 #define Retv_Truncate int
325 #define Args_Truncate const char *, off_t
326 
327 #define Symb_Truncate64 UNIX_PFX "truncate64"
328 #define Retv_Truncate64 int
329 #define Args_Truncate64 const char *, off64_t
330 
331 #define Symb_Unlink UNIX_PFX "unlink"
332 #define Retv_Unlink int
333 #define Args_Unlink const char *
334 
335 #define Symb_Write UNIX_PFX "write"
336 #define Retv_Write ssize_t
337 #define Args_Write int, const void *, size_t
338 
339 #define Symb_Writev UNIX_PFX "writev"
340 #define Retv_Writev ssize_t
341 #define Args_Writev int, const struct iovec *, int
342 
343 /******************************************************************************/
344 /* C a l l O u t V e c t o r D e f i n i t i o n */
345 /******************************************************************************/
346 
348 {public:
349  int Init(int *X=0) {if (!Done) Done = Resolve(); return 0;}
350 
414 
415  int Load_Error(const char *epname, int retv=-1);
416 
419 
420 private:
421 int Done;
422 void Missing(const char *);
423 int Resolve();
424 };
425 // Warning! This class is meant to be defined as a static object.
426 #endif