2007-10-19 Nagappan A <anagappan@novell.com>
[mono.git] / eglib / src / gmisc.c
index 0fbb6de380723d6ce1f0f73b0777c78287bd5508..12560834c6a986879d5227d5145632e8d167db29 100644 (file)
 #include <stdlib.h>
 #include <glib.h>
 
+#ifdef G_OS_WIN32
+#include <windows.h>
+#endif
+
 const gchar *
 g_getenv(const gchar *variable)
 {
+#ifdef G_OS_WIN32
+       gunichar2 *var, *buffer;
+       gchar* val = NULL;
+       gint32 buffer_size = 1024;
+       gint32 retval;
+       var = u8to16(variable); 
+       buffer = g_malloc(buffer_size*sizeof(gunichar2));
+       retval = GetEnvironmentVariable (var, buffer, buffer_size);
+       if (retval != 0) {
+               if (retval > buffer_size) {
+                       g_free (buffer);
+                       buffer_size = retval;
+                       buffer = g_malloc(buffer_size*sizeof(gunichar2));
+                       retval = GetEnvironmentVariable (var, buffer, buffer_size);
+               }
+               val = u16to8 (buffer);
+       }
+       g_free(var);
+       g_free(buffer);
+       return val; 
+#else
        return getenv(variable);
+#endif
 }
 
 gboolean
 g_setenv(const gchar *variable, const gchar *value, gboolean overwrite)
 {
+#ifdef G_OS_WIN32
+       gunichar2 *var, *val;
+       gboolean result;
+       var = u8to16(variable); 
+       val = u8to16(value);
+       result = (SetEnvironmentVariable(var, val) != 0) ? TRUE : FALSE;
+       g_free(var);
+       g_free(val);
+       return result;
+#else
        return setenv(variable, value, overwrite) == 0;
+#endif
 }
 
 void
 g_unsetenv(const gchar *variable)
 {
+#ifdef G_OS_WIN32
+       gunichar2 *var;
+       var = u8to16(variable); 
+       SetEnvironmentVariable(var, TEXT(""));
+       g_free(var);
+#else
        unsetenv(variable);
+#endif
 }
 
+gchar*
+g_win32_getlocale(void)
+{
+#ifdef G_OS_WIN32
+       /* FIXME: Use GetThreadLocale
+        * and convert LCID to standard 
+        * string form, "en_US" */
+       return strdup ("en_US");
+#else
+       return NULL;
+#endif
+}
+
+