X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=common%2Fcommon.c;h=363ffe2da5725e031954edc75f8c0d3928640ae2;hb=2f5a009b5615db990687d0775038fdc82bbe8071;hp=b92fc89dd660aa85917c55071eedb996789986ce;hpb=108e5a1e5e7d7037061bc84acf148e8558074b3e;p=babeltrace.git diff --git a/common/common.c b/common/common.c index b92fc89d..363ffe2d 100644 --- a/common/common.c +++ b/common/common.c @@ -22,10 +22,12 @@ * SOFTWARE. */ +#define BT_LOG_TAG "COMMON" +#include "logging.h" + #include #include #include -#include #include #include #include @@ -35,6 +37,10 @@ #include #include +#ifndef __MINGW32__ +#include +#endif + #define SYSTEM_PLUGIN_PATH INSTALL_LIBDIR "/babeltrace/plugins" #define HOME_ENV_VAR "HOME" #define HOME_PLUGIN_SUBPATH "/.local/lib/babeltrace/plugins" @@ -89,23 +95,40 @@ 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()); } +#endif /* __MINGW32__ */ -static char *bt_secure_getenv(const char *name) +static +char *bt_secure_getenv(const char *name) { if (bt_common_is_setuid_setgid()) { - printf_error("Disregarding %s environment variable for setuid/setgid binary", - name); + BT_LOGD("Disregarding environment variable for setuid/setgid binary: " + "name=\"%s\"", name); return NULL; } return getenv(name); } -static const char *get_home_dir(void) +#ifdef __MINGW32__ +static +const char *bt_get_home_dir(void) +{ + return g_get_home_dir(); +} +#else /* __MINGW32__ */ +static +const char *bt_get_home_dir(void) { char *val = NULL; struct passwd *pwd; @@ -123,21 +146,25 @@ static const char *get_home_dir(void) end: return val; } +#endif /* __MINGW32__ */ BT_HIDDEN char *bt_common_get_home_plugin_path(void) { char *path = NULL; const char *home_dir; + size_t length; - home_dir = get_home_dir(); + home_dir = bt_get_home_dir(); if (!home_dir) { goto end; } - if (strlen(home_dir) + strlen(HOME_PLUGIN_SUBPATH) + 1 >= PATH_MAX) { - printf_error("Home directory path is too long: `%s`\n", - home_dir); + length = strlen(home_dir) + strlen(HOME_PLUGIN_SUBPATH) + 1; + + if (length >= PATH_MAX) { + BT_LOGW("Home directory path is too long: length=%zu", + length); goto end; } @@ -174,19 +201,19 @@ int bt_common_append_plugin_path_dirs(const char *paths, GPtrArray *dirs) while (at < end) { GString *path; - const char *next_colon; + const char *next_sep; - next_colon = strchr(at, ':'); - if (next_colon == at) { + next_sep = strchr(at, G_SEARCHPATH_SEPARATOR); + if (next_sep == at) { /* * Empty path: try next character (supported * to conform to the typical parsing of $PATH). */ at++; continue; - } else if (!next_colon) { - /* No more colon: use the remaining */ - next_colon = paths + strlen(paths); + } else if (!next_sep) { + /* No more separator: use the remaining */ + next_sep = paths + strlen(paths); } path = g_string_new(NULL); @@ -194,8 +221,8 @@ int bt_common_append_plugin_path_dirs(const char *paths, GPtrArray *dirs) goto error; } - g_string_append_len(path, at, next_colon - at); - at = next_colon + 1; + g_string_append_len(path, at, next_sep - at); + at = next_sep + 1; g_ptr_array_add(dirs, path); } @@ -219,6 +246,7 @@ bool bt_common_colors_supported(void) static bool supports_colors = false; static bool supports_colors_set = false; const char *term; + const char *force; if (supports_colors_set) { goto end; @@ -226,6 +254,12 @@ bool bt_common_colors_supported(void) supports_colors_set = true; + force = getenv("BABELTRACE_FORCE_COLORS"); + if (force && strcmp(force, "1") == 0) { + supports_colors = true; + goto end; + } + term = getenv("TERM"); if (!term) { goto end; @@ -1135,7 +1169,8 @@ size_t bt_common_get_page_size(void) page_size = bt_sysconf(_SC_PAGESIZE); if (page_size < 0) { - printf_error("Cannot get system page size."); + BT_LOGF("Cannot get system's page size: ret=%d", + page_size); abort(); }