35 #include <sys/types.h>
36 #include <sys/extattr.h>
44 int XrdSysFAttr::Del(
const char *Aname,
const char *
Path,
int fd)
50 ec = (fd < 0 ? extattr_delete_file(
Path, EXTATTR_NAMESPACE_USER, Aname)
51 : extattr_delete_fd( fd, EXTATTR_NAMESPACE_USER, Aname));
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 ? extattr_get_file(
Path,EXTATTR_NAMESPACE_USER,Aname,Aval,Avsz)
71 : extattr_get_fd( fd, EXTATTR_NAMESPACE_USER,Aname,Aval,Avsz));
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 ? extattr_list_file(
Path,EXTATTR_NAMESPACE_USER, 0, 0)
93 : extattr_list_fd( fd,EXTATTR_NAMESPACE_USER, 0, 0));
107 if (!(Buff = (
char *)malloc(Tlen)))
return -ENOMEM;
112 Tlen = (fd < 0 ? extattr_list_file(
Path,EXTATTR_NAMESPACE_USER, Buff, Tlen)
113 : extattr_list_fd( fd,EXTATTR_NAMESPACE_USER, Buff, Tlen));
129 {n = (
unsigned char)Buff[i];
130 strncpy(Vname, &Buff[i+1], n);
132 if (n && (aNew = getEnt(
Path, fd, Vname, *aPL, msP))) *aPL = aNew;
136 bP = Buff; bEnd = Buff+Tlen;
138 {
if ((aNew = getEnt(
Path, fd, bP, *aPL, msP))) *aPL = aNew;
139 bP = bP + strlen(bP) + 1;
153 int XrdSysFAttr::Set(
const char *Aname,
const void *Aval,
int Avsz,
154 const char *
Path,
int fd,
int isNew)
162 {
ec = (fd < 0 ? extattr_get_file(
Path,EXTATTR_NAMESPACE_USER,Aname,0,0)
163 : extattr_get_fd( fd, EXTATTR_NAMESPACE_USER,Aname,0,0));
164 if (
ec >= 0)
return -EEXIST;
169 ec = (fd < 0 ? extattr_set_file(
Path,EXTATTR_NAMESPACE_USER,Aname,Aval,Avsz)
170 : extattr_set_fd( fd, EXTATTR_NAMESPACE_USER,Aname,Aval,Avsz));
171 if (
ec < 0 ||
ec != Avsz)
172 ec = Diagnose(
"set", Aname,
Path, (
ec < 0 ? errno : ENOSPC));