#include "config.h"
-#include <ctype.h>
-
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
# include <windows.h>
# undef STRICT
# include <lmcons.h> /* For UNLEN */
-# include <ctype.h>
#endif /* G_PLATFORM_WIN32 */
#ifdef G_OS_WIN32
# include <direct.h>
# include <shlobj.h>
+ /* older SDK (e.g. msvc 5.0) does not have these*/
+# ifndef CSIDL_INTERNET_CACHE
+# define CSIDL_INTERNET_CACHE 32
+# endif
+# ifndef CSIDL_COMMON_APPDATA
+# define CSIDL_COMMON_APPDATA 35
+# endif
+# ifndef CSIDL_COMMON_DOCUMENTS
+# define CSIDL_COMMON_DOCUMENTS 46
+# endif
+# ifndef CSIDL_PROFILE
+# define CSIDL_PROFILE 40
+# endif
#endif
#ifdef HAVE_CODESET
}
for (i=0; i<nkeys; i++)
- if (g_ascii_strncasecmp(keys[i].key, p, q - p) == 0 &&
+ if (g_ascii_strncasecmp (keys[i].key, p, q - p) == 0 &&
keys[i].key[q - p] == '\0')
result |= keys[i].value;
buffer[1] = 0;
}
+#ifdef G_OS_WIN32
+ dir = g_locale_to_utf8 (buffer, -1, NULL, NULL, NULL);
+#else
dir = g_strdup (buffer);
+#endif
g_free (buffer);
return dir;
}
+#ifdef G_OS_WIN32
+
+#undef g_get_current_dir
+
+/* Binary compatibility version. Not for newly compiled code. */
+
+gchar*
+g_get_current_dir (void)
+{
+ gchar *utf8_dir = g_get_current_dir_utf8 ();
+ gchar *dir = g_locale_from_utf8 (utf8_dir, -1, NULL, NULL, NULL);
+ g_free (utf8_dir);
+ return dir;
+}
+
+#endif
+
/**
* g_getenv:
* @variable: the environment variable to get.
}
CoTaskMemFree (pidl);
}
- if (retval == NULL)
- return "C:\\";
- else
- return retval;
+ return retval;
}
#endif
if (!g_home_dir)
g_home_dir = get_special_folder (CSIDL_PROFILE);
-
+
if (!g_home_dir)
{
/* At least at some time, HOMEDRIVE and HOMEPATH were used
return g_home_dir;
}
+#ifdef G_OS_WIN32
+
+#undef g_get_home_dir
+
+G_CONST_RETURN gchar*
+g_get_home_dir (void)
+{
+ static gchar *home_dir = NULL;
+
+ G_LOCK (g_utils_global);
+ if (!g_tmp_dir)
+ g_get_any_init ();
+ if (!home_dir && g_home_dir)
+ home_dir = g_locale_from_utf8 (g_home_dir, -1, NULL, NULL, NULL);
+ G_UNLOCK (g_utils_global);
+
+ return home_dir;
+}
+
+#endif
+
/* Return a directory to be used to store temporary files. This is the
* value of the TMPDIR, TMP or TEMP environment variables (they are
* checked in that order). If none of those exist, use P_tmpdir from
return g_tmp_dir;
}
+#ifdef G_OS_WIN32
+
+#undef g_get_tmp_dir
+
+G_CONST_RETURN gchar*
+g_get_tmp_dir (void)
+{
+ static gchar *tmp_dir = NULL;
+
+ G_LOCK (g_utils_global);
+ if (!g_tmp_dir)
+ g_get_any_init ();
+ if (!tmp_dir)
+ tmp_dir = g_locale_from_utf8 (g_tmp_dir, -1, NULL, NULL, NULL);
+
+ if (tmp_dir == NULL)
+ tmp_dir = "C:\\";
+ G_UNLOCK (g_utils_global);
+
+ return tmp_dir;
+}
+
+#endif
+
G_LOCK_DEFINE_STATIC (g_prgname);
static gchar *g_prgname = NULL;
data_dir = get_special_folder (CSIDL_PERSONAL);
#else
data_dir = (gchar *) g_getenv ("XDG_DATA_HOME");
+#endif
if (data_dir && data_dir[0])
data_dir = g_strdup (data_dir);
data_dir = g_build_filename (g_home_dir, ".local",
"share", NULL);
}
-#endif
+
g_user_data_dir = data_dir;
}
else
config_dir = get_special_folder (CSIDL_APPDATA);
#else
config_dir = (gchar *) g_getenv ("XDG_CONFIG_HOME");
-
+#endif
+
if (config_dir && config_dir[0])
config_dir = g_strdup (config_dir);
else
config_dir = g_build_filename (g_home_dir, ".config", NULL);
}
-#endif
g_user_config_dir = config_dir;
}
else
cache_dir = get_special_folder (CSIDL_INTERNET_CACHE); /* XXX correct? */
#else
cache_dir = (gchar *) g_getenv ("XDG_CACHE_HOME");
-
+#endif
if (cache_dir && cache_dir[0])
cache_dir = g_strdup (cache_dir);
else
cache_dir = g_build_filename (g_home_dir, ".cache", NULL);
}
-#endif
g_user_cache_dir = cache_dir;
}
else
* but it is big, ugly, and complicated, so I'm reluctant
* to do so when this should handle 99% of the time...
*/
-static GSList *
-compute_locale_variants (const gchar *locale)
+GSList *
+_g_compute_locale_variants (const gchar *locale)
{
GSList *retval = NULL;
for (a = alist; *a; a++)
{
gchar *b = unalias_lang (*a);
- list = g_slist_concat (list, compute_locale_variants (b));
+ list = g_slist_concat (list, _g_compute_locale_variants (b));
}
g_strfreev (alist);
list = g_slist_append (list, "C");