---
dm.c | 8 ++++++++
dmraid.c | 14 ++++++++++++++
pyhelpers.h | 39 +++++++++++++++++++++++++++++++++++++++
3 files changed, 61 insertions(+), 0 deletions(-)
diff --git a/dm.c b/dm.c
index a1572f0..e1ddb90 100644
--- a/dm.c
+++ b/dm.c
@@ -297,6 +297,8 @@ pydm_dev_hash(PyObject *self)
static PyObject *
pydm_dev_get(PyObject *self, void *data)
{
+ PB_DM_ASSERT_DEV(((PydmDeviceObject *)self), return NULL);
+
PydmDeviceObject *dev = (PydmDeviceObject *)self;
const char *attr = (const char *)data;
@@ -529,6 +531,8 @@ pydm_table_compare(PydmTableObject *self, PydmTableObject *other)
static PyObject *
pydm_table_get(PyObject *self, void *data)
{
+ PB_DM_ASSERT_TABLE(((PydmTableObject *)self), return NULL);
+
PydmTableObject *table = (PydmTableObject *)self;
const char *attr = (const char *)data;
@@ -1272,6 +1276,8 @@ pydm_map_get_deps(PydmMapObject *map)
PyObject *
pydm_map_get(PyObject *self, void *data)
{
+ PB_DM_ASSERT_MAP(((PydmMapObject *)self), return NULL);
+
PydmMapObject *map = (PydmMapObject *)self;
const char *attr = (const char *)data;
@@ -1457,6 +1463,8 @@ pydm_target_str_method(PyObject *self)
static PyObject *
pydm_target_get(PyObject *self, void *data)
{
+ PB_DM_ASSERT_TARGET(((PydmTargetObject *)self), return NULL);
+
PydmTargetObject *target = (PydmTargetObject *)self;
const char *attr = (const char *)data;
diff --git a/dmraid.c b/dmraid.c
index b9121f4..6d4e7b7 100644
--- a/dmraid.c
+++ b/dmraid.c
@@ -187,6 +187,8 @@ pydmraid_dev_str_method(PyObject *self)
static PyObject *
pydmraid_dev_get(PyObject *self, void *data)
{
+ PB_DMRAID_ASSERT_DEVCTX(((PydmraidDeviceObject *)self), return NULL);
+
PydmraidDeviceObject *dev = (PydmraidDeviceObject *)self;
const char *attr = (const char *)data;
@@ -424,6 +426,8 @@ pydmraid_raiddev_repr_method(PyObject *self)
static PyObject *
pydmraid_raiddev_get(PyObject *self, void *data)
{
+ PB_DMRAID_ASSERT_DEVCTX(((PydmraidRaidDevObject *)self), return NULL);
+
PydmraidRaidDevObject *dev = (PydmraidRaidDevObject *)self;
const char *attr = (const char *)data;
@@ -577,6 +581,8 @@ pydmraid_raidset_repr_method(PyObject *self)
static PyObject *
pydmraid_raidset_get_children(PyObject *self, void *data)
{
+ PB_DMRAID_ASSERT_RSCTX(((PydmraidRaidSetObject *)self), return NULL);
+
PydmraidRaidSetObject *set = (PydmraidRaidSetObject *)self;
struct lib_context *lc = set->ctx->lc;
PyObject *t;
@@ -645,6 +651,8 @@ pydmraid_raidset_get_spares(PyObject *self, void *data)
static PyObject *
pydmraid_raidset_get_table(PyObject *self, void *data)
{
+ PB_DMRAID_ASSERT_RSCTX(((PydmraidRaidSetObject *)self), return NULL);
+
PydmraidRaidSetObject *set = (PydmraidRaidSetObject *)self;
struct lib_context *lc = set->ctx->lc;
struct raid_set *rs = set->rs;
@@ -699,6 +707,8 @@ pydmraid_raidset_get_table(PyObject *self, void *data)
static PyObject *
pydmraid_raidset_get_dm_table(PyObject *self, void *data)
{
+ PB_DMRAID_ASSERT_RSCTX(((PydmraidRaidSetObject *)self), return NULL);
+
PydmraidRaidSetObject *set = (PydmraidRaidSetObject *)self;
struct lib_context *lc = set->ctx->lc;
struct raid_set *rs = set->rs;
@@ -899,6 +909,8 @@ out:
static PyObject *
pydmraid_raidset_get(PyObject *self, void *data)
{
+ PB_DMRAID_ASSERT_RSCTX(((PydmraidRaidSetObject *)self), return NULL);
+
PydmraidRaidSetObject *set = (PydmraidRaidSetObject *)self;
struct lib_context *lc = set->ctx->lc;
struct raid_set *rs = set->rs;
@@ -1108,6 +1120,8 @@ pydmraid_ctx_init_method(PyObject *self, PyObject *args, PyObject *kwds)
static PyObject *
pydmraid_ctx_get(PyObject *self, void *data)
{
+ PB_DMRAID_ASSERT_CTX(((PydmraidContextObject *)self), return NULL);
+
PydmraidContextObject *ctx = (PydmraidContextObject *)self;
const char *attr = (const char *)data;
diff --git a/pyhelpers.h b/pyhelpers.h
index 7822981..de4cedf 100644
--- a/pyhelpers.h
+++ b/pyhelpers.h
@@ -19,6 +19,45 @@
#ifndef _PYBLOCK_PYHELPERS_H
#define _PYBLOCK_PYHELPERS_H 1
+#define PYBLOCK_ASSERT(cond, message, action)\
+ if(!(cond)){\
+ PyErr_SetString(PyExc_AssertionError, message);\
+ action;\
+ }
+
+/* ASSERT functions for dmraid.c */
+#define PB_DMRAID_ASSERT_CTX(a_ctx, action)\
+ PYBLOCK_ASSERT(a_ctx != NULL, "The pyblock context is NULL.", action);\
+ PYBLOCK_ASSERT(a_ctx->lc != NULL, "The dmraid context is NULL.", action)
+
+#define PB_DMRAID_ASSERT_RS(a_rs, action)\
+ PYBLOCK_ASSERT(a_rs != NULL, "The pyblock raidset is NULL.", action);\
+ PYBLOCK_ASSERT(a_rs->rs != NULL, "The dmraid raidset is NULL.", action)
+
+#define PB_DMRAID_ASSERT_DEV(a_dev, action)\
+ PYBLOCK_ASSERT(a_dev != NULL, "The pyblock device is NULL.", action)
+
+#define PB_DMRAID_ASSERT_RSCTX(pb_rs, action)\
+ PB_DMRAID_ASSERT_RS(pb_rs, action);\
+ PB_DMRAID_ASSERT_CTX(pb_rs->ctx, action)
+
+#define PB_DMRAID_ASSERT_DEVCTX(pb_dev, action)\
+ PB_DMRAID_ASSERT_DEV(pb_dev, action);\
+ PB_DMRAID_ASSERT_CTX(pb_dev->ctx, action)
+
+/* ASSERT functions for dm.c */
+#define PB_DM_ASSERT_DEV(a_dev, action)\
+ PYBLOCK_ASSERT(a_dev != NULL, "The pyblock device is NULL.", action)
+
+#define PB_DM_ASSERT_TABLE(a_table, action)\
+ PYBLOCK_ASSERT(a_table != NULL, "The pyblock table is NULL.", action)
+
+#define PB_DM_ASSERT_MAP(a_map, action)\
+ PYBLOCK_ASSERT(a_map != NULL, "The pyblock map is NULL.", action)
+
+#define PB_DM_ASSERT_TARGET(a_target, action)\
+ PYBLOCK_ASSERT(a_target != NULL, "The pyblock target is NULL.", action)
+
extern PyObject *
pyblock_PyString_FromFormatV(const char *format, va_list)
__attribute__ ((format(printf, 1, 0)));