00001 #ifndef _XRDPOSIXLINKAGE_H_
00002 #define _XRDPOSIXLINKAGE_H_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include <sys/types.h>
00034 #include <sys/stat.h>
00035 #include <sys/statvfs.h>
00036 #include <dirent.h>
00037 #include <errno.h>
00038 #include <fcntl.h>
00039 #include <stdio.h>
00040 #include <unistd.h>
00041
00042 #include "XrdPosix/XrdPosixOsDep.hh"
00043 #include "XrdSys/XrdSysPlatform.hh"
00044
00045
00046
00047
00048
00049
00050
00051
00052 #define UNIX_PFX
00053
00054
00055 #define Symb_Access UNIX_PFX "access"
00056 #define Retv_Access int
00057 #define Args_Access const char *path, int amode
00058
00059 #define Symb_Acl UNIX_PFX "acl"
00060 #define Retv_Acl int
00061 #define Args_Acl const char *, int, int, void *
00062
00063 #define Symb_Chdir UNIX_PFX "chdir"
00064 #define Retv_Chdir int
00065 #define Args_Chdir const char *path
00066
00067 #define Symb_Close UNIX_PFX "close"
00068 #define Retv_Close int
00069 #define Args_Close int
00070
00071 #define Symb_Closedir UNIX_PFX "closedir"
00072 #define Retv_Closedir int
00073 #define Args_Closedir DIR *
00074
00075 #define Symb_Fclose UNIX_PFX "fclose"
00076 #define Retv_Fclose int
00077 #define Args_Fclose FILE *
00078
00079 #define Symb_Fcntl UNIX_PFX "fcntl"
00080 #define Retv_Fcntl int
00081 #define Args_Fcntl int, int, ...
00082
00083 #define Symb_Fcntl64 UNIX_PFX "fcntl64"
00084 #define Retv_Fcntl64 int
00085 #define Args_Fcntl64 int, int, ...
00086
00087 #define Symb_Fdatasync UNIX_PFX "fdatasync"
00088 #define Retv_Fdatasync int
00089 #define Args_Fdatasync int
00090
00091 #define Symb_Fflush UNIX_PFX "fflush"
00092 #define Retv_Fflush int
00093 #define Args_Fflush FILE *
00094
00095 #define Symb_Fopen UNIX_PFX "fopen"
00096 #define Retv_Fopen FILE *
00097 #define Args_Fopen const char *, const char *
00098
00099 #define Symb_Fopen64 UNIX_PFX "fopen64"
00100 #define Retv_Fopen64 FILE *
00101 #define Args_Fopen64 const char *, const char *
00102
00103 #define Symb_Fread UNIX_PFX "fread"
00104 #define Retv_Fread size_t
00105 #define Args_Fread void *, size_t, size_t, FILE *
00106
00107 #define Symb_Fseek UNIX_PFX "fseek"
00108 #define Retv_Fseek int
00109 #define Args_Fseek FILE *, long, int
00110
00111 #define Symb_Fseeko UNIX_PFX "fseeko"
00112 #define Retv_Fseeko int
00113 #define Args_Fseeko FILE *, off_t, int
00114
00115 #define Symb_Fseeko64 UNIX_PFX "fseeko64"
00116 #define Retv_Fseeko64 int
00117 #define Args_Fseeko64 FILE *, off64_t, int
00118
00119 #ifdef __linux__
00120 #define Symb_Fstat UNIX_PFX "__fxstat"
00121 #define Retv_Fstat int
00122 #define Args_Fstat int, int, struct stat *
00123 #else
00124 #define Symb_Fstat UNIX_PFX "fstat"
00125 #define Retv_Fstat int
00126 #define Args_Fstat int, struct stat *
00127 #endif
00128
00129 #ifdef __linux__
00130 #define Symb_Fstat64 UNIX_PFX "__fxstat64"
00131 #define Retv_Fstat64 int
00132 #define Args_Fstat64 int, int, struct stat64 *
00133 #else
00134 #define Symb_Fstat64 UNIX_PFX "fstat64"
00135 #define Retv_Fstat64 int
00136 #define Args_Fstat64 int, struct stat64 *
00137 #endif
00138
00139 #define Symb_Fsync UNIX_PFX "fsync"
00140 #define Retv_Fsync int
00141 #define Args_Fsync int
00142
00143 #define Symb_Ftell UNIX_PFX "ftell"
00144 #define Retv_Ftell long
00145 #define Args_Ftell FILE *
00146
00147 #define Symb_Ftello UNIX_PFX "ftello"
00148 #define Retv_Ftello off_t
00149 #define Args_Ftello FILE *
00150
00151 #define Symb_Ftello64 UNIX_PFX "ftello64"
00152 #define Retv_Ftello64 off64_t
00153 #define Args_Ftello64 FILE *
00154
00155 #define Symb_Ftruncate UNIX_PFX "ftruncate"
00156 #define Retv_Ftruncate int
00157 #define Args_Ftruncate int, off_t
00158
00159 #define Symb_Ftruncate64 UNIX_PFX "ftruncate64"
00160 #define Retv_Ftruncate64 int
00161 #define Args_Ftruncate64 int, off64_t
00162
00163 #define Symb_Fwrite UNIX_PFX "fwrite"
00164 #define Retv_Fwrite int
00165 #define Args_Fwrite const void *, size_t, size_t, FILE *
00166
00167 #define Symb_Fgetxattr UNIX_PFX "fgetxattr"
00168 #define Retv_Fgetxattr ssize_t
00169 #define Args_Fgetxattr int, const char *, const void *, size_t
00170
00171 #define Symb_Getxattr UNIX_PFX "getxattr"
00172 #define Retv_Getxattr ssize_t
00173 #define Args_Getxattr const char *, const char *, const void *, size_t
00174
00175 #define Symb_Lgetxattr UNIX_PFX "lgetxattr"
00176 #define Retv_Lgetxattr ssize_t
00177 #define Args_Lgetxattr const char *, const char *, const void *, size_t
00178
00179 #define Symb_Lseek UNIX_PFX "lseek"
00180 #define Retv_Lseek off_t
00181 #define Args_Lseek int, off_t, int
00182
00183 #define Symb_Lseek64 UNIX_PFX "lseek64"
00184 #define Retv_Lseek64 off64_t
00185 #define Args_Lseek64 int, off64_t, int
00186
00187 #ifdef __linux__
00188 #define Symb_Lstat UNIX_PFX "__lxstat"
00189 #define Retv_Lstat int
00190 #define Args_Lstat int, const char *, struct stat *
00191 #else
00192 #define Symb_Lstat UNIX_PFX "lstat"
00193 #define Retv_Lstat int
00194 #define Args_Lstat const char *, struct stat *
00195 #endif
00196
00197 #ifdef __linux__
00198 #define Symb_Lstat64 UNIX_PFX "__lxstat64"
00199 #define Retv_Lstat64 int
00200 #define Args_Lstat64 int, const char *, struct stat64 *
00201 #else
00202 #define Symb_Lstat64 UNIX_PFX "lstat64"
00203 #define Retv_Lstat64 int
00204 #define Args_Lstat64 const char *, struct stat64 *
00205 #endif
00206
00207 #define Symb_Mkdir UNIX_PFX "mkdir"
00208 #define Retv_Mkdir int
00209 #define Args_Mkdir const char *, mode_t
00210
00211 #define Symb_Open UNIX_PFX "open"
00212 #define Retv_Open int
00213 #define Args_Open const char *, int, ...
00214
00215 #define Symb_Open64 UNIX_PFX "open64"
00216 #define Retv_Open64 int
00217 #define Args_Open64 const char *, int, ...
00218
00219 #define Symb_Opendir UNIX_PFX "opendir"
00220 #define Retv_Opendir DIR *
00221 #define Args_Opendir const char *
00222
00223 #define Symb_Pathconf UNIX_PFX "pathconf"
00224 #define Retv_Pathconf long
00225 #define Args_Pathconf const char *, int
00226
00227 #define Symb_Pread UNIX_PFX "pread"
00228 #define Retv_Pread ssize_t
00229 #define Args_Pread int, void *, size_t, off_t
00230
00231 #define Symb_Pread64 UNIX_PFX "pread64"
00232 #define Retv_Pread64 ssize_t
00233 #define Args_Pread64 int, void *, size_t, off64_t
00234
00235 #define Symb_Pwrite UNIX_PFX "pwrite"
00236 #define Retv_Pwrite ssize_t
00237 #define Args_Pwrite int, const void *, size_t, off_t
00238
00239 #define Symb_Pwrite64 UNIX_PFX "pwrite64"
00240 #define Retv_Pwrite64 ssize_t
00241 #define Args_Pwrite64 int, const void *, size_t, off64_t
00242
00243 #define Symb_Read UNIX_PFX "read"
00244 #define Retv_Read ssize_t
00245 #define Args_Read int, void *, size_t
00246
00247 #define Symb_Readv UNIX_PFX "readv"
00248 #define Retv_Readv ssize_t
00249 #define Args_Readv int, const struct iovec *, int
00250
00251 #define Symb_Readdir UNIX_PFX "readdir"
00252 #define Retv_Readdir struct dirent *
00253 #define Args_Readdir DIR *
00254
00255 #define Symb_Readdir64 UNIX_PFX "readdir64"
00256 #define Retv_Readdir64 struct dirent64 *
00257 #define Args_Readdir64 DIR *
00258
00259 #define Symb_Readdir_r UNIX_PFX "readdir_r"
00260 #define Retv_Readdir_r int
00261 #define Args_Readdir_r DIR *, struct dirent *, struct dirent **
00262
00263 #define Symb_Readdir64_r UNIX_PFX "readdir64_r"
00264 #define Retv_Readdir64_r int
00265 #define Args_Readdir64_r DIR *, struct dirent64 *, struct dirent64 **
00266
00267 #define Symb_Rename UNIX_PFX "rename"
00268 #define Retv_Rename int
00269 #define Args_Rename const char *, const char *
00270
00271 #define Symb_Rewinddir UNIX_PFX "rewinddir"
00272 #define Retv_Rewinddir void
00273 #define Args_Rewinddir DIR *
00274
00275 #define Symb_Rmdir UNIX_PFX "rmdir"
00276 #define Retv_Rmdir int
00277 #define Args_Rmdir const char *
00278
00279 #define Symb_Seekdir UNIX_PFX "seekdir"
00280 #define Retv_Seekdir void
00281 #define Args_Seekdir DIR *, long
00282
00283 #ifdef __linux__
00284 #define Symb_Stat UNIX_PFX "__xstat"
00285 #define Retv_Stat int
00286 #define Args_Stat int, const char *, struct stat *
00287 #else
00288 #define Symb_Stat UNIX_PFX "stat"
00289 #define Retv_Stat int
00290 #define Args_Stat const char *, struct stat *
00291 #endif
00292
00293 #ifdef __linux__
00294 #define Symb_Stat64 UNIX_PFX "__xstat64"
00295 #define Retv_Stat64 int
00296 #define Args_Stat64 int, const char *, struct stat64 *
00297 #else
00298 #define Symb_Stat64 UNIX_PFX "stat64"
00299 #define Retv_Stat64 int
00300 #define Args_Stat64 const char *, struct stat64 *
00301 #endif
00302
00303 #define Symb_Statfs UNIX_PFX "statfs"
00304 #define Retv_Statfs int
00305 #define Args_Statfs const char *, struct statfs *
00306
00307 #define Symb_Statfs64 UNIX_PFX "statfs64"
00308 #define Retv_Statfs64 int
00309 #define Args_Statfs64 const char *, struct statfs64 *
00310
00311 #define Symb_Statvfs UNIX_PFX "statvfs"
00312 #define Retv_Statvfs int
00313 #define Args_Statvfs const char *, struct statvfs *
00314
00315 #define Symb_Statvfs64 UNIX_PFX "statvfs64"
00316 #define Retv_Statvfs64 int
00317 #define Args_Statvfs64 const char *, struct statvfs64 *
00318
00319 #define Symb_Telldir UNIX_PFX "telldir"
00320 #define Retv_Telldir long
00321 #define Args_Telldir DIR *
00322
00323 #define Symb_Truncate UNIX_PFX "truncate"
00324 #define Retv_Truncate int
00325 #define Args_Truncate const char *, off_t
00326
00327 #define Symb_Truncate64 UNIX_PFX "truncate64"
00328 #define Retv_Truncate64 int
00329 #define Args_Truncate64 const char *, off64_t
00330
00331 #define Symb_Unlink UNIX_PFX "unlink"
00332 #define Retv_Unlink int
00333 #define Args_Unlink const char *
00334
00335 #define Symb_Write UNIX_PFX "write"
00336 #define Retv_Write ssize_t
00337 #define Args_Write int, const void *, size_t
00338
00339 #define Symb_Writev UNIX_PFX "writev"
00340 #define Retv_Writev ssize_t
00341 #define Args_Writev int, const struct iovec *, int
00342
00343
00344
00345
00346
00347 class XrdPosixLinkage
00348 {public:
00349 int Init(int *X=0) {if (!Done) Done = Resolve(); return 0;}
00350
00351 Retv_Access (*Access)(Args_Access);
00352 Retv_Acl (*Acl)(Args_Acl);
00353 Retv_Chdir (*Chdir)(Args_Chdir);
00354 Retv_Close (*Close)(Args_Close);
00355 Retv_Closedir (*Closedir)(Args_Closedir);
00356 Retv_Fclose (*Fclose)(Args_Fclose);
00357 Retv_Fcntl (*Fcntl)(Args_Fcntl);
00358 Retv_Fcntl64 (*Fcntl64)(Args_Fcntl64);
00359 Retv_Fdatasync (*Fdatasync)(Args_Fdatasync);
00360 Retv_Fflush (*Fflush)(Args_Fflush);
00361 Retv_Fopen (*Fopen)(Args_Fopen);
00362 Retv_Fopen64 (*Fopen64)(Args_Fopen64);
00363 Retv_Fread (*Fread)(Args_Fread);
00364 Retv_Fseek (*Fseek)(Args_Fseek);
00365 Retv_Fseeko (*Fseeko)(Args_Fseeko);
00366 Retv_Fseeko64 (*Fseeko64)(Args_Fseeko64);
00367 Retv_Fstat (*Fstat)(Args_Fstat);
00368 Retv_Fstat64 (*Fstat64)(Args_Fstat64);
00369 Retv_Fsync (*Fsync)(Args_Fsync);
00370 Retv_Ftell (*Ftell)(Args_Ftell);
00371 Retv_Ftello (*Ftello)(Args_Ftello);
00372 Retv_Ftello64 (*Ftello64)(Args_Ftello64);
00373 Retv_Ftruncate (*Ftruncate)(Args_Ftruncate);
00374 Retv_Ftruncate64 (*Ftruncate64)(Args_Ftruncate64);
00375 Retv_Fwrite (*Fwrite)(Args_Fwrite);
00376 Retv_Fgetxattr (*Fgetxattr)(Args_Fgetxattr);
00377 Retv_Lgetxattr (*Lgetxattr)(Args_Lgetxattr);
00378 Retv_Getxattr (*Getxattr)(Args_Getxattr);
00379 Retv_Lseek (*Lseek)(Args_Lseek);
00380 Retv_Lseek64 (*Lseek64)(Args_Lseek64);
00381 Retv_Lstat (*Lstat)(Args_Lstat);
00382 Retv_Lstat64 (*Lstat64)(Args_Lstat64);
00383 Retv_Mkdir (*Mkdir)(Args_Mkdir);
00384 Retv_Open (*Open)(Args_Open);
00385 Retv_Open64 (*Open64)(Args_Open64);
00386 Retv_Opendir (*Opendir)(Args_Opendir);
00387 Retv_Pathconf (*Pathconf)(Args_Pathconf);
00388 Retv_Pread (*Pread)(Args_Pread);
00389 Retv_Pread64 (*Pread64)(Args_Pread64);
00390 Retv_Pwrite (*Pwrite)(Args_Pwrite);
00391 Retv_Pwrite64 (*Pwrite64)(Args_Pwrite64);
00392 Retv_Read (*Read)(Args_Read);
00393 Retv_Readv (*Readv)(Args_Readv);
00394 Retv_Readdir (*Readdir)(Args_Readdir);
00395 Retv_Readdir64 (*Readdir64)(Args_Readdir64);
00396 Retv_Readdir_r (*Readdir_r)(Args_Readdir_r);
00397 Retv_Readdir64_r (*Readdir64_r)(Args_Readdir64_r);
00398 Retv_Rename (*Rename)(Args_Rename);
00399 Retv_Rewinddir (*Rewinddir)(Args_Rewinddir);
00400 Retv_Rmdir (*Rmdir)(Args_Rmdir);
00401 Retv_Seekdir (*Seekdir)(Args_Seekdir);
00402 Retv_Stat (*Stat)(Args_Stat);
00403 Retv_Stat64 (*Stat64)(Args_Stat64);
00404 Retv_Statfs (*Statfs)(Args_Statfs);
00405 Retv_Statfs64 (*Statfs64)(Args_Statfs64);
00406 Retv_Statvfs (*Statvfs)(Args_Statvfs);
00407 Retv_Statvfs64 (*Statvfs64)(Args_Statvfs64);
00408 Retv_Telldir (*Telldir)(Args_Telldir);
00409 Retv_Truncate (*Truncate)(Args_Truncate);
00410 Retv_Truncate64 (*Truncate64)(Args_Truncate64);
00411 Retv_Unlink (*Unlink)(Args_Unlink);
00412 Retv_Write (*Write)(Args_Write);
00413 Retv_Writev (*Writev)(Args_Writev);
00414
00415 int Load_Error(const char *epname, int retv=-1);
00416
00417 XrdPosixLinkage() : Done(0) {Init();}
00418 ~XrdPosixLinkage() {}
00419
00420 private:
00421 int Done;
00422 void Missing(const char *);
00423 int Resolve();
00424 };
00425
00426 #endif