From b9a35b3c7442367ab8831acf417f2481c5920313 Mon Sep 17 00:00:00 2001 From: Sebastien Ponce Date: Thu, 23 Jan 2014 11:08:51 +0100 Subject: [PATCH] Extracted RadosXattrIter from librados.cc into independent .h anc .cc files. This makes this interface usable by clients of librados. Signed-off-by: Sebastien Ponce --- src/librados/Makefile.am | 6 ++++-- src/librados/RadosXattrIter.cc | 27 ++++++++++++++++++++++++ src/librados/RadosXattrIter.h | 38 ++++++++++++++++++++++++++++++++++ src/librados/librados.cc | 32 +++++++--------------------- 4 files changed, 77 insertions(+), 26 deletions(-) create mode 100644 src/librados/RadosXattrIter.cc create mode 100644 src/librados/RadosXattrIter.h diff --git a/src/librados/Makefile.am b/src/librados/Makefile.am index 23e9167fe4c7..a7d02ad853c8 100644 --- a/src/librados/Makefile.am +++ b/src/librados/Makefile.am @@ -2,7 +2,8 @@ librados_la_SOURCES = \ 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} @@ -20,4 +21,5 @@ noinst_HEADERS += \ librados/AioCompletionImpl.h \ librados/IoCtxImpl.h \ librados/PoolAsyncCompletionImpl.h \ - librados/RadosClient.h + librados/RadosClient.h \ + librados/RadosXattrIter.h diff --git a/src/librados/RadosXattrIter.cc b/src/librados/RadosXattrIter.cc new file mode 100644 index 000000000000..c0f23f67967a --- /dev/null +++ b/src/librados/RadosXattrIter.cc @@ -0,0 +1,27 @@ +// -*- 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 + * + * 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; +} diff --git a/src/librados/RadosXattrIter.h b/src/librados/RadosXattrIter.h new file mode 100644 index 000000000000..35c870438403 --- /dev/null +++ b/src/librados/RadosXattrIter.h @@ -0,0 +1,38 @@ +// -*- 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 + * + * 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 +#include + +#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 attrset; + std::map::iterator i; + char *val; + }; +}; + +#endif diff --git a/src/librados/librados.cc b/src/librados/librados.cc index 2358fb406e8c..130ecc447461 100644 --- a/src/librados/librados.cc +++ b/src/librados/librados.cc @@ -27,6 +27,7 @@ #include "librados/IoCtxImpl.h" #include "librados/PoolAsyncCompletionImpl.h" #include "librados/RadosClient.h" +#include "librados/RadosXattrIter.h" #include #include @@ -2602,27 +2603,10 @@ extern "C" int rados_getxattr(rados_ioctx_t io, const char *o, const char *name, return ret; } -class RadosXattrsIter { -public: - RadosXattrsIter() - : val(NULL) - { - i = attrset.end(); - } - ~RadosXattrsIter() - { - free(val); - val = NULL; - } - std::map attrset; - std::map::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; @@ -2634,7 +2618,7 @@ extern "C" int rados_getxattrs(rados_ioctx_t io, const char *oid, } it->i = it->attrset.begin(); - RadosXattrsIter **iret = (RadosXattrsIter**)iter; + librados::RadosXattrsIter **iret = (librados::RadosXattrsIter**)iter; *iret = it; *iter = it; return 0; @@ -2643,7 +2627,7 @@ extern "C" int rados_getxattrs(rados_ioctx_t io, const char *oid, extern "C" int rados_getxattrs_next(rados_xattrs_iter_t iter, const char **name, const char **val, size_t *len) { - RadosXattrsIter *it = static_cast(iter); + librados::RadosXattrsIter *it = static_cast(iter); if (it->i == it->attrset.end()) { *name = NULL; *val = NULL; @@ -2667,7 +2651,7 @@ extern "C" int rados_getxattrs_next(rados_xattrs_iter_t iter, extern "C" void rados_getxattrs_end(rados_xattrs_iter_t iter) { - RadosXattrsIter *it = static_cast(iter); + librados::RadosXattrsIter *it = static_cast(iter); delete it; } @@ -3480,9 +3464,9 @@ public: }; 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(); } @@ -3492,7 +3476,7 @@ extern "C" void rados_read_op_getxattrs(rados_read_op_t read_op, 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; -- 2.47.3