X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fcommon%2Fcommon.h;h=0fdad32fcd54cad9a1498fa0b2b06a44c51bb9c7;hb=4fa90f321f51af8f5bfc48eee1435e2f41d853b3;hp=ef9a715fed9871aeb8c4310eb713f41993c0dc8f;hpb=ae83436ea714ed6a8a97c54f8128ab6b63ed557d;p=babeltrace.git diff --git a/src/common/common.h b/src/common/common.h index ef9a715f..0fdad32f 100644 --- a/src/common/common.h +++ b/src/common/common.h @@ -33,11 +33,10 @@ #include #include -#include -#include -#include -#include -#include +#include + +#define __BT_IN_BABELTRACE_H +#include #include "common/assert.h" #include "common/macros.h" @@ -92,7 +91,7 @@ const char *bt_common_get_system_plugin_path(void); * 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`. @@ -309,7 +308,7 @@ void bt_common_custom_snprintf(char *buf, size_t buf_size, * 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 @@ -327,13 +326,37 @@ size_t bt_common_get_page_size(void); 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 * 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; @@ -347,15 +370,18 @@ ssize_t bt_common_read(int fd, void *buf, size_t count) 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; } @@ -543,25 +569,62 @@ 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_WARNING: + return "BT_LOGGING_LEVEL_WARNING"; + 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) @@ -653,11 +716,4 @@ end: 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; -} - #endif /* BABELTRACE_COMMON_INTERNAL_H */