]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
pybind: make the binding aware about rados_nobjects_list_next2(). 39322/head
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Thu, 4 Feb 2021 20:32:40 +0000 (20:32 +0000)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Fri, 5 Feb 2021 12:54:22 +0000 (12:54 +0000)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/pybind/rados/c_rados.pxd
src/pybind/rados/mock_rados.pxi
src/pybind/rados/rados.pyx

index 97ee5d0b9063c5ce846a36bbd1a91900e689b2f8..1f171dd4741482b2a12a13cf85652e6de1233df0 100644 (file)
@@ -191,6 +191,13 @@ cdef extern from "rados/librados.h" nogil:
 
     int rados_nobjects_list_open(rados_ioctx_t io, rados_list_ctx_t *ctx)
     int rados_nobjects_list_next(rados_list_ctx_t ctx, const char **entry, const char **key, const char **nspace)
+    int rados_nobjects_list_next2(rados_list_ctx_t ctx,
+                                  const char **entry,
+                                  const char **key,
+                                  const char **nspace,
+                                  size_t *entry_size,
+                                  size_t *key_size,
+                                  size_t *nspace)
     void rados_nobjects_list_close(rados_list_ctx_t ctx)
 
     int rados_ioctx_pool_requires_alignment2(rados_ioctx_t io, int * requires)
index 38053af8020e3efa384d3eaad16b6480d07c760e..94d6b378dc7a6b53b6709c589ec9f777148d15c4 100644 (file)
@@ -267,6 +267,9 @@ cdef nogil:
         pass
     int rados_nobjects_list_next(rados_list_ctx_t ctx, const char **entry, const char **key, const char **nspace):
         pass
+    int rados_nobjects_list_next2(rados_list_ctx_t ctx, const char **entry, const char **key, const char **nspace,
+                                 size_t *entry_size, size_t *key_size, size_t *nspace_size):
+        pass
     void rados_nobjects_list_close(rados_list_ctx_t ctx):
         pass
 
index 0c300ca4047782b36826b390533f742572145671..36ecd9fe3d63efd8bbaef476c6380abdc87b6d9c 100644 (file)
@@ -1420,16 +1420,20 @@ cdef class ObjectIterator(object):
             const char *key_ = NULL
             const char *locator_ = NULL
             const char *nspace_ = NULL
+            size_t key_size_ = 0
+            size_t locator_size_ = 0
+            size_t nspace_size_ = 0
 
         with nogil:
-            ret = rados_nobjects_list_next(self.ctx, &key_, &locator_, &nspace_)
+            ret = rados_nobjects_list_next2(self.ctx, &key_, &locator_, &nspace_,
+                                            &key_size_, &locator_size_, &nspace_size_)
 
         if ret < 0:
             raise StopIteration()
 
-        key = decode_cstr(key_)
-        locator = decode_cstr(locator_) if locator_ != NULL else None
-        nspace = decode_cstr(nspace_) if nspace_ != NULL else None
+        key = decode_cstr(key_[:key_size_])
+        locator = decode_cstr(locator_[:locator_size_]) if locator_ != NULL else None
+        nspace = decode_cstr(nspace_[:nspace_size_]) if nspace_ != NULL else None
         return Object(self.ioctx, key, locator, nspace)
 
     def __dealloc__(self):