doc/api/libbabeltrace2/DoxygenLayout.xml: use `topics` tab
[babeltrace.git] / src / lib / error.c
index 65638b9394436d0e93c2a632f214b20c646cba19..77064005dc3ddfcc24e3ac1b6830635bbb0a8591 100644 (file)
@@ -1,23 +1,7 @@
 /*
- * Copyright (c) 2019 Philippe Proulx <pproulx@efficios.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
+ * SPDX-License-Identifier: MIT
  *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
+ * Copyright (c) 2019 Philippe Proulx <pproulx@efficios.com>
  */
 
 #define BT_LOG_TAG "LIB/ERROR"
 #include <babeltrace2/babeltrace.h>
 
 #include "error.h"
-#include "graph/message/iterator.h"
 #include "graph/component.h"
 #include "graph/component-class.h"
+#include "graph/iterator.h"
 #include "common/assert.h"
-#include "lib/assert-pre.h"
+#include "common/common.h"
+#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))
@@ -170,8 +156,6 @@ int init_error_cause(struct bt_error_cause *cause,
                goto end;
        }
 
-       BT_LIB_LOGD("Initialized error cause: %!+r", cause);
-
 end:
        return ret;
 }
@@ -315,8 +299,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;
@@ -356,8 +342,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;
@@ -422,14 +410,15 @@ 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;
 }
 
-BT_HIDDEN
 struct bt_error *bt_error_create(void)
 {
        struct bt_error *error;
@@ -459,7 +448,6 @@ end:
        return error;
 }
 
-BT_HIDDEN
 void bt_error_destroy(struct bt_error *error)
 {
        if (!error) {
@@ -477,7 +465,6 @@ end:
        return;
 }
 
-BT_HIDDEN
 int bt_error_append_cause_from_unknown(struct bt_error *error,
                const char *module_name, const char *file_name,
                uint64_t line_no, const char *msg_fmt, va_list args)
@@ -505,11 +492,9 @@ int bt_error_append_cause_from_unknown(struct bt_error *error,
        cause = NULL;
 
 end:
-       destroy_error_cause(cause);
        return status;
 }
 
-BT_HIDDEN
 int bt_error_append_cause_from_component(
                struct bt_error *error, bt_self_component *self_comp,
                const char *file_name, uint64_t line_no,
@@ -538,11 +523,9 @@ int bt_error_append_cause_from_component(
        cause = NULL;
 
 end:
-       destroy_error_cause(&cause->base);
        return status;
 }
 
-BT_HIDDEN
 int bt_error_append_cause_from_component_class(
                struct bt_error *error,
                bt_self_component_class *self_comp_class,
@@ -572,11 +555,9 @@ int bt_error_append_cause_from_component_class(
        cause = NULL;
 
 end:
-       destroy_error_cause(&cause->base);
        return status;
 }
 
-BT_HIDDEN
 int bt_error_append_cause_from_message_iterator(
                struct bt_error *error, bt_self_message_iterator *self_iter,
                const char *file_name, uint64_t line_no,
@@ -605,7 +586,6 @@ int bt_error_append_cause_from_message_iterator(
        cause = NULL;
 
 end:
-       destroy_error_cause(&cause->base);
        return status;
 }
 
@@ -615,106 +595,119 @@ uint64_t error_cause_count(const bt_error *error)
        return error->causes ? error->causes->len : 0;
 }
 
+BT_EXPORT
 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);
 }
 
+BT_EXPORT
 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);
 }
 
+BT_EXPORT
 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];
 }
 
+BT_EXPORT
 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;
 }
 
+BT_EXPORT
 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;
 }
 
+BT_EXPORT
 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;
 }
 
+BT_EXPORT
 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;
 }
 
+BT_EXPORT
 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;
 }
 
+BT_EXPORT
 const char *bt_error_cause_component_actor_get_component_name(
                const struct bt_error_cause *cause)
 {
        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;
 }
 
+BT_EXPORT
 bt_component_class_type bt_error_cause_component_actor_get_component_class_type(
                const struct bt_error_cause *cause)
 {
        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;
 }
 
+BT_EXPORT
 const char *bt_error_cause_component_actor_get_component_class_name(
                const struct bt_error_cause *cause)
 {
        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;
 }
 
+BT_EXPORT
 const char *bt_error_cause_component_actor_get_plugin_name(
                const struct bt_error_cause *cause)
 {
        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;
 }
 
+BT_EXPORT
 bt_component_class_type
 bt_error_cause_component_class_actor_get_component_class_type(
                const struct bt_error_cause *cause)
@@ -722,49 +715,53 @@ 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;
 }
 
+BT_EXPORT
 const char *bt_error_cause_component_class_actor_get_component_class_name(
                const struct bt_error_cause *cause)
 {
        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;
 }
 
+BT_EXPORT
 const char *bt_error_cause_component_class_actor_get_plugin_name(
                const struct bt_error_cause *cause)
 {
        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;
 }
 
+BT_EXPORT
 const char *bt_error_cause_message_iterator_actor_get_component_name(
                const struct bt_error_cause *cause)
 {
        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;
 }
 
+BT_EXPORT
 const char *
 bt_error_cause_message_iterator_actor_get_component_output_port_name(
                const struct bt_error_cause *cause)
@@ -772,12 +769,13 @@ 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;
 }
 
+BT_EXPORT
 bt_component_class_type
 bt_error_cause_message_iterator_actor_get_component_class_type(
                const struct bt_error_cause *cause)
@@ -785,32 +783,34 @@ 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;
 }
 
+BT_EXPORT
 const char *bt_error_cause_message_iterator_actor_get_component_class_name(
                const struct bt_error_cause *cause)
 {
        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;
 }
 
+BT_EXPORT
 const char *bt_error_cause_message_iterator_actor_get_plugin_name(
                const struct bt_error_cause *cause)
 {
        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.030612 seconds and 4 git commands to generate.