librados/librados.cc \
librados/RadosClient.cc \
librados/IoCtxImpl.cc \
- librados/snap_set_diff.cc
+ librados/snap_set_diff.cc \
+ librados/RadosXattrIter.cc
# We need this to avoid basename conflicts with the librados build tests in test/Makefile.am
librados_la_CXXFLAGS = ${AM_CXXFLAGS}
librados/AioCompletionImpl.h \
librados/IoCtxImpl.h \
librados/PoolAsyncCompletionImpl.h \
- librados/RadosClient.h
+ librados/RadosClient.h \
+ librados/RadosXattrIter.h
--- /dev/null
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+/*
+ * Ceph - scalable distributed file system
+ *
+ * Copyright (C) 2014 Sebastien Ponce <sebastien.ponce@cern.ch>
+ *
+ * This is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software
+ * Foundation. See file COPYING.
+ *
+ */
+
+#include "RadosXattrIter.h"
+
+librados::RadosXattrsIter::RadosXattrsIter()
+ : val(NULL)
+{
+ i = attrset.end();
+}
+
+librados::RadosXattrsIter::~RadosXattrsIter()
+{
+ free(val);
+ val = NULL;
+}
--- /dev/null
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+/*
+ * Ceph - scalable distributed file system
+ *
+ * Copyright (C) 2014 Sebastien Ponce <sebastien.ponce@cern.ch>
+ *
+ * This is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software
+ * Foundation. See file COPYING.
+ *
+ */
+
+#ifndef CEPH_LIBRADOS_XATTRITER_H
+#define CEPH_LIBRADOS_XATTRITER_H
+
+#include <string>
+#include <map>
+
+#include "include/buffer.h"
+
+namespace librados {
+
+ /**
+ * iterator object used in implementation of the extrenal
+ * attributes part of the C interface of librados
+ */
+ struct RadosXattrsIter {
+ RadosXattrsIter();
+ ~RadosXattrsIter();
+ std::map<std::string, bufferlist> attrset;
+ std::map<std::string, bufferlist>::iterator i;
+ char *val;
+ };
+};
+
+#endif
#include "librados/IoCtxImpl.h"
#include "librados/PoolAsyncCompletionImpl.h"
#include "librados/RadosClient.h"
+#include "librados/RadosXattrIter.h"
#include <cls/lock/cls_lock_client.h>
#include <string>
return ret;
}
-class RadosXattrsIter {
-public:
- RadosXattrsIter()
- : val(NULL)
- {
- i = attrset.end();
- }
- ~RadosXattrsIter()
- {
- free(val);
- val = NULL;
- }
- std::map<std::string, bufferlist> attrset;
- std::map<std::string, bufferlist>::iterator i;
- char *val;
-};
-
extern "C" int rados_getxattrs(rados_ioctx_t io, const char *oid,
rados_xattrs_iter_t *iter)
{
- RadosXattrsIter *it = new RadosXattrsIter();
+ librados::RadosXattrsIter *it = new librados::RadosXattrsIter();
if (!it)
return -ENOMEM;
librados::IoCtxImpl *ctx = (librados::IoCtxImpl *)io;
}
it->i = it->attrset.begin();
- RadosXattrsIter **iret = (RadosXattrsIter**)iter;
+ librados::RadosXattrsIter **iret = (librados::RadosXattrsIter**)iter;
*iret = it;
*iter = it;
return 0;
extern "C" int rados_getxattrs_next(rados_xattrs_iter_t iter,
const char **name, const char **val, size_t *len)
{
- RadosXattrsIter *it = static_cast<RadosXattrsIter*>(iter);
+ librados::RadosXattrsIter *it = static_cast<librados::RadosXattrsIter*>(iter);
if (it->i == it->attrset.end()) {
*name = NULL;
*val = NULL;
extern "C" void rados_getxattrs_end(rados_xattrs_iter_t iter)
{
- RadosXattrsIter *it = static_cast<RadosXattrsIter*>(iter);
+ librados::RadosXattrsIter *it = static_cast<librados::RadosXattrsIter*>(iter);
delete it;
}
};
class C_XattrsIter : public Context {
- RadosXattrsIter *iter;
+ librados::RadosXattrsIter *iter;
public:
- C_XattrsIter(RadosXattrsIter *iter) : iter(iter) {}
+ C_XattrsIter(librados::RadosXattrsIter *iter) : iter(iter) {}
void finish(int r) {
iter->i = iter->attrset.begin();
}
rados_xattrs_iter_t *iter,
int *prval)
{
- RadosXattrsIter *xattrs_iter = new RadosXattrsIter;
+ librados::RadosXattrsIter *xattrs_iter = new librados::RadosXattrsIter;
((::ObjectOperation *)read_op)->getxattrs(&xattrs_iter->attrset, prval);
((::ObjectOperation *)read_op)->add_handler(new C_XattrsIter(xattrs_iter));
*iter = xattrs_iter;