X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fcommon%2Fcommon.h;h=1abe37ec11b094bf80713ad212a462f6e6f32f93;hb=8b305066676fc7aa433e8eb668f9de8802008025;hp=4a2362e34e14be0477d07f47c64c535100ce1e38;hpb=76b6c2f71a485f0cc9b766e1a54b9f7330ccd907;p=babeltrace.git diff --git a/src/common/common.h b/src/common/common.h index 4a2362e3..1abe37ec 100644 --- a/src/common/common.h +++ b/src/common/common.h @@ -31,6 +31,7 @@ #include #include #include +#include #include #include @@ -43,24 +44,72 @@ #include "common/macros.h" #include "common/safe.h" -#define BT_COMMON_COLOR_RESET "\033[0m" -#define BT_COMMON_COLOR_BOLD "\033[1m" -#define BT_COMMON_COLOR_FG_DEFAULT "\033[39m" -#define BT_COMMON_COLOR_FG_RED "\033[31m" -#define BT_COMMON_COLOR_FG_GREEN "\033[32m" -#define BT_COMMON_COLOR_FG_YELLOW "\033[33m" -#define BT_COMMON_COLOR_FG_BLUE "\033[34m" -#define BT_COMMON_COLOR_FG_MAGENTA "\033[35m" -#define BT_COMMON_COLOR_FG_CYAN "\033[36m" -#define BT_COMMON_COLOR_FG_LIGHT_GRAY "\033[37m" -#define BT_COMMON_COLOR_BG_DEFAULT "\033[49m" -#define BT_COMMON_COLOR_BG_RED "\033[41m" -#define BT_COMMON_COLOR_BG_GREEN "\033[42m" -#define BT_COMMON_COLOR_BG_YELLOW "\033[43m" -#define BT_COMMON_COLOR_BG_BLUE "\033[44m" -#define BT_COMMON_COLOR_BG_MAGENTA "\033[45m" -#define BT_COMMON_COLOR_BG_CYAN "\033[46m" -#define BT_COMMON_COLOR_BG_LIGHT_GRAY "\033[47m" +#define BT_COMMON_COLOR_RESET "\033[0m" +#define BT_COMMON_COLOR_BOLD "\033[1m" +#define BT_COMMON_COLOR_FG_DEFAULT "\033[39m" +#define BT_COMMON_COLOR_FG_RED "\033[31m" +#define BT_COMMON_COLOR_FG_GREEN "\033[32m" +#define BT_COMMON_COLOR_FG_YELLOW "\033[33m" +#define BT_COMMON_COLOR_FG_BLUE "\033[34m" +#define BT_COMMON_COLOR_FG_MAGENTA "\033[35m" +#define BT_COMMON_COLOR_FG_CYAN "\033[36m" +#define BT_COMMON_COLOR_FG_LIGHT_GRAY "\033[37m" +#define BT_COMMON_COLOR_FG_BOLD_RED "\033[1m\033[31m" +#define BT_COMMON_COLOR_FG_BOLD_GREEN "\033[1m\033[32m" +#define BT_COMMON_COLOR_FG_BOLD_YELLOW "\033[1m\033[33m" +#define BT_COMMON_COLOR_FG_BOLD_BLUE "\033[1m\033[34m" +#define BT_COMMON_COLOR_FG_BOLD_MAGENTA "\033[1m\033[35m" +#define BT_COMMON_COLOR_FG_BOLD_CYAN "\033[1m\033[36m" +#define BT_COMMON_COLOR_FG_BOLD_LIGHT_GRAY "\033[1m\033[37m" +#define BT_COMMON_COLOR_FG_BRIGHT_RED "\033[91m" +#define BT_COMMON_COLOR_FG_BRIGHT_GREEN "\033[92m" +#define BT_COMMON_COLOR_FG_BRIGHT_YELLOW "\033[93m" +#define BT_COMMON_COLOR_FG_BRIGHT_BLUE "\033[94m" +#define BT_COMMON_COLOR_FG_BRIGHT_MAGENTA "\033[95m" +#define BT_COMMON_COLOR_FG_BRIGHT_CYAN "\033[96m" +#define BT_COMMON_COLOR_FG_BRIGHT_LIGHT_GRAY "\033[97m" +#define BT_COMMON_COLOR_BG_DEFAULT "\033[49m" +#define BT_COMMON_COLOR_BG_RED "\033[41m" +#define BT_COMMON_COLOR_BG_GREEN "\033[42m" +#define BT_COMMON_COLOR_BG_YELLOW "\033[43m" +#define BT_COMMON_COLOR_BG_BLUE "\033[44m" +#define BT_COMMON_COLOR_BG_MAGENTA "\033[45m" +#define BT_COMMON_COLOR_BG_CYAN "\033[46m" +#define BT_COMMON_COLOR_BG_LIGHT_GRAY "\033[47m" + +enum bt_common_color_when { + BT_COMMON_COLOR_WHEN_AUTO, + BT_COMMON_COLOR_WHEN_ALWAYS, + BT_COMMON_COLOR_WHEN_NEVER, +}; + +struct bt_common_color_codes { + const char *reset; + const char *bold; + const char *fg_default; + const char *fg_red; + const char *fg_green; + const char *fg_yellow; + const char *fg_blue; + const char *fg_magenta; + const char *fg_cyan; + const char *fg_light_gray; + const char *fg_bright_red; + const char *fg_bright_green; + const char *fg_bright_yellow; + const char *fg_bright_blue; + const char *fg_bright_magenta; + const char *fg_bright_cyan; + const char *fg_bright_light_gray; + const char *bg_default; + const char *bg_red; + const char *bg_green; + const char *bg_yellow; + const char *bg_blue; + const char *bg_magenta; + const char *bg_cyan; + const char *bg_light_gray; +}; struct bt_common_lttng_live_url_parts { GString *proto; @@ -139,6 +188,27 @@ const char *bt_common_color_fg_cyan(void); BT_HIDDEN const char *bt_common_color_fg_light_gray(void); +BT_HIDDEN +const char *bt_common_color_fg_bright_red(void); + +BT_HIDDEN +const char *bt_common_color_fg_bright_green(void); + +BT_HIDDEN +const char *bt_common_color_fg_bright_yellow(void); + +BT_HIDDEN +const char *bt_common_color_fg_bright_blue(void); + +BT_HIDDEN +const char *bt_common_color_fg_bright_magenta(void); + +BT_HIDDEN +const char *bt_common_color_fg_bright_cyan(void); + +BT_HIDDEN +const char *bt_common_color_fg_bright_light_gray(void); + BT_HIDDEN const char *bt_common_color_bg_default(void); @@ -163,6 +233,10 @@ const char *bt_common_color_bg_cyan(void); BT_HIDDEN const char *bt_common_color_bg_light_gray(void); +BT_HIDDEN +void bt_common_color_get_codes(struct bt_common_color_codes *codes, + enum bt_common_color_when use_colors); + /* * Returns the substring from `input` to the first character found * in the list of characters `end_chars`, unescaping any character @@ -351,6 +425,18 @@ GString *bt_common_fold(const char *str, unsigned int total_length, BT_HIDDEN int bt_common_get_term_size(unsigned int *width, unsigned int *height); +/* + * Appends the textual content of `fp` to `str`, starting from its + * current position to the end of the file. + * + * This function does NOT rewind `fp` once it's done or on error. + */ +BT_HIDDEN +int bt_common_append_file_content_to_g_string(GString *str, FILE *fp); + +BT_HIDDEN +void bt_common_abort(void) __attribute__((noreturn)); + /* * Wraps read() function to handle EINTR and partial reads. * On success, it returns `count` received as parameter. On error, it returns a @@ -362,10 +448,10 @@ ssize_t bt_common_read(int fd, void *buf, size_t count, int log_level) size_t i = 0; ssize_t ret; - BT_ASSERT(buf); + BT_ASSERT_DBG(buf); /* Never return an overflow value. */ - BT_ASSERT(count <= SSIZE_MAX); + BT_ASSERT_DBG(count <= SSIZE_MAX); do { ret = read(fd, buf + i, count - i); @@ -388,7 +474,7 @@ ssize_t bt_common_read(int fd, void *buf, size_t count, int log_level) } } i += ret; - BT_ASSERT(i <= count); + BT_ASSERT_DBG(i <= count); } while (count - i > 0 && ret > 0); end: @@ -407,30 +493,46 @@ static inline const char *bt_common_field_class_type_string(enum bt_field_class_type class_type) { switch (class_type) { + case BT_FIELD_CLASS_TYPE_BOOL: + return "BOOL"; + case BT_FIELD_CLASS_TYPE_BIT_ARRAY: + return "BIT_ARRAY"; case BT_FIELD_CLASS_TYPE_UNSIGNED_INTEGER: return "UNSIGNED_INTEGER"; case BT_FIELD_CLASS_TYPE_SIGNED_INTEGER: return "SIGNED_INTEGER"; - case BT_FIELD_CLASS_TYPE_REAL: - return "REAL"; case BT_FIELD_CLASS_TYPE_UNSIGNED_ENUMERATION: return "UNSIGNED_ENUMERATION"; case BT_FIELD_CLASS_TYPE_SIGNED_ENUMERATION: return "SIGNED_ENUMERATION"; + case BT_FIELD_CLASS_TYPE_SINGLE_PRECISION_REAL: + return "SINGLE_PRECISION_REAL"; + case BT_FIELD_CLASS_TYPE_DOUBLE_PRECISION_REAL: + return "DOUBLE_PRECISION_REAL"; case BT_FIELD_CLASS_TYPE_STRING: return "STRING"; case BT_FIELD_CLASS_TYPE_STRUCTURE: return "STRUCTURE"; case BT_FIELD_CLASS_TYPE_STATIC_ARRAY: return "STATIC_ARRAY"; - case BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY: - return "DYNAMIC_ARRAY"; - case BT_FIELD_CLASS_TYPE_VARIANT_WITHOUT_SELECTOR: - return "VARIANT_WITHOUT_SELECTOR"; - case BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_SELECTOR: - return "VARIANT_WITH_UNSIGNED_SELECTOR"; - case BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_SELECTOR: - return "VARIANT_WITH_SIGNED_SELECTOR"; + case BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITHOUT_LENGTH_FIELD: + return "DYNAMIC_ARRAY_WITHOUT_LENGTH_FIELD"; + case BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITH_LENGTH_FIELD: + return "DYNAMIC_ARRAY_WITH_LENGTH_FIELD"; + case BT_FIELD_CLASS_TYPE_OPTION_WITHOUT_SELECTOR_FIELD: + return "OPTION_WITHOUT_SELECTOR_FIELD"; + case BT_FIELD_CLASS_TYPE_OPTION_WITH_BOOL_SELECTOR_FIELD: + return "OPTION_WITH_BOOL_SELECTOR_FIELD"; + case BT_FIELD_CLASS_TYPE_OPTION_WITH_UNSIGNED_INTEGER_SELECTOR_FIELD: + return "OPTION_WITH_UNSIGNED_INTEGER_SELECTOR_FIELD"; + case BT_FIELD_CLASS_TYPE_OPTION_WITH_SIGNED_INTEGER_SELECTOR_FIELD: + return "OPTION_WITH_SIGNED_INTEGER_SELECTOR_FIELD"; + case BT_FIELD_CLASS_TYPE_VARIANT_WITHOUT_SELECTOR_FIELD: + return "VARIANT_WITHOUT_SELECTOR_FIELD"; + case BT_FIELD_CLASS_TYPE_VARIANT_WITH_UNSIGNED_INTEGER_SELECTOR_FIELD: + return "VARIANT_WITH_UNSIGNED_INTEGER_SELECTOR_FIELD"; + case BT_FIELD_CLASS_TYPE_VARIANT_WITH_SIGNED_INTEGER_SELECTOR_FIELD: + return "VARIANT_WITH_SIGNED_INTEGER_SELECTOR_FIELD"; default: return "(unknown)"; } @@ -541,7 +643,7 @@ GString *bt_common_field_path_string(struct bt_field_path *path) GString *str = g_string_new(NULL); uint64_t i; - BT_ASSERT(path); + BT_ASSERT_DBG(path); if (!str) { goto end; @@ -563,7 +665,7 @@ GString *bt_common_field_path_string(struct bt_field_path *path) g_string_append(str, ", "); break; default: - abort(); + bt_common_abort(); } } @@ -607,6 +709,8 @@ const char *bt_common_func_status_string(int status) return "UNKNOWN_OBJECT"; case __BT_FUNC_STATUS_MEMORY_ERROR: return "MEMORY_ERROR"; + case __BT_FUNC_STATUS_USER_ERROR: + return "USER_ERROR"; case __BT_FUNC_STATUS_ERROR: return "ERROR"; case __BT_FUNC_STATUS_OK: @@ -641,7 +745,7 @@ int bt_common_clock_value_from_ns_from_origin( uint64_t value_period_cycles; int64_t ns_to_add; - BT_ASSERT(raw_value); + BT_ASSERT_DBG(raw_value); /* Compute offset part of requested value, in nanoseconds */ if (!bt_safe_to_mul_int64(cc_offset_seconds, NS_PER_S_I)) { @@ -719,7 +823,7 @@ end: * bt_g_string_append_printf cannot be inlined because it expects a * variadic argument list. */ -BT_HIDDEN +BT_HIDDEN __BT_ATTR_FORMAT_PRINTF(2, 3) int bt_common_g_string_append_printf(GString *str, const char *fmt, ...); static inline