120 static char PrivLet[] = {
'd',
'i',
124 static const int PrivNum =
sizeof(PrivLet);
136 char pbuff[1024], rType[3];
137 const char *Resp[2] = {rType, pbuff};
138 const char *locArg, *opq, *
Path =
Split(args,&opq,pbuff,
sizeof(pbuff));
142 XrdOucEnv loc_Env(opq ? opq+1 : 0,0,client);
144 ZTRACE(
fsctl,
"locate args=" <<(args ? args :
"''"));
152 && (retc =
Finder->Locate(einfo, locArg, find_flag, &loc_Env)))
155 if (cmd &
SFS_O_TRUNC) {rType[0] =
'S'; rType[1] = ossRW;}
157 return XrdOfsFS->Emsg(epname, einfo, retc,
"locate",
Path);
158 rType[0] = ((
fstat.st_mode & S_IFBLK) == S_IFBLK ?
's' :
'S');
159 rType[1] = (
fstat.st_mode & S_IWUSR ?
'w' :
'r');
167 if ((Resp1Len =
myIF->GetDest(pbuff,
sizeof(pbuff), ifType, retHN)))
168 {einfo.
setErrInfo(Resp1Len+3, (
const char **)Resp, 2);
171 return Emsg(epname, einfo, ENETUNREACH,
"locate",
Path);
178 const char *opq, *
Path =
Split(args, &opq, pbuff,
sizeof(pbuff));
179 XrdOucEnv fs_Env(opq ? opq+1 : 0,0,client);
180 ZTRACE(
fsctl,
"statfs args=" <<(args ? args :
"''"));
183 && (retc =
Finder->Space(einfo,
Path, &fs_Env)))
187 return XrdOfsFS->Emsg(epname, einfo, retc,
"statfs", args);
196 const char *opq, *
Path =
Split(args, &opq, pbuff,
sizeof(pbuff));
197 XrdOucEnv statls_Env(opq ? opq+1 : 0,0,client);
198 ZTRACE(
fsctl,
"statls args=" <<(args ? args :
"''"));
201 {statls_Env.
Put(
"cms.qvfs",
"1");
202 if ((retc =
Finder->Space(einfo,
Path, &statls_Env)))
203 {
if (retc ==
SFS_DATA) retc = Reformat(einfo);
209 return XrdOfsFS->Emsg(epname, einfo, retc,
"statls",
Path);
218 const char *opq, *
Path =
Split(args, &opq, pbuff,
sizeof(pbuff));
219 XrdOucEnv xa_Env(opq ? opq+1 : 0,0,client);
220 ZTRACE(
fsctl,
"statxa args=" <<(args ? args :
"''"));
227 return XrdOfsFS->Emsg(epname, einfo, retc,
"statxa",
Path);
230 cP = bP + blen; strcpy(cP,
"&ofs.ap="); cP += 8;
232 else {
for (i = 0; i < PrivNum; i++)
233 if (PrivTab[i] & privs) *cP++ = PrivLet[i];
234 if (cP == (bP + blen + 1)) *cP++ =
'?';
246 ZTRACE(
fsctl,
"statcc args=" <<(args ? args :
"''"));
247 if (
Finder) retc =
Finder ->Locate(einfo,
".",lcc_flag,&lcc_Env);
248 else if (Balancer) retc = Balancer->Locate(einfo,
".",lcc_flag,&lcc_Env);
256 return XrdOfsFS->Emsg(epname, einfo, ENOTSUP,
"fsctl", args);
276 {
XrdOucEnv pc_Env(args.ArgP[1] ? args.ArgP[1] : 0, 0, client);
279 return FSctl_PC->FSctl(cmd, args, eInfo, client);
282 else if (FSctl_PI)
return FSctl_PI->FSctl(cmd, args, eInfo, client);
286 return XrdOfsFS->Emsg(
"FSctl", eInfo, ENOTSUP,
"FSctl",
"");
virtual int FSctl(const int cmd, int alen, const char *args, XrdSfsFile &file, XrdOucErrInfo &eInfo, const XrdSecEntity *client=0)=0
int stat(const char *Name, struct stat *buf, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *opaque=0)