Port: normalize windows path on Mingw
[babeltrace.git] / common / common.c
index 96532e2bd8bfe0c3a33ca556b2cef3006be1528e..aa67b21f39528436b0d865f37428193ae9777c6e 100644 (file)
@@ -22,6 +22,9 @@
  * SOFTWARE.
  */
 
+#define BT_LOG_TAG "COMMON"
+#include "logging.h"
+
 #include <unistd.h>
 #include <string.h>
 #include <sys/types.h>
@@ -110,8 +113,8 @@ 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);
@@ -150,15 +153,18 @@ char *bt_common_get_home_plugin_path(void)
 {
        char *path = NULL;
        const char *home_dir;
+       size_t length;
 
        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;
        }
 
@@ -195,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);
@@ -215,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);
        }
 
@@ -1072,6 +1078,38 @@ void destroy_gstring(void *gstring)
        (void) g_string_free(gstring, TRUE);
 }
 
+#ifdef __MINGW32__
+BT_HIDDEN
+GString *bt_common_normalize_path(const char *path, const char *wd)
+{
+       char *tmp;
+       GString *norm_path = NULL;
+
+       assert(path);
+
+       tmp = _fullpath(NULL, path, PATH_MAX);
+       if (!tmp) {
+               goto error;
+       }
+
+       norm_path = g_string_new(tmp);
+       if (!norm_path) {
+               goto error;
+       }
+
+       goto end;
+error:
+       if (norm_path) {
+               g_string_free(norm_path, TRUE);
+               norm_path = NULL;
+       }
+end:
+       if (tmp) {
+               free(tmp);
+       }
+       return norm_path;
+}
+#else
 BT_HIDDEN
 GString *bt_common_normalize_path(const char *path, const char *wd)
 {
@@ -1155,6 +1193,7 @@ end:
 
        return norm_path;
 }
+#endif
 
 BT_HIDDEN
 size_t bt_common_get_page_size(void)
@@ -1163,7 +1202,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();
        }
 
This page took 0.028819 seconds and 4 git commands to generate.