* SOFTWARE.
*/
-#include <stdbool.h>
-#include "common/assert.h"
-#include "common/babeltrace.h"
-#include <babeltrace2/trace-ir/field-class-const.h>
-#include <babeltrace2/trace-ir/field-path-const.h>
-#include <babeltrace2/trace-ir/event-class-const.h>
-#include <babeltrace2/graph/self-message-iterator.h>
-#include <babeltrace2/value.h>
+#include <errno.h>
+#include <glib.h>
#include <inttypes.h>
#include <stdarg.h>
+#include <stdbool.h>
#include <stdint.h>
+#include <stdlib.h>
#include <unistd.h>
-#include <glib.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/logging.h>
+#include <babeltrace2/value.h>
+
+#define __BT_FUNC_STATUS_ENABLE
+#include <babeltrace2/func-status.h>
+#undef __BT_FUNC_STATUS_ENABLE
+
+#include "common/assert.h"
+#include "common/macros.h"
+#include "common/safe.h"
#define BT_COMMON_COLOR_RESET "\033[0m"
#define BT_COMMON_COLOR_BOLD "\033[1m"
* return value.
*/
BT_HIDDEN
-char *bt_common_get_home_plugin_path(void);
+char *bt_common_get_home_plugin_path(int log_level);
/*
* Appends the list of directories in `paths` to the array `dirs`.
* Returns the system page size.
*/
BT_HIDDEN
-size_t bt_common_get_page_size(void);
+size_t bt_common_get_page_size(int log_level);
+
+/*
+ * Adds the digit separator `sep` as many times as needed to form groups
+ * of `digits_per_group` digits within `str`. `str` must have enough
+ * room to accomodate the new separators, that is:
+ *
+ * strlen(str) + (strlen(str) / digits_per_group) + 1
+ *
+ * Example: with `str` `1983198398213`, `digits_per_group` 3, and `sep`
+ * `,`, `str` becomes `1,983,198,398,213`.
+ *
+ * `strlen(str)` must not be 0. `digits_per_group` must not be 0. `sep`
+ * must not be `\0`.
+ */
+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.
* value smaller than the requested `count`.
*/
static inline
-ssize_t bt_common_read(int fd, void *buf, size_t count)
+ssize_t bt_common_read(int fd, void *buf, size_t count, int log_level)
{
size_t i = 0;
ssize_t ret;
ret = read(fd, buf + i, count - i);
if (ret < 0) {
if (errno == EINTR) {
-#ifdef BT_LOGD_STR
- BT_LOGD_STR("read() call interrupted. Retrying...");
+#ifdef BT_LOG_WRITE_CUR_LVL
+ BT_LOG_WRITE_CUR_LVL(BT_LOG_DEBUG, log_level,
+ BT_LOG_TAG,
+ "read() call interrupted; retrying...");
#endif
/* retry operation */
continue;
} else {
-#ifdef BT_LOGE_ERRNO
- BT_LOGE_ERRNO("Error while reading", ": fd=%d",
- fd);
+#ifdef BT_LOG_WRITE_ERRNO_CUR_LVL
+ BT_LOG_WRITE_ERRNO_CUR_LVL(BT_LOG_ERROR,
+ log_level, BT_LOG_TAG,
+ "Error while reading", ": fd=%d", fd);
#endif
goto end;
}
}
static inline
-const char *bt_common_self_message_iterator_status_string(
- enum bt_self_message_iterator_status status)
+const char *bt_common_logging_level_string(
+ enum bt_logging_level level)
{
- 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";
+ switch (level) {
+ case BT_LOGGING_LEVEL_TRACE:
+ return "BT_LOGGING_LEVEL_TRACE";
+ case BT_LOGGING_LEVEL_DEBUG:
+ 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_ERROR:
+ return "BT_LOGGING_LEVEL_ERROR";
+ case BT_LOGGING_LEVEL_FATAL:
+ return "BT_LOGGING_LEVEL_FATAL";
+ case BT_LOGGING_LEVEL_NONE:
+ return "BT_LOGGING_LEVEL_NONE";
default:
return "(unknown)";
}
};
+static inline
+const char *bt_common_func_status_string(int status)
+{
+ switch (status) {
+ 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_LOADING_ERROR:
+ return "LOADING_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)";
+ }
+}
+
#define NS_PER_S_I INT64_C(1000000000)
#define NS_PER_S_U UINT64_C(1000000000)
return ret;
}
-static inline
-enum bt_self_message_iterator_status bt_common_message_iterator_status_to_self(
- enum bt_message_iterator_status status)
-{
- return (int) status;
-}
+#include <babeltrace2/undef-func-status.h>
+
#endif /* BABELTRACE_COMMON_INTERNAL_H */