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