35 #include <sys/types.h>
36 #include <sys/xattr.h>
45 int XrdSysFAttr::Del(
const char *Aname,
const char *
Path,
int fd)
51 ec = (fd < 0 ? removexattr(
Path,Aname,0) : fremovexattr(fd, Aname, 0));
55 if (
ec)
ec = Diagnose(
"remove", Aname,
Path, errno);
63 int XrdSysFAttr::Get(
const char *Aname,
void *Aval,
int Avsz,
64 const char *
Path,
int fd)
70 ec = (fd < 0 ? getxattr(
Path, Aname, Aval, Avsz, 0, 0)
71 : fgetxattr(fd, Aname, Aval, Avsz, 0, 0));
75 if (
ec < 0)
ec = Diagnose(
"get", Aname,
Path, errno);
83 int XrdSysFAttr::List(AList **aPL,
const char *
Path,
int fd,
int getSz)
86 char *Buff, *bP, *bEnd;
87 int ec, Tlen, maxSz = 0, *msP = (getSz ? &maxSz : 0);
92 Tlen = (fd < 0 ? listxattr(
Path, 0, 0, 0) : flistxattr(fd, 0, 0, 0));
106 if (!(Buff = (
char *)malloc(Tlen)))
return -ENOMEM;
111 Tlen = (fd < 0 ? listxattr(
Path,Buff,Tlen,0) : flistxattr(fd,Buff,Tlen,0));
121 bP = Buff; bEnd = Buff+Tlen;
123 {
if ((aNew = getEnt(
Path, fd, bP, *aPL, msP))) *aPL = aNew;
124 bP = bP + strlen(bP) + 1;
137 int XrdSysFAttr::Set(
const char *Aname,
const void *Aval,
int Avsz,
138 const char *
Path,
int fd,
int isNew)
140 int ec, xFlag = (isNew ? XATTR_CREATE : 0);
144 ec = (fd < 0 ? setxattr(
Path, Aname, Aval, Avsz, 0, xFlag)
145 : fsetxattr(fd, Aname, Aval, Avsz, 0, xFlag));
149 if (
ec < 0)
ec = Diagnose(
"set", Aname,
Path, errno);