XrdPosixLinkage.hh

Go to the documentation of this file.
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: XrdPosixLinkage.hh 25932 2008-10-23 10:58:11Z ganis $
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

Generated on Tue Jul 5 14:46:57 2011 for ROOT_528-00b_version by  doxygen 1.5.1