#include "newstore/NewStore.h"
#endif
+void decode_str_str_map_to_bl(bufferlist::iterator& p,
+ bufferlist *out)
+{
+ bufferlist::iterator start = p;
+ __u32 n;
+ ::decode(n, p);
+ unsigned len = 4;
+ while (n--) {
+ __u32 l;
+ ::decode(l, p);
+ p.advance(l);
+ len += 4 + l;
+ ::decode(l, p);
+ p.advance(l);
+ len += 4 + l;
+ }
+ start.copy(len, *out);
+}
+
+void decode_str_set_to_bl(bufferlist::iterator& p,
+ bufferlist *out)
+{
+ bufferlist::iterator start = p;
+ __u32 n;
+ ::decode(n, p);
+ unsigned len = 4;
+ while (n--) {
+ __u32 l;
+ ::decode(l, p);
+ p.advance(l);
+ len += 4 + l;
+ }
+ start.copy(len, *out);
+}
+
ObjectStore *ObjectStore::create(CephContext *cct,
const string& type,
const string& data,
::encode(*attrset, bl);
}
+// this isn't the best place for these, but...
+void decode_str_str_map_to_bl(bufferlist::iterator& p, bufferlist *out);
+void decode_str_set_to_bl(bufferlist::iterator& p, bufferlist *out);
+
// Flag bits
typedef uint32_t osflagbits_t;
const int SKIP_JOURNAL_REPLAY = 1 << 0;
void decode_attrset(map<string,bufferlist>& aset) {
::decode(aset, data_bl_p);
}
+ void decode_attrset_bl(bufferlist *pbl) {
+ decode_str_str_map_to_bl(data_bl_p, pbl);
+ }
void decode_keyset(set<string> &keys){
::decode(keys, data_bl_p);
}
+ void decode_keyset_bl(bufferlist *pbl){
+ decode_str_set_to_bl(data_bl_p, pbl);
+ }
const ghobject_t &get_oid(__le32 oid_id) {
assert(oid_id < objects.size());