lib: add null checks before "casting" to "base class"
[babeltrace.git] / src / lib / error.c
index 1429af06acf0a065334a58663f6616fed2d4f620..bd8259ab71057103385d75b711ffd59a5508007a 100644 (file)
@@ -19,8 +19,9 @@
 #include "lib/assert-cond.h"
 #include "lib/func-status.h"
 
-#define BT_ASSERT_PRE_CAUSE_HAS_ACTOR_TYPE(_cause, _exp_type)          \
-       BT_ASSERT_PRE(((const struct bt_error_cause *) (_cause))->actor_type == _exp_type, \
+#define BT_ASSERT_PRE_CAUSE_HAS_ACTOR_TYPE(_cause, _exp_type_name, _exp_type) \
+       BT_ASSERT_PRE("error-cause-has-" _exp_type_name "-actor",       \
+               ((const struct bt_error_cause *) (_cause))->actor_type == _exp_type, \
                "Unexpected error cause's actor type: type=%s, exp-type=%s", \
                bt_error_cause_actor_type_string(((const struct bt_error_cause *) (_cause))->actor_type), \
                bt_error_cause_actor_type_string(_exp_type))
@@ -299,8 +300,10 @@ struct bt_error_cause_component_actor *create_error_cause_component_actor(
        goto end;
 
 error:
-       destroy_error_cause(&cause->base);
-       cause = NULL;
+       if (cause) {
+               destroy_error_cause(&cause->base);
+               cause = NULL;
+       }
 
 end:
        return cause;
@@ -340,8 +343,10 @@ create_error_cause_component_class_actor(struct bt_component_class *comp_cls,
        goto end;
 
 error:
-       destroy_error_cause(&cause->base);
-       cause = NULL;
+       if (cause) {
+               destroy_error_cause(&cause->base);
+               cause = NULL;
+       }
 
 end:
        return cause;
@@ -406,8 +411,10 @@ create_error_cause_message_iterator_actor(struct bt_message_iterator *iter,
        goto end;
 
 error:
-       destroy_error_cause(&cause->base);
-       cause = NULL;
+       if (cause) {
+               destroy_error_cause(&cause->base);
+               cause = NULL;
+       }
 
 end:
        return cause;
@@ -522,7 +529,10 @@ int bt_error_append_cause_from_component(
        cause = NULL;
 
 end:
-       destroy_error_cause(&cause->base);
+       if (cause) {
+               destroy_error_cause(&cause->base);
+       }
+
        return status;
 }
 
@@ -556,7 +566,10 @@ int bt_error_append_cause_from_component_class(
        cause = NULL;
 
 end:
-       destroy_error_cause(&cause->base);
+       if (cause) {
+               destroy_error_cause(&cause->base);
+       }
+
        return status;
 }
 
@@ -589,7 +602,10 @@ int bt_error_append_cause_from_message_iterator(
        cause = NULL;
 
 end:
-       destroy_error_cause(&cause->base);
+       if (cause) {
+               destroy_error_cause(&cause->base);
+       }
+
        return status;
 }
 
@@ -601,20 +617,20 @@ uint64_t error_cause_count(const bt_error *error)
 
 uint64_t bt_error_get_cause_count(const bt_error *error)
 {
-       BT_ASSERT_PRE_NON_NULL(error, "Error");
+       BT_ASSERT_PRE_ERROR_NON_NULL(error);
        return error_cause_count(error);
 }
 
 void bt_error_release(const struct bt_error *error)
 {
-       BT_ASSERT_PRE_NON_NULL(error, "Error");
+       BT_ASSERT_PRE_ERROR_NON_NULL(error);
        bt_error_destroy((void *) error);
 }
 
 const struct bt_error_cause *bt_error_borrow_cause_by_index(
                const bt_error *error, uint64_t index)
 {
-       BT_ASSERT_PRE_NON_NULL(error, "Error");
+       BT_ASSERT_PRE_ERROR_NON_NULL(error);
        BT_ASSERT_PRE_VALID_INDEX(index, error_cause_count(error));
        return error->causes->pdata[index];
 }
@@ -622,31 +638,31 @@ const struct bt_error_cause *bt_error_borrow_cause_by_index(
 enum bt_error_cause_actor_type bt_error_cause_get_actor_type(
                const struct bt_error_cause *cause)
 {
-       BT_ASSERT_PRE_NON_NULL(cause, "Error cause");
+       BT_ASSERT_PRE_ERROR_CAUSE_NON_NULL(cause);
        return cause->actor_type;
 }
 
 const char *bt_error_cause_get_message(const struct bt_error_cause *cause)
 {
-       BT_ASSERT_PRE_NON_NULL(cause, "Error cause");
+       BT_ASSERT_PRE_ERROR_CAUSE_NON_NULL(cause);
        return cause->message->str;
 }
 
 const char *bt_error_cause_get_module_name(const struct bt_error_cause *cause)
 {
-       BT_ASSERT_PRE_NON_NULL(cause, "Error cause");
+       BT_ASSERT_PRE_ERROR_CAUSE_NON_NULL(cause);
        return cause->module_name->str;
 }
 
 const char *bt_error_cause_get_file_name(const struct bt_error_cause *cause)
 {
-       BT_ASSERT_PRE_NON_NULL(cause, "Error cause");
+       BT_ASSERT_PRE_ERROR_CAUSE_NON_NULL(cause);
        return cause->file_name->str;
 }
 
 uint64_t bt_error_cause_get_line_number(const bt_error_cause *cause)
 {
-       BT_ASSERT_PRE_NON_NULL(cause, "Error cause");
+       BT_ASSERT_PRE_ERROR_CAUSE_NON_NULL(cause);
        return cause->line_no;
 }
 
@@ -656,8 +672,8 @@ const char *bt_error_cause_component_actor_get_component_name(
        const struct bt_error_cause_component_actor *spec_cause =
                (const void *) cause;
 
-       BT_ASSERT_PRE_NON_NULL(cause, "Error cause");
-       BT_ASSERT_PRE_CAUSE_HAS_ACTOR_TYPE(cause,
+       BT_ASSERT_PRE_ERROR_CAUSE_NON_NULL(cause);
+       BT_ASSERT_PRE_CAUSE_HAS_ACTOR_TYPE(cause, "component",
                BT_ERROR_CAUSE_ACTOR_TYPE_COMPONENT);
        return spec_cause->comp_name->str;
 }
@@ -668,8 +684,8 @@ bt_component_class_type bt_error_cause_component_actor_get_component_class_type(
        const struct bt_error_cause_component_actor *spec_cause =
                (const void *) cause;
 
-       BT_ASSERT_PRE_NON_NULL(cause, "Error cause");
-       BT_ASSERT_PRE_CAUSE_HAS_ACTOR_TYPE(cause,
+       BT_ASSERT_PRE_ERROR_CAUSE_NON_NULL(cause);
+       BT_ASSERT_PRE_CAUSE_HAS_ACTOR_TYPE(cause, "component",
                BT_ERROR_CAUSE_ACTOR_TYPE_COMPONENT);
        return spec_cause->comp_class_id.type;
 }
@@ -680,8 +696,8 @@ const char *bt_error_cause_component_actor_get_component_class_name(
        const struct bt_error_cause_component_actor *spec_cause =
                (const void *) cause;
 
-       BT_ASSERT_PRE_NON_NULL(cause, "Error cause");
-       BT_ASSERT_PRE_CAUSE_HAS_ACTOR_TYPE(cause,
+       BT_ASSERT_PRE_ERROR_CAUSE_NON_NULL(cause);
+       BT_ASSERT_PRE_CAUSE_HAS_ACTOR_TYPE(cause, "component",
                BT_ERROR_CAUSE_ACTOR_TYPE_COMPONENT);
        return spec_cause->comp_class_id.name->str;
 }
@@ -692,8 +708,8 @@ const char *bt_error_cause_component_actor_get_plugin_name(
        const struct bt_error_cause_component_actor *spec_cause =
                (const void *) cause;
 
-       BT_ASSERT_PRE_NON_NULL(cause, "Error cause");
-       BT_ASSERT_PRE_CAUSE_HAS_ACTOR_TYPE(cause,
+       BT_ASSERT_PRE_ERROR_CAUSE_NON_NULL(cause);
+       BT_ASSERT_PRE_CAUSE_HAS_ACTOR_TYPE(cause, "component",
                BT_ERROR_CAUSE_ACTOR_TYPE_COMPONENT);
        return spec_cause->comp_class_id.plugin_name->len > 0 ?
                spec_cause->comp_class_id.plugin_name->str : NULL;
@@ -706,8 +722,8 @@ bt_error_cause_component_class_actor_get_component_class_type(
        const struct bt_error_cause_component_class_actor *spec_cause =
                (const void *) cause;
 
-       BT_ASSERT_PRE_NON_NULL(cause, "Error cause");
-       BT_ASSERT_PRE_CAUSE_HAS_ACTOR_TYPE(cause,
+       BT_ASSERT_PRE_ERROR_CAUSE_NON_NULL(cause);
+       BT_ASSERT_PRE_CAUSE_HAS_ACTOR_TYPE(cause, "component-class",
                BT_ERROR_CAUSE_ACTOR_TYPE_COMPONENT_CLASS);
        return spec_cause->comp_class_id.type;
 }
@@ -718,8 +734,8 @@ const char *bt_error_cause_component_class_actor_get_component_class_name(
        const struct bt_error_cause_component_class_actor *spec_cause =
                (const void *) cause;
 
-       BT_ASSERT_PRE_NON_NULL(cause, "Error cause");
-       BT_ASSERT_PRE_CAUSE_HAS_ACTOR_TYPE(cause,
+       BT_ASSERT_PRE_ERROR_CAUSE_NON_NULL(cause);
+       BT_ASSERT_PRE_CAUSE_HAS_ACTOR_TYPE(cause, "component-class",
                BT_ERROR_CAUSE_ACTOR_TYPE_COMPONENT_CLASS);
        return spec_cause->comp_class_id.name->str;
 }
@@ -730,8 +746,8 @@ const char *bt_error_cause_component_class_actor_get_plugin_name(
        const struct bt_error_cause_component_class_actor *spec_cause =
                (const void *) cause;
 
-       BT_ASSERT_PRE_NON_NULL(cause, "Error cause");
-       BT_ASSERT_PRE_CAUSE_HAS_ACTOR_TYPE(cause,
+       BT_ASSERT_PRE_ERROR_CAUSE_NON_NULL(cause);
+       BT_ASSERT_PRE_CAUSE_HAS_ACTOR_TYPE(cause, "component-class",
                BT_ERROR_CAUSE_ACTOR_TYPE_COMPONENT_CLASS);
        return spec_cause->comp_class_id.plugin_name->len > 0 ?
                spec_cause->comp_class_id.plugin_name->str : NULL;
@@ -743,8 +759,8 @@ const char *bt_error_cause_message_iterator_actor_get_component_name(
        const struct bt_error_cause_message_iterator_actor *spec_cause =
                (const void *) cause;
 
-       BT_ASSERT_PRE_NON_NULL(cause, "Error cause");
-       BT_ASSERT_PRE_CAUSE_HAS_ACTOR_TYPE(cause,
+       BT_ASSERT_PRE_ERROR_CAUSE_NON_NULL(cause);
+       BT_ASSERT_PRE_CAUSE_HAS_ACTOR_TYPE(cause, "message-iterator",
                BT_ERROR_CAUSE_ACTOR_TYPE_MESSAGE_ITERATOR);
        return spec_cause->comp_name->str;
 }
@@ -756,8 +772,8 @@ bt_error_cause_message_iterator_actor_get_component_output_port_name(
        const struct bt_error_cause_message_iterator_actor *spec_cause =
                (const void *) cause;
 
-       BT_ASSERT_PRE_NON_NULL(cause, "Error cause");
-       BT_ASSERT_PRE_CAUSE_HAS_ACTOR_TYPE(cause,
+       BT_ASSERT_PRE_ERROR_CAUSE_NON_NULL(cause);
+       BT_ASSERT_PRE_CAUSE_HAS_ACTOR_TYPE(cause, "message-iterator",
                BT_ERROR_CAUSE_ACTOR_TYPE_MESSAGE_ITERATOR);
        return spec_cause->output_port_name->str;
 }
@@ -769,8 +785,8 @@ bt_error_cause_message_iterator_actor_get_component_class_type(
        const struct bt_error_cause_message_iterator_actor *spec_cause =
                (const void *) cause;
 
-       BT_ASSERT_PRE_NON_NULL(cause, "Error cause");
-       BT_ASSERT_PRE_CAUSE_HAS_ACTOR_TYPE(cause,
+       BT_ASSERT_PRE_ERROR_CAUSE_NON_NULL(cause);
+       BT_ASSERT_PRE_CAUSE_HAS_ACTOR_TYPE(cause, "message-iterator",
                BT_ERROR_CAUSE_ACTOR_TYPE_MESSAGE_ITERATOR);
        return spec_cause->comp_class_id.type;
 }
@@ -781,8 +797,8 @@ const char *bt_error_cause_message_iterator_actor_get_component_class_name(
        const struct bt_error_cause_message_iterator_actor *spec_cause =
                (const void *) cause;
 
-       BT_ASSERT_PRE_NON_NULL(cause, "Error cause");
-       BT_ASSERT_PRE_CAUSE_HAS_ACTOR_TYPE(cause,
+       BT_ASSERT_PRE_ERROR_CAUSE_NON_NULL(cause);
+       BT_ASSERT_PRE_CAUSE_HAS_ACTOR_TYPE(cause, "message-iterator",
                BT_ERROR_CAUSE_ACTOR_TYPE_MESSAGE_ITERATOR);
        return spec_cause->comp_class_id.name->str;
 }
@@ -793,8 +809,8 @@ const char *bt_error_cause_message_iterator_actor_get_plugin_name(
        const struct bt_error_cause_message_iterator_actor *spec_cause =
                (const void *) cause;
 
-       BT_ASSERT_PRE_NON_NULL(cause, "Error cause");
-       BT_ASSERT_PRE_CAUSE_HAS_ACTOR_TYPE(cause,
+       BT_ASSERT_PRE_ERROR_CAUSE_NON_NULL(cause);
+       BT_ASSERT_PRE_CAUSE_HAS_ACTOR_TYPE(cause, "message-iterator",
                BT_ERROR_CAUSE_ACTOR_TYPE_MESSAGE_ITERATOR);
        return spec_cause->comp_class_id.plugin_name->len > 0 ?
                spec_cause->comp_class_id.plugin_name->str : NULL;
This page took 0.029486 seconds and 4 git commands to generate.