Visibility hidden by default
[babeltrace.git] / src / common / common.c
index 86c703411497d96518dd586723844ee54f88a3d4..0cdc17393caf9701a09eead68428a331cc93d27f 100644 (file)
@@ -1,25 +1,9 @@
 /*
- * Babeltrace common functions
+ * SPDX-License-Identifier: MIT
  *
  * Copyright 2016 Philippe Proulx <pproulx@efficios.com>
  *
- * 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.
+ * Babeltrace common functions
  */
 
 #define BT_LOG_OUTPUT_LEVEL log_level
@@ -43,6 +27,7 @@
 #include "common/macros.h"
 #include "common/common.h"
 #include "compat/unistd.h"
+#include "compat/limits.h"
 
 #ifndef __MINGW32__
 #include <pwd.h>
@@ -79,14 +64,107 @@ static const char *bt_common_color_code_bg_magenta = "";
 static const char *bt_common_color_code_bg_cyan = "";
 static const char *bt_common_color_code_bg_light_gray = "";
 
+/*
+ * A color codes structure always filled with the proper color codes for the
+ * terminal.
+ */
+static struct bt_common_color_codes color_codes;
+
+/*
+ * A color codes structure always filled with empty strings, for when we want no
+ * colors.
+ */
+static struct bt_common_color_codes no_color_codes = {
+       "", "", "", "", "", "", "", "", "", "",
+       "", "", "", "", "", "", "", "", "", "",
+       "", "", "", "", "",
+};
+
 static
 void __attribute__((constructor)) bt_common_color_ctor(void)
 {
-       if (bt_common_colors_supported()) {
-               const char *term_env_var;
-               const char *bright_means_bold_env_var;
-               bool bright_means_bold = true;
+       const char *term_env_var;
+       const char *bright_means_bold_env_var;
+       bool bright_means_bold = true;
+       const char *code_fg_bright_red;
+       const char *code_fg_bright_green;
+       const char *code_fg_bright_yellow;
+       const char *code_fg_bright_blue;
+       const char *code_fg_bright_magenta;
+       const char *code_fg_bright_cyan;
+       const char *code_fg_bright_light_gray;
+
+       /*
+        * Check whether or not the terminal supports having
+        * bold foreground colors which do _not_ become bright
+        * colors, that is, the lines
+        *
+        *     $ echo -e "\033[31mTHIS\n\033[1mTHAT\033[0m"
+        *
+        * have the _same_ color, but `THAT` uses a bold font.
+        *
+        * This is the case of the kitty terminal emulator.
+        *
+        * It's also possible with GNOME Terminal since 3.27.2
+        * and xfce4-terminal since 0.8.7 (and GNOME VTE since
+        * 0.51.2), but it's user-configurable. Since we don't
+        * have this configuration value here, assume it's not
+        * the case to support old versions of GNOME Terminal.
+        *
+        * Any user can set the
+        * `BABELTRACE_TERM_COLOR_BRIGHT_MEANS_BOLD` environment
+        * variable to `0` to use the bright foreground color
+        * codes instead of making the normal foreground color
+        * codes bold.
+        *
+        * Summary:
+        *
+        * With kitty or when
+        * `BABELTRACE_TERM_COLOR_BRIGHT_MEANS_BOLD` is `0`:
+        *     Output bright colors using dedicated SGR codes
+        *     90 to 97.
+        *
+        * Otherwise:
+        *     Output bright colors with bold + SGR codes 30 to
+        *     37.
+        */
+       term_env_var = getenv("TERM");
+
+       if (term_env_var && strcmp(term_env_var, "xterm-kitty") == 0) {
+               /*
+                * The kitty terminal emulator supports
+                * non-bright bold foreground colors.
+                */
+               bright_means_bold = false;
+       }
 
+       bright_means_bold_env_var =
+               getenv("BABELTRACE_TERM_COLOR_BRIGHT_MEANS_BOLD");
+
+       if (bright_means_bold_env_var) {
+               bright_means_bold =
+                       !(strcmp(bright_means_bold_env_var, "0") == 0);
+       }
+
+       if (bright_means_bold) {
+               code_fg_bright_red = BT_COMMON_COLOR_FG_BOLD_RED;
+               code_fg_bright_green = BT_COMMON_COLOR_FG_BOLD_GREEN;
+               code_fg_bright_yellow = BT_COMMON_COLOR_FG_BOLD_YELLOW;
+               code_fg_bright_blue = BT_COMMON_COLOR_FG_BOLD_BLUE;
+               code_fg_bright_magenta = BT_COMMON_COLOR_FG_BOLD_MAGENTA;
+               code_fg_bright_cyan = BT_COMMON_COLOR_FG_BOLD_CYAN;
+               code_fg_bright_light_gray = BT_COMMON_COLOR_FG_BOLD_LIGHT_GRAY;
+       } else {
+               code_fg_bright_red = BT_COMMON_COLOR_FG_BRIGHT_RED;
+               code_fg_bright_green = BT_COMMON_COLOR_FG_BRIGHT_GREEN;
+               code_fg_bright_yellow = BT_COMMON_COLOR_FG_BRIGHT_YELLOW;
+               code_fg_bright_blue = BT_COMMON_COLOR_FG_BRIGHT_BLUE;
+               code_fg_bright_magenta = BT_COMMON_COLOR_FG_BRIGHT_MAGENTA;
+               code_fg_bright_cyan = BT_COMMON_COLOR_FG_BRIGHT_CYAN;
+               code_fg_bright_light_gray = BT_COMMON_COLOR_FG_BRIGHT_LIGHT_GRAY;
+       }
+
+       if (bt_common_colors_supported()) {
                bt_common_color_code_reset = BT_COMMON_COLOR_RESET;
                bt_common_color_code_bold = BT_COMMON_COLOR_BOLD;
                bt_common_color_code_fg_default = BT_COMMON_COLOR_FG_DEFAULT;
@@ -98,76 +176,13 @@ void __attribute__((constructor)) bt_common_color_ctor(void)
                bt_common_color_code_fg_cyan = BT_COMMON_COLOR_FG_CYAN;
                bt_common_color_code_fg_light_gray = BT_COMMON_COLOR_FG_LIGHT_GRAY;
 
-               /*
-                * Check whether or not the terminal supports having
-                * bold foreground colors which do _not_ become bright
-                * colors, that is, the lines
-                *
-                *     $ echo -e "\033[31mTHIS\n\033[1mTHAT\033[0m"
-                *
-                * have the _same_ color, but `THAT` uses a bold font.
-                *
-                * This is the case of the kitty terminal emulator.
-                *
-                * It's also possible with GNOME Terminal since 3.27.2
-                * and xfce4-terminal since 0.8.7 (and GNOME VTE since
-                * 0.51.2), but it's user-configurable. Since we don't
-                * have this configuration value here, assume it's not
-                * the case to support old versions of GNOME Terminal.
-                *
-                * Any user can set the
-                * `BABELTRACE_TERM_COLOR_BRIGHT_MEANS_BOLD` environment
-                * variable to `0` to use the bright foreground color
-                * codes instead of making the normal foreground color
-                * codes bold.
-                *
-                * Summary:
-                *
-                * With kitty or when
-                * `BABELTRACE_TERM_COLOR_BRIGHT_MEANS_BOLD` is `0`:
-                *     Output bright colors using dedicated SGR codes
-                *     90 to 97.
-                *
-                * Otherwise:
-                *     Output bright colors with bold + SGR codes 30 to
-                *     37.
-                */
-               term_env_var = getenv("TERM");
-               BT_ASSERT(term_env_var);
-
-               if (strcmp(term_env_var, "xterm-kitty") == 0) {
-                       /*
-                        * The kitty terminal emulator supports
-                        * non-bright bold foreground colors.
-                        */
-                       bright_means_bold = false;
-               }
-
-               bright_means_bold_env_var =
-                       getenv("BABELTRACE_TERM_COLOR_BRIGHT_MEANS_BOLD");
-
-               if (bright_means_bold_env_var) {
-                       bright_means_bold =
-                               !(strcmp(bright_means_bold_env_var, "0") == 0);
-               }
-
-               if (bright_means_bold) {
-                       bt_common_color_code_fg_bright_red = BT_COMMON_COLOR_FG_BOLD_RED;
-                       bt_common_color_code_fg_bright_green = BT_COMMON_COLOR_FG_BOLD_GREEN;
-                       bt_common_color_code_fg_bright_yellow = BT_COMMON_COLOR_FG_BOLD_YELLOW;
-                       bt_common_color_code_fg_bright_blue = BT_COMMON_COLOR_FG_BOLD_BLUE;
-                       bt_common_color_code_fg_bright_magenta = BT_COMMON_COLOR_FG_BOLD_MAGENTA;
-                       bt_common_color_code_fg_bright_cyan = BT_COMMON_COLOR_FG_BOLD_CYAN;
-                       bt_common_color_code_fg_bright_light_gray = BT_COMMON_COLOR_FG_BOLD_LIGHT_GRAY;
-               } else {
-                       bt_common_color_code_fg_bright_red = BT_COMMON_COLOR_FG_BRIGHT_RED;
-                       bt_common_color_code_fg_bright_green = BT_COMMON_COLOR_FG_BRIGHT_GREEN;
-                       bt_common_color_code_fg_bright_yellow = BT_COMMON_COLOR_FG_BRIGHT_YELLOW;
-                       bt_common_color_code_fg_bright_blue = BT_COMMON_COLOR_FG_BRIGHT_BLUE;
-                       bt_common_color_code_fg_bright_magenta = BT_COMMON_COLOR_FG_BRIGHT_MAGENTA;
-                       bt_common_color_code_fg_bright_cyan = BT_COMMON_COLOR_FG_BRIGHT_CYAN;
-                       bt_common_color_code_fg_bright_light_gray = BT_COMMON_COLOR_FG_BRIGHT_LIGHT_GRAY;
-               }
+               bt_common_color_code_fg_bright_red = code_fg_bright_red;
+               bt_common_color_code_fg_bright_green = code_fg_bright_green;
+               bt_common_color_code_fg_bright_yellow = code_fg_bright_yellow;
+               bt_common_color_code_fg_bright_blue = code_fg_bright_blue;
+               bt_common_color_code_fg_bright_magenta = code_fg_bright_magenta;
+               bt_common_color_code_fg_bright_cyan = code_fg_bright_cyan;
+               bt_common_color_code_fg_bright_light_gray = code_fg_bright_light_gray;
 
                bt_common_color_code_bg_default = BT_COMMON_COLOR_BG_DEFAULT;
                bt_common_color_code_bg_red = BT_COMMON_COLOR_BG_RED;
@@ -178,22 +193,45 @@ void __attribute__((constructor)) bt_common_color_ctor(void)
                bt_common_color_code_bg_cyan = BT_COMMON_COLOR_BG_CYAN;
                bt_common_color_code_bg_light_gray = BT_COMMON_COLOR_BG_LIGHT_GRAY;
        }
+
+       color_codes.reset = BT_COMMON_COLOR_RESET;
+       color_codes.bold = BT_COMMON_COLOR_BOLD;
+       color_codes.fg_default = BT_COMMON_COLOR_FG_DEFAULT;
+       color_codes.fg_red = BT_COMMON_COLOR_FG_RED;
+       color_codes.fg_green = BT_COMMON_COLOR_FG_GREEN;
+       color_codes.fg_yellow = BT_COMMON_COLOR_FG_YELLOW;
+       color_codes.fg_blue = BT_COMMON_COLOR_FG_BLUE;
+       color_codes.fg_magenta = BT_COMMON_COLOR_FG_MAGENTA;
+       color_codes.fg_cyan = BT_COMMON_COLOR_FG_CYAN;
+       color_codes.fg_light_gray = BT_COMMON_COLOR_FG_LIGHT_GRAY;
+       color_codes.fg_bright_red = code_fg_bright_red;
+       color_codes.fg_bright_green = code_fg_bright_green;
+       color_codes.fg_bright_yellow = code_fg_bright_yellow;
+       color_codes.fg_bright_blue = code_fg_bright_blue;
+       color_codes.fg_bright_magenta = code_fg_bright_magenta;
+       color_codes.fg_bright_cyan = code_fg_bright_cyan;
+       color_codes.fg_bright_light_gray = code_fg_bright_light_gray;
+       color_codes.bg_default = BT_COMMON_COLOR_BG_DEFAULT;
+       color_codes.bg_red = BT_COMMON_COLOR_BG_RED;
+       color_codes.bg_green = BT_COMMON_COLOR_BG_GREEN;
+       color_codes.bg_yellow = BT_COMMON_COLOR_BG_YELLOW;
+       color_codes.bg_blue = BT_COMMON_COLOR_BG_BLUE;
+       color_codes.bg_magenta = BT_COMMON_COLOR_BG_MAGENTA;
+       color_codes.bg_cyan = BT_COMMON_COLOR_BG_CYAN;
+       color_codes.bg_light_gray = BT_COMMON_COLOR_BG_LIGHT_GRAY;
 }
 
-BT_HIDDEN
 const char *bt_common_get_system_plugin_path(void)
 {
        return SYSTEM_PLUGIN_PATH;
 }
 
 #ifdef __MINGW32__
-BT_HIDDEN
 bool bt_common_is_setuid_setgid(void)
 {
        return false;
 }
 #else /* __MINGW32__ */
-BT_HIDDEN
 bool bt_common_is_setuid_setgid(void)
 {
        return (geteuid() != getuid() || getegid() != getgid());
@@ -239,7 +277,6 @@ end:
 }
 #endif /* __MINGW32__ */
 
-BT_HIDDEN
 char *bt_common_get_home_plugin_path(int log_level)
 {
        char *path = NULL;
@@ -271,7 +308,6 @@ end:
        return path;
 }
 
-BT_HIDDEN
 int bt_common_append_plugin_path_dirs(const char *paths, GPtrArray *dirs)
 {
        int ret = 0;
@@ -355,7 +391,6 @@ end:
        return istty;
 }
 
-BT_HIDDEN
 bool bt_common_colors_supported(void)
 {
        static bool supports_colors = false;
@@ -411,157 +446,149 @@ end:
        return supports_colors;
 }
 
-BT_HIDDEN
 const char *bt_common_color_reset(void)
 {
        return bt_common_color_code_reset;
 }
 
-BT_HIDDEN
 const char *bt_common_color_bold(void)
 {
        return bt_common_color_code_bold;
 }
 
-BT_HIDDEN
 const char *bt_common_color_fg_default(void)
 {
        return bt_common_color_code_fg_default;
 }
 
-BT_HIDDEN
 const char *bt_common_color_fg_red(void)
 {
        return bt_common_color_code_fg_red;
 }
 
-BT_HIDDEN
 const char *bt_common_color_fg_green(void)
 {
        return bt_common_color_code_fg_green;
 }
 
-BT_HIDDEN
 const char *bt_common_color_fg_yellow(void)
 {
        return bt_common_color_code_fg_yellow;
 }
 
-BT_HIDDEN
 const char *bt_common_color_fg_blue(void)
 {
        return bt_common_color_code_fg_blue;
 }
 
-BT_HIDDEN
 const char *bt_common_color_fg_magenta(void)
 {
        return bt_common_color_code_fg_magenta;
 }
 
-BT_HIDDEN
 const char *bt_common_color_fg_cyan(void)
 {
        return bt_common_color_code_fg_cyan;
 }
 
-BT_HIDDEN
 const char *bt_common_color_fg_light_gray(void)
 {
        return bt_common_color_code_fg_light_gray;
 }
 
-BT_HIDDEN
 const char *bt_common_color_fg_bright_red(void)
 {
        return bt_common_color_code_fg_bright_red;
 }
 
-BT_HIDDEN
 const char *bt_common_color_fg_bright_green(void)
 {
        return bt_common_color_code_fg_bright_green;
 }
 
-BT_HIDDEN
 const char *bt_common_color_fg_bright_yellow(void)
 {
        return bt_common_color_code_fg_bright_yellow;
 }
 
-BT_HIDDEN
 const char *bt_common_color_fg_bright_blue(void)
 {
        return bt_common_color_code_fg_bright_blue;
 }
 
-BT_HIDDEN
 const char *bt_common_color_fg_bright_magenta(void)
 {
        return bt_common_color_code_fg_bright_magenta;
 }
 
-BT_HIDDEN
 const char *bt_common_color_fg_bright_cyan(void)
 {
        return bt_common_color_code_fg_bright_cyan;
 }
 
-BT_HIDDEN
 const char *bt_common_color_fg_bright_light_gray(void)
 {
        return bt_common_color_code_fg_bright_light_gray;
 }
 
-BT_HIDDEN
 const char *bt_common_color_bg_default(void)
 {
        return bt_common_color_code_bg_default;
 }
 
-BT_HIDDEN
 const char *bt_common_color_bg_red(void)
 {
        return bt_common_color_code_bg_red;
 }
 
-BT_HIDDEN
 const char *bt_common_color_bg_green(void)
 {
        return bt_common_color_code_bg_green;
 }
 
-BT_HIDDEN
 const char *bt_common_color_bg_yellow(void)
 {
        return bt_common_color_code_bg_yellow;
 }
 
-BT_HIDDEN
 const char *bt_common_color_bg_blue(void)
 {
        return bt_common_color_code_bg_blue;
 }
 
-BT_HIDDEN
 const char *bt_common_color_bg_magenta(void)
 {
        return bt_common_color_code_bg_magenta;
 }
 
-BT_HIDDEN
 const char *bt_common_color_bg_cyan(void)
 {
        return bt_common_color_code_bg_cyan;
 }
 
-BT_HIDDEN
 const char *bt_common_color_bg_light_gray(void)
 {
        return bt_common_color_code_bg_light_gray;
 }
 
-BT_HIDDEN
+void bt_common_color_get_codes(struct bt_common_color_codes *codes,
+               enum bt_common_color_when use_colors)
+{
+       if (use_colors == BT_COMMON_COLOR_WHEN_ALWAYS) {
+               *codes = color_codes;
+       } else if (use_colors == BT_COMMON_COLOR_WHEN_NEVER) {
+               *codes = no_color_codes;
+       } else {
+               BT_ASSERT(use_colors == BT_COMMON_COLOR_WHEN_AUTO);
+
+               if (bt_common_colors_supported()) {
+                       *codes = color_codes;
+               } else {
+                       *codes = no_color_codes;
+               }
+       }
+}
+
 GString *bt_common_string_until(const char *input, const char *escapable_chars,
                const char *end_chars, size_t *end_pos)
 {
@@ -644,7 +671,6 @@ end:
        return output;
 }
 
-BT_HIDDEN
 GString *bt_common_shell_quote(const char *input, bool with_single_quotes)
 {
        GString *output = g_string_new(NULL);
@@ -700,7 +726,6 @@ end:
        return output;
 }
 
-BT_HIDDEN
 bool bt_common_string_is_printable(const char *input)
 {
        const char *ch;
@@ -708,7 +733,7 @@ bool bt_common_string_is_printable(const char *input)
        BT_ASSERT_DBG(input);
 
        for (ch = input; *ch != '\0'; ch++) {
-               if (!isprint(*ch) && *ch != '\n' && *ch != '\r' &&
+               if (!isprint((unsigned char) *ch) && *ch != '\n' && *ch != '\r' &&
                                *ch != '\t' && *ch != '\v') {
                        printable = false;
                        goto end;
@@ -719,7 +744,6 @@ end:
        return printable;
 }
 
-BT_HIDDEN
 void bt_common_destroy_lttng_live_url_parts(
                struct bt_common_lttng_live_url_parts *parts)
 {
@@ -751,7 +775,6 @@ end:
        return;
 }
 
-BT_HIDDEN
 struct bt_common_lttng_live_url_parts bt_common_parse_lttng_live_url(
                const char *url, char *error_buf, size_t error_buf_size)
 {
@@ -930,7 +953,6 @@ end:
        return parts;
 }
 
-BT_HIDDEN
 void bt_common_normalize_star_glob_pattern(char *pattern)
 {
        const char *p;
@@ -990,7 +1012,6 @@ bool at_end_of_pattern(const char *p, const char *pattern, size_t pattern_len)
  * string length of `pattern` or `candidate` if the string is
  * null-terminated.
  */
-BT_HIDDEN
 bool bt_common_star_glob_match(const char *pattern, size_t pattern_len,
                const char *candidate, size_t candidate_len) {
        const char *retry_c = candidate, *retry_p = pattern, *c, *p;
@@ -1225,7 +1246,6 @@ end_of_pattern:
 }
 
 #ifdef __MINGW32__
-BT_HIDDEN
 GString *bt_common_normalize_path(const char *path, const char *wd)
 {
        char *tmp;
@@ -1287,7 +1307,6 @@ void destroy_gstring(void *gstring)
        (void) g_string_free(gstring, TRUE);
 }
 
-BT_HIDDEN
 GString *bt_common_normalize_path(const char *path, const char *wd)
 {
        size_t i;
@@ -1372,7 +1391,6 @@ end:
 }
 #endif
 
-BT_HIDDEN
 size_t bt_common_get_page_size(int log_level)
 {
        int page_size;
@@ -1395,8 +1413,11 @@ size_t bt_common_get_page_size(int log_level)
                size_t _tmp_fmt_size = (size_t) (fmt_ch - *out_fmt_ch); \
                strncpy(_tmp_fmt, *out_fmt_ch, _tmp_fmt_size);          \
                _tmp_fmt[_tmp_fmt_size] = '\0';                         \
+               _Pragma("GCC diagnostic push")                          \
+               _Pragma("GCC diagnostic ignored \"-Wformat-nonliteral\"") \
                _count = snprintf(*buf_ch, _size, _tmp_fmt, __VA_ARGS__); \
-               BT_ASSERT_DBG(_count >= 0);                                     \
+               _Pragma("GCC diagnostic pop")                           \
+               BT_ASSERT_DBG(_count >= 0);                             \
                *buf_ch += MIN(_count, _size);                          \
        } while (0)
 
@@ -1644,7 +1665,6 @@ update_rw_fmt:
        *out_fmt_ch = fmt_ch;
 }
 
-BT_HIDDEN
 void bt_common_custom_vsnprintf(char *buf, size_t buf_size,
                char intro,
                bt_common_handle_custom_specifier_func handle_specifier,
@@ -1688,7 +1708,6 @@ void bt_common_custom_vsnprintf(char *buf, size_t buf_size,
        *buf_ch = '\0';
 }
 
-BT_HIDDEN
 void bt_common_custom_snprintf(char *buf, size_t buf_size,
                char intro,
                bt_common_handle_custom_specifier_func handle_specifier,
@@ -1701,7 +1720,6 @@ void bt_common_custom_snprintf(char *buf, size_t buf_size,
        va_end(args);
 }
 
-BT_HIDDEN
 void bt_common_sep_digits(char *str, unsigned int digits_per_group, char sep)
 {
        const char *rd;
@@ -1804,7 +1822,6 @@ void bt_common_sep_digits(char *str, unsigned int digits_per_group, char sep)
        }
 }
 
-BT_HIDDEN
 GString *bt_common_fold(const char *str, unsigned int total_length,
                unsigned int indent)
 {
@@ -1923,14 +1940,12 @@ end:
 }
 
 #ifdef __MINGW32__
-BT_HIDDEN
 int bt_common_get_term_size(unsigned int *width, unsigned int *height)
 {
        /* Not supported on Windows yet */
        return -1;
 }
 #else /* __MINGW32__ */
-BT_HIDDEN
 int bt_common_get_term_size(unsigned int *width, unsigned int *height)
 {
        int ret = 0;
@@ -1954,7 +1969,6 @@ end:
 }
 #endif /* __MINGW32__ */
 
-BT_HIDDEN
 int bt_common_g_string_append_printf(GString *str, const char *fmt, ...)
 {
        va_list ap;
@@ -1978,7 +1992,7 @@ int bt_common_g_string_append_printf(GString *str, const char *fmt, ...)
                /* Resize. */
                g_string_set_size(str, len + print_len);
                va_start(ap, fmt);
-               print_len = vsprintf(str->str + len, fmt, ap);
+               print_len = vsnprintf(str->str + len, print_len + 1, fmt, ap);
                va_end(ap);
        } else {
                str->len = len + print_len;
@@ -1986,7 +2000,6 @@ int bt_common_g_string_append_printf(GString *str, const char *fmt, ...)
        return print_len;
 }
 
-BT_HIDDEN
 int bt_common_append_file_content_to_g_string(GString *str, FILE *fp)
 {
        const size_t chunk_size = 4096;
@@ -2027,7 +2040,6 @@ end:
        return ret;
 }
 
-BT_HIDDEN
 void bt_common_abort(void)
 {
        static const char * const exec_on_abort_env_name =
This page took 0.029671 seconds and 4 git commands to generate.