#include <stdint.h>
#include <stdlib.h>
#include <unistd.h>
+#include <string.h>
-#include <babeltrace2/graph/self-message-iterator.h>
-#include <babeltrace2/trace-ir/event-class-const.h>
-#include <babeltrace2/trace-ir/field-class-const.h>
-#include <babeltrace2/trace-ir/field-path-const.h>
-#include <babeltrace2/graph/self-component.h>
-#include <babeltrace2/graph/message-iterator-const.h>
-#include <babeltrace2/logging.h>
-#include <babeltrace2/value.h>
+#include <babeltrace2/babeltrace.h>
+
+#define __BT_IN_BABELTRACE_H
+#include <babeltrace2/func-status.h>
#include "common/assert.h"
#include "common/macros.h"
BT_HIDDEN
void bt_common_sep_digits(char *str, unsigned int digits_per_group, char sep);
+/*
+ * This is similar to what the command `fold --spaces` does: it wraps
+ * the input lines of `str`, breaking at spaces, and indenting each line
+ * with `indent` spaces so that each line fits the total length
+ * `total_length`.
+ *
+ * If an original line in `str` contains a word which is >= the content
+ * length (`total_length - indent`), then the corresponding folded line
+ * is also larger than the content length. In other words, breaking at
+ * spaces is a best effort, but it might not be possible.
+ *
+ * The returned string, on success, is owned by the caller.
+ */
+BT_HIDDEN
+GString *bt_common_fold(const char *str, unsigned int total_length,
+ unsigned int indent);
+
+/*
+ * Writes the terminal's width to `*width`, its height to `*height`,
+ * and returns 0 on success, or returns -1 on error.
+ */
+BT_HIDDEN
+int bt_common_get_term_size(unsigned int *width, unsigned int *height);
+
/*
* Wraps read() function to handle EINTR and partial reads.
* On success, it returns `count` received as parameter. On error, it returns a
return "BT_FIELD_CLASS_TYPE_STATIC_ARRAY";
case BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY:
return "BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY";
- case BT_FIELD_CLASS_TYPE_VARIANT:
- return "BT_FIELD_CLASS_TYPE_VARIANT";
+ case BT_FIELD_CLASS_TYPE_VARIANT_WITHOUT_SELECTOR:
+ return "BT_FIELD_CLASS_TYPE_VARIANT_WITHOUT_SELECTOR";
+ case BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_SELECTOR:
+ return "BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_SELECTOR";
+ case BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_SELECTOR:
+ return "BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_SELECTOR";
default:
return "(unknown)";
}
return str;
}
-static inline
-const char *bt_common_self_message_iterator_status_string(
- enum bt_self_message_iterator_status status)
-{
- switch (status) {
- case BT_SELF_MESSAGE_ITERATOR_STATUS_AGAIN:
- return "BT_SELF_MESSAGE_ITERATOR_STATUS_AGAIN";
- case BT_SELF_MESSAGE_ITERATOR_STATUS_END:
- return "BT_SELF_MESSAGE_ITERATOR_STATUS_END";
- case BT_SELF_MESSAGE_ITERATOR_STATUS_OK:
- return "BT_SELF_MESSAGE_ITERATOR_STATUS_OK";
- case BT_SELF_MESSAGE_ITERATOR_STATUS_ERROR:
- return "BT_SELF_MESSAGE_ITERATOR_STATUS_ERROR";
- case BT_SELF_MESSAGE_ITERATOR_STATUS_NOMEM:
- return "BT_SELF_MESSAGE_ITERATOR_STATUS_NOMEM";
- default:
- return "(unknown)";
- }
-};
-
static inline
const char *bt_common_logging_level_string(
enum bt_logging_level level)
return "BT_LOGGING_LEVEL_DEBUG";
case BT_LOGGING_LEVEL_INFO:
return "BT_LOGGING_LEVEL_INFO";
- case BT_LOGGING_LEVEL_WARN:
- return "BT_LOGGING_LEVEL_WARN";
+ case BT_LOGGING_LEVEL_WARNING:
+ return "BT_LOGGING_LEVEL_WARNING";
case BT_LOGGING_LEVEL_ERROR:
return "BT_LOGGING_LEVEL_ERROR";
case BT_LOGGING_LEVEL_FATAL:
};
static inline
-const char *bt_self_component_status_string(
- enum bt_self_component_status status)
+const char *bt_common_func_status_string(int status)
{
switch (status) {
- case BT_SELF_COMPONENT_STATUS_OK:
- return "BT_SELF_COMPONENT_STATUS_OK";
- case BT_SELF_COMPONENT_STATUS_END:
- return "BT_SELF_COMPONENT_STATUS_END";
- case BT_SELF_COMPONENT_STATUS_AGAIN:
- return "BT_SELF_COMPONENT_STATUS_AGAIN";
- case BT_SELF_COMPONENT_STATUS_REFUSE_PORT_CONNECTION:
- return "BT_SELF_COMPONENT_STATUS_REFUSE_PORT_CONNECTION";
- case BT_SELF_COMPONENT_STATUS_ERROR:
- return "BT_SELF_COMPONENT_STATUS_ERROR";
- case BT_SELF_COMPONENT_STATUS_NOMEM:
- return "BT_SELF_COMPONENT_STATUS_NOMEM";
- default:
- return "(unknown)";
- }
-}
-
-static inline
-const char *bt_message_iterator_status_string(
- enum bt_message_iterator_status status)
-{
- switch (status) {
- case BT_MESSAGE_ITERATOR_STATUS_AGAIN:
- return "BT_MESSAGE_ITERATOR_STATUS_AGAIN";
- case BT_MESSAGE_ITERATOR_STATUS_END:
- return "BT_MESSAGE_ITERATOR_STATUS_END";
- case BT_MESSAGE_ITERATOR_STATUS_OK:
- return "BT_MESSAGE_ITERATOR_STATUS_OK";
- case BT_MESSAGE_ITERATOR_STATUS_ERROR:
- return "BT_MESSAGE_ITERATOR_STATUS_ERROR";
- case BT_MESSAGE_ITERATOR_STATUS_NOMEM:
- return "BT_MESSAGE_ITERATOR_STATUS_NOMEM";
+ case __BT_FUNC_STATUS_OVERFLOW:
+ return "OVERFLOW";
+ case __BT_FUNC_STATUS_INVALID_PARAMS:
+ return "INVALID_PARAMS";
+ case __BT_FUNC_STATUS_INVALID_OBJECT:
+ return "INVALID_OBJECT";
+ case __BT_FUNC_STATUS_MEMORY_ERROR:
+ return "MEMORY_ERROR";
+ case __BT_FUNC_STATUS_ERROR:
+ return "ERROR";
+ case __BT_FUNC_STATUS_OK:
+ return "OK";
+ case __BT_FUNC_STATUS_END:
+ return "END";
+ case __BT_FUNC_STATUS_NOT_FOUND:
+ return "NOT_FOUND";
+ case __BT_FUNC_STATUS_AGAIN:
+ return "AGAIN";
+ case __BT_FUNC_STATUS_UNSUPPORTED:
+ return "UNSUPPORTED";
+ case __BT_FUNC_STATUS_CANCELED:
+ return "CANCELED";
default:
return "(unknown)";
}
return ret;
}
+/*
+ * bt_g_string_append_printf cannot be inlined because it expects a
+ * variadic argument list.
+ */
+BT_HIDDEN
+int bt_common_g_string_append_printf(GString *str, const char *fmt, ...);
+
static inline
-enum bt_self_message_iterator_status bt_common_message_iterator_status_to_self(
- enum bt_message_iterator_status status)
+void bt_common_g_string_append(GString *str, const char *s)
{
- return (int) status;
+ gsize len, allocated_len, s_len;
+
+ /* str->len excludes \0. */
+ len = str->len;
+ /* Exclude \0. */
+ allocated_len = str->allocated_len - 1;
+ s_len = strlen(s);
+ if (G_UNLIKELY(allocated_len < len + s_len)) {
+ /* Resize. */
+ g_string_set_size(str, len + s_len);
+ } else {
+ str->len = len + s_len;
+ }
+ memcpy(str->str + len, s, s_len + 1);
+}
+
+static inline
+void bt_common_g_string_append_c(GString *str, char c)
+{
+ gsize len, allocated_len, s_len;
+
+ /* str->len excludes \0. */
+ len = str->len;
+ /* Exclude \0. */
+ allocated_len = str->allocated_len - 1;
+ s_len = 1;
+ if (G_UNLIKELY(allocated_len < len + s_len)) {
+ /* Resize. */
+ g_string_set_size(str, len + s_len);
+ } else {
+ str->len = len + s_len;
+ }
+ str->str[len] = c;
+ str->str[len + 1] = '\0';
}
#endif /* BABELTRACE_COMMON_INTERNAL_H */