/*
- * 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 <stdlib.h>
#include <stdint.h>
-#include <babeltrace2/error-const.h>
-#include <babeltrace2/error-cause-const.h>
+#include <babeltrace2/babeltrace.h>
#include "error.h"
#include "graph/message/iterator.h"
#include "graph/component.h"
#include "graph/component-class.h"
#include "common/assert.h"
-#include "lib/assert-pre.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))
type_str = "sink";
break;
default:
- abort();
+ bt_common_abort();
}
if (comp_class_id->plugin_name->len > 0) {
return cause;
}
+static
struct bt_error_cause_message_iterator_actor *
create_error_cause_message_iterator_actor(struct bt_message_iterator *iter,
const char *file_name, uint64_t line_no)
{
struct bt_error_cause_message_iterator_actor *cause;
- struct bt_self_component_port_input_message_iterator *input_port_iter;
+ struct bt_message_iterator *input_port_iter;
int ret;
BT_LOGD_STR("Creating error cause object (message iterator actor).");
* message iterator, which is a self component port input
* message iterator.
*/
- BT_ASSERT(iter->type ==
- BT_MESSAGE_ITERATOR_TYPE_SELF_COMPONENT_PORT_INPUT);
input_port_iter = (void *) iter;
cause = g_new0(struct bt_error_cause_message_iterator_actor, 1);
if (!cause) {
struct bt_error_cause *cause = NULL;
int status = BT_FUNC_STATUS_OK;
- BT_ASSERT_PRE_NON_NULL(error, "Error");
- BT_ASSERT_PRE_NON_NULL(module_name, "Module name");
- BT_ASSERT_PRE_NON_NULL(file_name, "Function name");
- BT_ASSERT_PRE_NON_NULL(msg_fmt, "Message format string");
+ BT_ASSERT(error);
+ BT_ASSERT(module_name);
+ BT_ASSERT(file_name);
+ BT_ASSERT(msg_fmt);
BT_LOGD("Appending error cause from unknown actor: "
"module-name=\"%s\", func-name=\"%s\", line-no=%" PRIu64,
module_name, file_name, line_no);
struct bt_error_cause_component_actor *cause = NULL;
int status = BT_FUNC_STATUS_OK;
- BT_ASSERT_PRE_NON_NULL(error, "Error");
- BT_ASSERT_PRE_NON_NULL(self_comp, "Component");
- BT_ASSERT_PRE_NON_NULL(file_name, "Function name");
- BT_ASSERT_PRE_NON_NULL(msg_fmt, "Message format string");
+ BT_ASSERT(error);
+ BT_ASSERT(self_comp);
+ BT_ASSERT(file_name);
+ BT_ASSERT(msg_fmt);
BT_LIB_LOGD("Appending error cause from component actor: %![comp-]+c",
self_comp);
cause = create_error_cause_component_actor((void *) self_comp,
struct bt_error_cause_component_class_actor *cause = NULL;
int status = BT_FUNC_STATUS_OK;
- BT_ASSERT_PRE_NON_NULL(error, "Error");
- BT_ASSERT_PRE_NON_NULL(self_comp_class, "Component class");
- BT_ASSERT_PRE_NON_NULL(file_name, "Function name");
- BT_ASSERT_PRE_NON_NULL(msg_fmt, "Message format string");
+ BT_ASSERT(error);
+ BT_ASSERT(self_comp_class);
+ BT_ASSERT(file_name);
+ BT_ASSERT(msg_fmt);
BT_LIB_LOGD("Appending error cause from component class actor: "
"%![comp-cls-]+C", self_comp_class);
cause = create_error_cause_component_class_actor(
struct bt_error_cause_message_iterator_actor *cause = NULL;
int status = BT_FUNC_STATUS_OK;
- BT_ASSERT_PRE_NON_NULL(error, "Error");
- BT_ASSERT_PRE_NON_NULL(self_iter, "Message iterator");
- BT_ASSERT_PRE_NON_NULL(file_name, "Function name");
- BT_ASSERT_PRE_NON_NULL(msg_fmt, "Message format string");
+ BT_ASSERT(error);
+ BT_ASSERT(self_iter);
+ BT_ASSERT(file_name);
+ BT_ASSERT(msg_fmt);
BT_LIB_LOGD("Appending error cause from message iterator actor: "
"%![comp-]+i", self_iter);
cause = create_error_cause_message_iterator_actor(
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];
}
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;
}
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;
}
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;
}
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;
}
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;
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;
}
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;
}
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;
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;
}
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;
}
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;
}
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;
}
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;