X-Git-Url: https://git.efficios.com/?a=blobdiff_plain;f=src%2Fcommon%2Fcommon.h;h=19f4c128443acafbac5b0efe1bd8f6dd42d61539;hb=6375b9429f8332f3eacc2ec795aa1924c73d9cc8;hp=7fc2ba186cc7f260bde965ba3f3fe1538e35a2eb;hpb=de821fe507f035622c474f097b226f30cd3c7491;p=babeltrace.git diff --git a/src/common/common.h b/src/common/common.h index 7fc2ba18..19f4c128 100644 --- a/src/common/common.h +++ b/src/common/common.h @@ -1,29 +1,13 @@ -#ifndef BABELTRACE_COMMON_INTERNAL_H -#define BABELTRACE_COMMON_INTERNAL_H - /* + * SPDX-License-Identifier: MIT + * * Copyright (c) 2018 EfficiOS Inc. and Linux Foundation * Copyright (c) 2018 Philippe Proulx - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. */ +#ifndef BABELTRACE_COMMON_INTERNAL_H +#define BABELTRACE_COMMON_INTERNAL_H + #include #include #include @@ -44,24 +28,76 @@ #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" +#ifdef __cplusplus +extern "C" { +#endif + +#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; @@ -140,6 +176,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); @@ -164,6 +221,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 @@ -361,6 +422,9 @@ int bt_common_get_term_size(unsigned int *width, unsigned int *height); 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 @@ -372,13 +436,13 @@ 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); + ret = read(fd, ((char *) buf) + i, count - i); if (ret < 0) { if (errno == EINTR) { #ifdef BT_LOG_WRITE_CUR_LVL @@ -398,7 +462,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: @@ -567,7 +631,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; @@ -589,7 +653,7 @@ GString *bt_common_field_path_string(struct bt_field_path *path) g_string_append(str, ", "); break; default: - abort(); + bt_common_abort(); } } @@ -633,6 +697,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: @@ -667,7 +733,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)) { @@ -745,7 +811,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 @@ -787,4 +853,24 @@ void bt_common_g_string_append_c(GString *str, char c) str->str[len + 1] = '\0'; } +static inline +const char *bt_common_component_class_type_string( + enum bt_component_class_type type) +{ + switch (type) { + case BT_COMPONENT_CLASS_TYPE_SOURCE: + return "SOURCE"; + case BT_COMPONENT_CLASS_TYPE_SINK: + return "SINK"; + case BT_COMPONENT_CLASS_TYPE_FILTER: + return "FILTER"; + default: + return "(unknown)"; + } +} + +#ifdef __cplusplus +} +#endif + #endif /* BABELTRACE_COMMON_INTERNAL_H */