#include <stdarg.h>
#include "error.h"
-#include "common/assert.h"
#include "lib/assert-cond.h"
#include "lib/func-status.h"
+#define BT_ASSERT_PRE_FILE_NAME_NON_NULL(_file_name) \
+ BT_ASSERT_PRE_NON_NULL("file-name", (_file_name), "File name");
+
+#define BT_ASSERT_PRE_MSG_FMT_NON_NULL(_msg_fmt) \
+ BT_ASSERT_PRE_NON_NULL("message-format", (_msg_fmt), "Message format");
+
/*
* This points to the thread's error object, or it's `NULL` if there's
* no current error object.
*/
static __thread struct bt_error *thread_error;
+BT_EXPORT
const struct bt_error *bt_current_thread_take_error(void)
{
struct bt_error *error = thread_error;
return error;
}
+BT_EXPORT
void bt_current_thread_clear_error(void)
{
bt_error_destroy(thread_error);
thread_error = NULL;
}
+BT_EXPORT
void bt_current_thread_move_error(const struct bt_error *error)
{
BT_ASSERT_PRE_ERROR_NON_NULL(error);
return status;
}
+BT_EXPORT
enum bt_current_thread_error_append_cause_status
bt_current_thread_error_append_cause_from_unknown(
const char *module_name, const char *file_name,
try_create_thread_error();
va_list args;
- BT_ASSERT_PRE_NON_NULL(module_name, "Module name");
- BT_ASSERT_PRE_NON_NULL(file_name, "File name");
- BT_ASSERT_PRE_NON_NULL(msg_fmt, "Message format string");
+ BT_ASSERT_PRE_NON_NULL("module-name", module_name, "Module name");
+ BT_ASSERT_PRE_FILE_NAME_NON_NULL(file_name);
+ BT_ASSERT_PRE_MSG_FMT_NON_NULL(msg_fmt);
if (status) {
goto end;
return status;
}
+BT_EXPORT
enum bt_current_thread_error_append_cause_status
bt_current_thread_error_append_cause_from_component(
bt_self_component *self_comp, const char *file_name,
va_list args;
BT_ASSERT_PRE_COMP_NON_NULL(self_comp);
- BT_ASSERT_PRE_NON_NULL(file_name, "File name");
- BT_ASSERT_PRE_NON_NULL(msg_fmt, "Message format string");
+ BT_ASSERT_PRE_FILE_NAME_NON_NULL(file_name);
+ BT_ASSERT_PRE_MSG_FMT_NON_NULL(msg_fmt);
if (status) {
goto end;
return status;
}
+BT_EXPORT
enum bt_current_thread_error_append_cause_status
bt_current_thread_error_append_cause_from_component_class(
bt_self_component_class *self_comp_class, const char *file_name,
va_list args;
BT_ASSERT_PRE_COMP_CLS_NON_NULL(self_comp_class);
- BT_ASSERT_PRE_NON_NULL(file_name, "File name");
- BT_ASSERT_PRE_NON_NULL(msg_fmt, "Message format string");
+ BT_ASSERT_PRE_FILE_NAME_NON_NULL(file_name);
+ BT_ASSERT_PRE_MSG_FMT_NON_NULL(msg_fmt);
if (status) {
goto end;
return status;
}
+BT_EXPORT
enum bt_current_thread_error_append_cause_status
bt_current_thread_error_append_cause_from_message_iterator(
bt_self_message_iterator *self_iter, const char *file_name,
va_list args;
BT_ASSERT_PRE_MSG_ITER_NON_NULL(self_iter);
- BT_ASSERT_PRE_NON_NULL(file_name, "File name");
- BT_ASSERT_PRE_NON_NULL(msg_fmt, "Message format string");
+ BT_ASSERT_PRE_FILE_NAME_NON_NULL(file_name);
+ BT_ASSERT_PRE_MSG_FMT_NON_NULL(msg_fmt);
if (status) {
goto end;