00001 #ifndef __SFS_NATIVE_H__
00002 #define __SFS_NATIVE_H__
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include <sys/types.h>
00016 #include <string.h>
00017 #include <dirent.h>
00018
00019 #include "XrdSfs/XrdSfsInterface.hh"
00020
00021 class XrdSysError;
00022 class XrdSysLogger;
00023
00024
00025
00026
00027
00028 class XrdSfsNativeDirectory : public XrdSfsDirectory
00029 {
00030 public:
00031
00032 int open(const char *dirName,
00033 const XrdSecClientName *client = 0,
00034 const char *opaque = 0);
00035
00036 const char *nextEntry();
00037
00038 int close();
00039
00040 const char *FName() {return (const char *)fname;}
00041
00042 XrdSfsNativeDirectory(char *user=0) : XrdSfsDirectory(user)
00043 {ateof = 0; fname = 0;
00044 dh = (DIR *)0;
00045 d_pnt = &dirent_full.d_entry;
00046 }
00047
00048 ~XrdSfsNativeDirectory() {if (dh) close();}
00049 private:
00050
00051 DIR *dh;
00052 char ateof;
00053 char *fname;
00054
00055 struct {struct dirent d_entry;
00056 char pad[MAXNAMLEN];
00057 } dirent_full;
00058
00059 struct dirent *d_pnt;
00060
00061 };
00062
00063
00064
00065
00066
00067 class XrdSfsAio;
00068
00069 class XrdSfsNativeFile : public XrdSfsFile
00070 {
00071 public:
00072
00073 int open(const char *fileName,
00074 XrdSfsFileOpenMode openMode,
00075 mode_t createMode,
00076 const XrdSecClientName *client = 0,
00077 const char *opaque = 0);
00078
00079 int close();
00080
00081 int fctl(const int cmd,
00082 const char *args,
00083 XrdOucErrInfo &out_error);
00084
00085 const char *FName() {return fname;}
00086
00087 int getMmap(void **Addr, off_t &Size)
00088 {if (Addr) Addr = 0; Size = 0; return SFS_OK;}
00089
00090 int read(XrdSfsFileOffset fileOffset,
00091 XrdSfsXferSize preread_sz) {return SFS_OK;}
00092
00093 XrdSfsXferSize read(XrdSfsFileOffset fileOffset,
00094 char *buffer,
00095 XrdSfsXferSize buffer_size);
00096
00097 int read(XrdSfsAio *aioparm);
00098
00099 XrdSfsXferSize write(XrdSfsFileOffset fileOffset,
00100 const char *buffer,
00101 XrdSfsXferSize buffer_size);
00102
00103 int write(XrdSfsAio *aioparm);
00104
00105 int sync();
00106
00107 int sync(XrdSfsAio *aiop);
00108
00109 int stat(struct stat *buf);
00110
00111 int truncate(XrdSfsFileOffset fileOffset);
00112
00113 int getCXinfo(char cxtype[4], int &cxrsz) {return cxrsz = 0;}
00114
00115 XrdSfsNativeFile(char *user=0) : XrdSfsFile(user)
00116 {oh = -1; fname = 0;}
00117 ~XrdSfsNativeFile() {if (oh) close();}
00118 private:
00119
00120 int oh;
00121 char *fname;
00122
00123 };
00124
00125
00126
00127
00128
00129 class XrdSfsNative : public XrdSfsFileSystem
00130 {
00131 public:
00132
00133
00134
00135 XrdSfsDirectory *newDir(char *user=0)
00136 {return (XrdSfsDirectory *)new XrdSfsNativeDirectory(user);}
00137
00138 XrdSfsFile *newFile(char *user=0)
00139 {return (XrdSfsFile *)new XrdSfsNativeFile(user);}
00140
00141
00142
00143 int chmod(const char *Name,
00144 XrdSfsMode Mode,
00145 XrdOucErrInfo &out_error,
00146 const XrdSecClientName *client = 0,
00147 const char *opaque = 0);
00148
00149 int exists(const char *fileName,
00150 XrdSfsFileExistence &exists_flag,
00151 XrdOucErrInfo &out_error,
00152 const XrdSecClientName *client = 0,
00153 const char *opaque = 0);
00154
00155 int fsctl(const int cmd,
00156 const char *args,
00157 XrdOucErrInfo &out_error,
00158 const XrdSecClientName *client = 0);
00159
00160 int getStats(char *buff, int blen) {return 0;}
00161
00162 const char *getVersion();
00163
00164 int mkdir(const char *dirName,
00165 XrdSfsMode Mode,
00166 XrdOucErrInfo &out_error,
00167 const XrdSecClientName *client = 0,
00168 const char *opaque = 0);
00169
00170 int prepare( XrdSfsPrep &pargs,
00171 XrdOucErrInfo &out_error,
00172 const XrdSecClientName *client = 0) {return 0;}
00173
00174 int rem(const char *path,
00175 XrdOucErrInfo &out_error,
00176 const XrdSecClientName *client = 0,
00177 const char *opaque = 0);
00178
00179 int remdir(const char *dirName,
00180 XrdOucErrInfo &out_error,
00181 const XrdSecClientName *client = 0,
00182 const char *opaque = 0);
00183
00184 int rename(const char *oldFileName,
00185 const char *newFileName,
00186 XrdOucErrInfo &out_error,
00187 const XrdSecClientName *client = 0,
00188 const char *opaqueO = 0,
00189 const char *opaqueN = 0);
00190
00191 int stat(const char *Name,
00192 struct stat *buf,
00193 XrdOucErrInfo &out_error,
00194 const XrdSecClientName *client = 0,
00195 const char *opaque = 0);
00196
00197 int stat(const char *Name,
00198 mode_t &mode,
00199 XrdOucErrInfo &out_error,
00200 const XrdSecClientName *client = 0,
00201 const char *opaque = 0)
00202 {struct stat bfr;
00203 int rc = stat(Name, &bfr, out_error, client);
00204 if (!rc) mode = bfr.st_mode;
00205 return rc;
00206 }
00207
00208 int truncate(const char *Name,
00209 XrdSfsFileOffset fileOffset,
00210 XrdOucErrInfo &out_error,
00211 const XrdSecEntity *client = 0,
00212 const char *opaque = 0);
00213
00214
00215
00216 static int Mkpath(const char *path, mode_t mode,
00217 const char *info=0);
00218
00219 static int Emsg(const char *, XrdOucErrInfo&, int, const char *x,
00220 const char *y="");
00221
00222 XrdSfsNative(XrdSysError *lp);
00223 virtual ~XrdSfsNative() {}
00224
00225 private:
00226
00227 static XrdSysError *eDest;
00228 };
00229 #endif