59extern XrdOssArcConfig
Config;
61extern XrdSysError
Elog;
65extern thread_local XrdOucECMsg
ecMsg;
69#define Neg(x) (x > 0 ? -x : x)
77 if (zFile)
delete zFile;
93 if (retsz) *retsz = 0;
96 }
else rc = ossDF->Close(retsz);
111 if (zFile == 0)
return ossDF->Fstat(buf);
115 return zFile->Stat(*buf);
128 if (ossDF->getErrMsg(xMsg))
130 ecMsg.Msg(
"oss", xMsg.c_str());
135 return ossDF->getErrMsg(eText);
145 bool isRW = (Oflag & (O_APPEND|O_CREAT|O_TRUNC|O_WRONLY|O_RDWR)) != 0;
155 if (rc == EDOM)
return ossDF->Open(path, Oflag,
Mode, env);
156 if (rc != 0)
return -rc;
166 char arcPath[MAXPATHLEN];
167 if ((rc = dsInfo.
ArcPath(arcPath,
sizeof(arcPath),
true)))
return -rc;
169 {
if (rc == EINPROGRESS)
return Config.wtpStage;
177 {
if ((arcFD = XrdSysFD_Open(arcPath, O_RDONLY,
Mode)) < 0)
179 Elog.Emsg(
"open", rc,
"open", arcPath);
184 {
Elog.Emsg(
"open", rc,
"promote open", arcPath);
193 char arcMember[MAXPATHLEN];
194 if ((rc = dsInfo.
ArcMember(arcMember,
sizeof(arcMember))))
return -rc;
202 if (!rc) rc = zFile->Open(arcMember);
207 {
Elog.Emsg(
"open", rc,
"open archive", path);
208 ecMsg.Msg(
"open",
"Unable to access member", arcMember,
"in archive",
210 delete zFile; zFile = 0;
224 if (zFile)
return zFile->Read(buffer, offset, size);
225 return ossDF->Read(buffer, offset, size);
238 if (zFile)
return -EBADF;
239 return ossDF->Write(buffer, offset, size);
int ArcMember(char *buff, int blen)
int ArcPath(char *buff, int blen, bool addafn=false)
int Open(const char *path, int Oflag, mode_t Mode, XrdOucEnv &env) override
int Close(long long *retsz=0) override
bool getErrMsg(std::string &eText) override
ssize_t Write(const void *buffer, off_t offset, size_t size) override
ssize_t Read(off_t offset, size_t size) override
int Fstat(struct stat *buf) override
static int Stage(const char *path, const char *mssPath)
static const int Fctl_setFD
XrdSysTrace ArcTrace("OssArc")
XrdSysError Elog(0, "OssArc_")