gchar* gconf_address_resource(const gchar* address) { const gchar* start; g_return_val_if_fail(address != NULL, NULL); start = strchr(address, ':'); if (start == NULL) return NULL; else { ++start; start = strchr(start, ':'); if (start == NULL) return NULL; else { ++start; #ifdef G_OS_WIN32 return _gconf_win32_replace_prefix (start); #else return g_strdup(start); #endif } } }
static void setup (void) { char *full_prefix = NULL; char *cp_prefix; wchar_t wcbfr[1000]; G_LOCK (mutex); if (locale_dir != NULL) { G_UNLOCK (mutex); return; } if (GetModuleFileNameW (hmodule, wcbfr, G_N_ELEMENTS (wcbfr))) { full_prefix = g_utf16_to_utf8 (wcbfr, -1, NULL, NULL, NULL); if (GetShortPathNameW (wcbfr, wcbfr, G_N_ELEMENTS (wcbfr))) cp_prefix = g_utf16_to_utf8 (wcbfr, -1, NULL, NULL, NULL); else if (full_prefix) cp_prefix = g_locale_from_utf8 (full_prefix, -1, NULL, NULL, NULL); } if (full_prefix != NULL) { gchar *p = strrchr (full_prefix, '\\'); if (p != NULL) *p = '\0'; p = strrchr (full_prefix, '\\'); if (p && (g_ascii_strcasecmp (p + 1, "bin") == 0)) *p = '\0'; /* Replace backslashes with forward slashes to avoid * problems for instance in makefiles that use * gconftool-2 --get-default-source. */ while ((p = strchr (full_prefix, '\\')) != NULL) *p = '/'; runtime_prefix = full_prefix; } else { runtime_prefix = g_strdup (""); } if (cp_prefix != NULL) { gchar *p = _mbsrchr (cp_prefix, '\\'); if (p != NULL) *p = '\0'; p = _mbsrchr (cp_prefix, '\\'); if (p && (g_ascii_strcasecmp (p + 1, "bin") == 0)) *p = '\0'; } else { cp_prefix = g_strdup (""); } locale_dir = g_strconcat (cp_prefix, GCONF_LOCALE_DIR + strlen (PREFIX), NULL); confdir = _gconf_win32_replace_prefix (GCONF_CONFDIR); etcdir = _gconf_win32_replace_prefix (GCONF_ETCDIR); serverdir = _gconf_win32_replace_prefix (GCONF_SERVERDIR); backend_dir = _gconf_win32_replace_prefix (GCONF_BACKEND_DIR); G_UNLOCK (mutex); }