This change is pure refactoring and should have no effect.
---
plugins/python/nbdkit-python-plugin.pod | 12 ++--
plugins/python/python.c | 90 +++++--------------------
2 files changed, 24 insertions(+), 78 deletions(-)
diff --git a/plugins/python/nbdkit-python-plugin.pod
b/plugins/python/nbdkit-python-plugin.pod
index 51e0f57..0fd4dcb 100644
--- a/plugins/python/nbdkit-python-plugin.pod
+++ b/plugins/python/nbdkit-python-plugin.pod
@@ -184,25 +184,25 @@ contents will be garbage collected.
def get_size(h):
# return the size of the disk
-=item C<can_write>
+=item C<is_rotational>
(Optional)
- def can_write(h):
+ def is_rotational(h):
# return a boolean
-=item C<can_flush>
+=item C<can_write>
(Optional)
- def can_flush(h):
+ def can_write(h):
# return a boolean
-=item C<is_rotational>
+=item C<can_flush>
(Optional)
- def is_rotational(h):
+ def can_flush(h):
# return a boolean
=item C<can_trim>
diff --git a/plugins/python/python.c b/plugins/python/python.c
index 20e05e0..9445343 100644
--- a/plugins/python/python.c
+++ b/plugins/python/python.c
@@ -684,110 +684,56 @@ py_zero (void *handle, uint32_t count, uint64_t offset, uint32_t
flags)
}
static int
-py_can_write (void *handle)
+boolean_callback (void *handle, const char *can_fn, const char *plain_fn)
{
PyObject *obj = handle;
PyObject *fn;
PyObject *r;
int ret;
- if (callback_defined ("can_write", &fn)) {
+ if (callback_defined (can_fn, &fn)) {
PyErr_Clear ();
r = PyObject_CallFunctionObjArgs (fn, obj, NULL);
Py_DECREF (fn);
- if (check_python_failure ("can_write") == -1)
+ if (check_python_failure (can_fn) == -1)
return -1;
ret = r == Py_True;
Py_DECREF (r);
return ret;
}
- /* No Python can_write callback, but there's a Python pwrite callback
- * defined, so return 1. (In C modules, nbdkit would do this).
+ /* No Python ‘can_fn’ (eg. ‘can_write’), but if there's a Python
+ * ‘plain_fn’ (eg. ‘pwrite’) callback defined, return 1. (In C
+ * modules, nbdkit would do this).
*/
- else if (callback_defined ("pwrite", NULL))
+ else if (plain_fn && callback_defined (plain_fn, NULL))
return 1;
else
return 0;
}
static int
-py_can_flush (void *handle)
+py_is_rotational (void *handle)
{
- PyObject *obj = handle;
- PyObject *fn;
- PyObject *r;
- int ret;
-
- if (callback_defined ("can_flush", &fn)) {
- PyErr_Clear ();
-
- r = PyObject_CallFunctionObjArgs (fn, obj, NULL);
- Py_DECREF (fn);
- if (check_python_failure ("can_flush") == -1)
- return -1;
- ret = r == Py_True;
- Py_DECREF (r);
- return ret;
- }
- /* No Python can_flush callback, but there's a Python flush callback
- * defined, so return 1. (In C modules, nbdkit would do this).
- */
- else if (callback_defined ("flush", NULL))
- return 1;
- else
- return 0;
+ return boolean_callback (handle, "is_rotational", NULL);
}
static int
-py_is_rotational (void *handle)
+py_can_write (void *handle)
{
- PyObject *obj = handle;
- PyObject *fn;
- PyObject *r;
- int ret;
-
- if (callback_defined ("is_rotational", &fn)) {
- PyErr_Clear ();
+ return boolean_callback (handle, "can_write", "pwrite");
+}
- r = PyObject_CallFunctionObjArgs (fn, obj, NULL);
- Py_DECREF (fn);
- if (check_python_failure ("is_rotational") == -1)
- return -1;
- ret = r == Py_True;
- Py_DECREF (r);
- return ret;
- }
- else
- return 0;
+static int
+py_can_flush (void *handle)
+{
+ return boolean_callback (handle, "can_flush", "flush");
}
static int
py_can_trim (void *handle)
{
- PyObject *obj = handle;
- PyObject *fn;
- PyObject *r;
- int ret;
-
- if (callback_defined ("can_trim", &fn)) {
- PyErr_Clear ();
-
- r = PyObject_CallFunctionObjArgs (fn, obj, NULL);
- Py_DECREF (fn);
- if (check_python_failure ("can_trim") == -1)
- return -1;
- ret = r == Py_True;
- Py_DECREF (r);
- return ret;
- }
- /* No Python can_trim callback, but there's a Python trim callback
- * defined, so return 1. (In C modules, nbdkit would do this).
- */
- else if (callback_defined ("trim", NULL))
- return 1;
- else
- return 0;
+ return boolean_callback (handle, "can_trim", "trim");
}
#define py_config_help \
@@ -812,9 +758,9 @@ static struct nbdkit_plugin plugin = {
.close = py_close,
.get_size = py_get_size,
+ .is_rotational = py_is_rotational,
.can_write = py_can_write,
.can_flush = py_can_flush,
- .is_rotational = py_is_rotational,
.can_trim = py_can_trim,
.pread = py_pread,
--
2.23.0