From 1ce00a481fd1489e22bdf2ecda170575ad951c81 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 4 Dec 2008 16:28:33 -0800 Subject: [PATCH] filestore: fix up listxattr buffer management a bit --- src/os/FileStore.cc | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/os/FileStore.cc b/src/os/FileStore.cc index d23ee8632e2fa..0a9393bbbae3e 100644 --- a/src/os/FileStore.cc +++ b/src/os/FileStore.cc @@ -1469,17 +1469,26 @@ int FileStore::_getattrs(const char *fn, map& aset) { // get attr list char names1[100]; - char *name = names1; - int len = do_listxattr(fn, names1, sizeof(names1)); + int len = do_listxattr(fn, names1, sizeof(names1)-1); char *names2 = 0; + char *name = 0; if (len == -ERANGE) { len = do_listxattr(fn, 0, 0); - if (len < 0) return len; - name = names2 = new char[len]; + if (len < 0) + return len; + dout(10) << " -ERANGE, len is " << len << dendl; + names2 = new char[len+1]; len = do_listxattr(fn, 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; -- 2.39.5