]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rados.py: correct some C types
authorJosh Durgin <josh.durgin@inktank.com>
Tue, 4 Jun 2013 20:23:36 +0000 (13:23 -0700)
committerSage Weil <sage@inktank.com>
Thu, 6 Jun 2013 20:55:21 +0000 (13:55 -0700)
trunc was getting size_t instead of uint64_t, leading to bad results
in 32-bit environments. Explicitly cast to the desired type
everywhere, so it's clear the correct type is being used.

Fixes: #5233
Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
(cherry picked from commit 6dd7d469000144b499af84bda9b735710bb5cec3)

src/pybind/rados.py

index b0597350a4f4966e6df930a261d0272adba0c515..9a0164e434617f762b757291403f1fad4da88436 100755 (executable)
@@ -163,7 +163,7 @@ Rados object in state %s." % (self.state))
         length = 20
         while True:
             ret_buf = create_string_buffer(length)
-            ret = self.librados.rados_conf_get(self.cluster, option,
+            ret = self.librados.rados_conf_get(self.cluster, c_char_p(option),
                                                 ret_buf, c_size_t(length))
             if (ret == 0):
                 return ret_buf.value
@@ -262,11 +262,11 @@ Rados object in state %s." % (self.state))
 
     def get_fsid(self):
         self.require_state("connected")
-        fsid_len = 36
-        fsid = create_string_buffer(fsid_len + 1)
+        buf_len = 37
+        fsid = create_string_buffer(buf_len)
         ret = self.librados.rados_cluster_fsid(self.cluster,
                                                byref(fsid),
-                                               fsid_len + 1)
+                                               c_size_t(buf_len))
         if ret < 0:
             raise make_ex(ret, "error getting cluster fsid")
         return fsid.value
@@ -342,7 +342,7 @@ class SnapIterator(object):
         while True:
             self.snaps = (ctypes.c_uint64 * num_snaps)()
             ret = self.ioctx.librados.rados_ioctx_snap_list(self.ioctx.io,
-                                self.snaps, num_snaps)
+                                self.snaps, c_int(num_snaps))
             if (ret >= 0):
                 self.max_snap = ret
                 break
@@ -363,7 +363,7 @@ ioctx '%s'" % self.ioctx.name)
         while True:
             name = create_string_buffer(name_len)
             ret = self.ioctx.librados.rados_ioctx_snap_get_name(self.ioctx.io, \
-                                snap_id, byref(name), name_len)
+                                c_uint64(snap_id), byref(name), c_int(name_len))
             if (ret == 0):
                 name_len = ret
                 break
@@ -660,7 +660,7 @@ written." % (self.name, ret, length))
         self.require_ioctx_open()
         if not isinstance(key, str):
             raise TypeError('key must be a string')
-        ret = self.librados.rados_trunc(self.io, c_char_p(key), c_size_t(size))
+        ret = self.librados.rados_trunc(self.io, c_char_p(key), c_uint64(size))
         if ret < 0:
             raise make_ex(ret, "Ioctx.trunc(%s): failed to truncate %s" % (self.name, key))
         return ret