return l;
}
-// note that this is a clone of the method below.. any change here should be reflected there
-int FileStore::_getattrs(coll_t cid, const hobject_t& oid, map<string,bufferptr>& aset, bool user_only)
-{
- // get attr list
- char names1[100];
- int len = lfn_listxattr(cid, oid, names1, sizeof(names1)-1);
- char *names2 = 0;
- char *name = 0;
- if (len == -ERANGE) {
- len = lfn_listxattr(cid, oid, 0, 0);
- if (len < 0)
- return len;
- dout(10) << " -ERANGE, len is " << len << dendl;
- names2 = new char[len+1];
- len = lfn_listxattr(cid, oid, names2, len);
- dout(10) << " -ERANGE, got " << len << dendl;
- if (len < 0)
- return len;
- name = names2;
- } else if (len < 0)
- return len;
- else
- name = names1;
- name[len] = 0;
-
- char *end = name + len;
- while (name < end) {
- char *attrname = name;
- if (parse_attrname(&name)) {
- char *set_name = name;
- bool can_get = true;
- if (user_only) {
- if (*set_name =='_')
- set_name++;
- else
- can_get = false;
- }
- if (*set_name && can_get) {
- dout(20) << "getattrs " << cid << "/" << oid << " getting '" << name << "'" << dendl;
-
- int r = _getattr(cid, oid, attrname, aset[set_name]);
- if (r < 0) {
- assert(!m_filestore_fail_eio || r != -EIO);
- return r;
- }
- }
- }
- name += strlen(name) + 1;
- }
-
- delete[] names2;
- return 0;
-}
-
-
-// note that this is a clone of the method above.. any change here should be reflected
-// there
-int FileStore::_getattrs(const char *fn, map<string,bufferptr>& aset, bool user_only)
-{
- // get attr list
- char names1[100];
- int len = chain_listxattr(fn, names1, sizeof(names1)-1);
- char *names2 = 0;
- char *name = 0;
- if (len == -ERANGE) {
- len = chain_listxattr(fn, 0, 0);
- if (len < 0) {
- assert(!m_filestore_fail_eio || len != -EIO);
- return len;
- }
- dout(10) << " -ERANGE, len is " << len << dendl;
- names2 = new char[len+1];
- len = chain_listxattr(fn, names2, len);
- dout(10) << " -ERANGE, got " << len << dendl;
- if (len < 0) {
- assert(!m_filestore_fail_eio || len != -EIO);
- return len;
- }
- name = names2;
- } else if (len < 0) {
- assert(!m_filestore_fail_eio || len != -EIO);
- return len;
- } else {
- name = names1;
- }
- name[len] = 0;
-
- char *end = name + len;
- while (name < end) {
- char *attrname = name;
- if (parse_attrname(&name)) {
- char *set_name = name;
- bool can_get = true;
- if (user_only) {
- if (*set_name =='_')
- set_name++;
- else
- can_get = false;
- }
- if (*set_name && can_get) {
- dout(20) << "getattrs " << fn << " getting '" << name << "'" << dendl;
- //dout(0) << "getattrs " << fn << " set_name '" << set_name << "' user_only=" << user_only << dendl;
-
- int r = _getattr(fn, attrname, aset[set_name]);
- if (r < 0) return r;
- }
- }
- name += strlen(name) + 1;
- }
-
- delete[] names2;
- return 0;
-}
// objects
int getattrs(coll_t cid, const hobject_t& oid, map<string,bufferptr>& aset, bool user_only = false);
int _getattr(coll_t cid, const hobject_t& oid, const char *name, bufferptr& bp);
- int _getattrs(coll_t cid, const hobject_t& oid, map<string,bufferptr>& aset, bool user_only = false) ;
int _getattr(const char *fn, const char *name, bufferptr& bp);
- int _getattrs(const char *fn, map<string,bufferptr>& aset, bool user_only = false);
int _setattrs(coll_t cid, const hobject_t& oid, map<string,bufferptr>& aset,
const SequencerPosition &spos);