diff options
author | Tor Lillqvist <tml@iki.fi> | 1999-10-31 12:15:34 +0000 |
---|---|---|
committer | Tor Lillqvist <tml@src.gnome.org> | 1999-10-31 12:15:34 +0000 |
commit | 30cc3ed1fe251c3b5ee477152645884849037af0 (patch) | |
tree | 57cc5d0d64b525b0eba3b8a942cfbf829534effb | |
parent | a2760140c83d32887a0f3f16cd2a49fd2a3adb59 (diff) |
Don't crash if removing a nonexistent value.
1999-10-31 Tor Lillqvist <tml@iki.fi>
* gcache.c (g_cache_remove): Don't crash if removing a nonexistent
value.
* gutils.c (gwin_getlocale): New Win32-specific function, returns
a Unixish current locale string (en, zh_TW etc).
* glib.h: Declare it.
* glib.def: Export it.
* testglib.c: Test it.
* gmessages.c (Win32: ensure_stdout_valid): Some improvements,
make sure we don't call AllocConsole several times, which I think
has happened.
-rw-r--r-- | ChangeLog | 18 | ||||
-rw-r--r-- | ChangeLog.pre-2-0 | 18 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 18 | ||||
-rw-r--r-- | ChangeLog.pre-2-12 | 18 | ||||
-rw-r--r-- | ChangeLog.pre-2-2 | 18 | ||||
-rw-r--r-- | ChangeLog.pre-2-4 | 18 | ||||
-rw-r--r-- | ChangeLog.pre-2-6 | 18 | ||||
-rw-r--r-- | ChangeLog.pre-2-8 | 18 | ||||
-rw-r--r-- | gcache.c | 3 | ||||
-rw-r--r-- | glib.def | 3 | ||||
-rw-r--r-- | glib.h | 9 | ||||
-rw-r--r-- | glib/gcache.c | 3 | ||||
-rw-r--r-- | glib/glib.def | 3 | ||||
-rw-r--r-- | glib/glib.h | 9 | ||||
-rw-r--r-- | glib/gmessages.c | 18 | ||||
-rw-r--r-- | glib/gutils.c | 574 | ||||
-rw-r--r-- | gmessages.c | 18 | ||||
-rw-r--r-- | gmodule/ChangeLog | 5 | ||||
-rw-r--r-- | gmodule/gmodule.h | 2 | ||||
-rw-r--r-- | gutils.c | 574 | ||||
-rw-r--r-- | testglib.c | 5 | ||||
-rw-r--r-- | tests/testglib.c | 5 |
22 files changed, 1357 insertions, 18 deletions
@@ -1,3 +1,21 @@ +1999-10-31 Tor Lillqvist <tml@iki.fi> + + * gcache.c (g_cache_remove): Don't crash if removing a nonexistent + value. + + * gutils.c (gwin_getlocale): New Win32-specific function, returns + a Unixish current locale string (en, zh_TW etc). + + * glib.h: Declare it. + + * glib.def: Export it. + + * testglib.c: Test it. + + * gmessages.c (Win32: ensure_stdout_valid): Some improvements, + make sure we don't call AllocConsole several times, which I think + has happened. + Sun Oct 17 18:11:40 1999 Tim Janik <timj@gtk.org> * gdataset.c (g_data_set_internal): remove g_dataset_global_lock around diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index d8eca43ad..78efcdf56 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,21 @@ +1999-10-31 Tor Lillqvist <tml@iki.fi> + + * gcache.c (g_cache_remove): Don't crash if removing a nonexistent + value. + + * gutils.c (gwin_getlocale): New Win32-specific function, returns + a Unixish current locale string (en, zh_TW etc). + + * glib.h: Declare it. + + * glib.def: Export it. + + * testglib.c: Test it. + + * gmessages.c (Win32: ensure_stdout_valid): Some improvements, + make sure we don't call AllocConsole several times, which I think + has happened. + Sun Oct 17 18:11:40 1999 Tim Janik <timj@gtk.org> * gdataset.c (g_data_set_internal): remove g_dataset_global_lock around diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index d8eca43ad..78efcdf56 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,21 @@ +1999-10-31 Tor Lillqvist <tml@iki.fi> + + * gcache.c (g_cache_remove): Don't crash if removing a nonexistent + value. + + * gutils.c (gwin_getlocale): New Win32-specific function, returns + a Unixish current locale string (en, zh_TW etc). + + * glib.h: Declare it. + + * glib.def: Export it. + + * testglib.c: Test it. + + * gmessages.c (Win32: ensure_stdout_valid): Some improvements, + make sure we don't call AllocConsole several times, which I think + has happened. + Sun Oct 17 18:11:40 1999 Tim Janik <timj@gtk.org> * gdataset.c (g_data_set_internal): remove g_dataset_global_lock around diff --git a/ChangeLog.pre-2-12 b/ChangeLog.pre-2-12 index d8eca43ad..78efcdf56 100644 --- a/ChangeLog.pre-2-12 +++ b/ChangeLog.pre-2-12 @@ -1,3 +1,21 @@ +1999-10-31 Tor Lillqvist <tml@iki.fi> + + * gcache.c (g_cache_remove): Don't crash if removing a nonexistent + value. + + * gutils.c (gwin_getlocale): New Win32-specific function, returns + a Unixish current locale string (en, zh_TW etc). + + * glib.h: Declare it. + + * glib.def: Export it. + + * testglib.c: Test it. + + * gmessages.c (Win32: ensure_stdout_valid): Some improvements, + make sure we don't call AllocConsole several times, which I think + has happened. + Sun Oct 17 18:11:40 1999 Tim Janik <timj@gtk.org> * gdataset.c (g_data_set_internal): remove g_dataset_global_lock around diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index d8eca43ad..78efcdf56 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,21 @@ +1999-10-31 Tor Lillqvist <tml@iki.fi> + + * gcache.c (g_cache_remove): Don't crash if removing a nonexistent + value. + + * gutils.c (gwin_getlocale): New Win32-specific function, returns + a Unixish current locale string (en, zh_TW etc). + + * glib.h: Declare it. + + * glib.def: Export it. + + * testglib.c: Test it. + + * gmessages.c (Win32: ensure_stdout_valid): Some improvements, + make sure we don't call AllocConsole several times, which I think + has happened. + Sun Oct 17 18:11:40 1999 Tim Janik <timj@gtk.org> * gdataset.c (g_data_set_internal): remove g_dataset_global_lock around diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index d8eca43ad..78efcdf56 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,21 @@ +1999-10-31 Tor Lillqvist <tml@iki.fi> + + * gcache.c (g_cache_remove): Don't crash if removing a nonexistent + value. + + * gutils.c (gwin_getlocale): New Win32-specific function, returns + a Unixish current locale string (en, zh_TW etc). + + * glib.h: Declare it. + + * glib.def: Export it. + + * testglib.c: Test it. + + * gmessages.c (Win32: ensure_stdout_valid): Some improvements, + make sure we don't call AllocConsole several times, which I think + has happened. + Sun Oct 17 18:11:40 1999 Tim Janik <timj@gtk.org> * gdataset.c (g_data_set_internal): remove g_dataset_global_lock around diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index d8eca43ad..78efcdf56 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,21 @@ +1999-10-31 Tor Lillqvist <tml@iki.fi> + + * gcache.c (g_cache_remove): Don't crash if removing a nonexistent + value. + + * gutils.c (gwin_getlocale): New Win32-specific function, returns + a Unixish current locale string (en, zh_TW etc). + + * glib.h: Declare it. + + * glib.def: Export it. + + * testglib.c: Test it. + + * gmessages.c (Win32: ensure_stdout_valid): Some improvements, + make sure we don't call AllocConsole several times, which I think + has happened. + Sun Oct 17 18:11:40 1999 Tim Janik <timj@gtk.org> * gdataset.c (g_data_set_internal): remove g_dataset_global_lock around diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index d8eca43ad..78efcdf56 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,21 @@ +1999-10-31 Tor Lillqvist <tml@iki.fi> + + * gcache.c (g_cache_remove): Don't crash if removing a nonexistent + value. + + * gutils.c (gwin_getlocale): New Win32-specific function, returns + a Unixish current locale string (en, zh_TW etc). + + * glib.h: Declare it. + + * glib.def: Export it. + + * testglib.c: Test it. + + * gmessages.c (Win32: ensure_stdout_valid): Some improvements, + make sure we don't call AllocConsole several times, which I think + has happened. + Sun Oct 17 18:11:40 1999 Tim Janik <timj@gtk.org> * gdataset.c (g_data_set_internal): remove g_dataset_global_lock around @@ -157,6 +157,9 @@ g_cache_remove (GCache *cache, key = g_hash_table_lookup (rcache->value_table, value); node = g_hash_table_lookup (rcache->key_table, key); + if (node == NULL) + return; + node->ref_count -= 1; if (node->ref_count == 0) { @@ -348,6 +348,7 @@ EXPORTS g_source_remove g_source_remove_by_source_data g_source_remove_by_user_data + g_spaced_primes_closest g_static_mutex_get_mutex_impl g_static_private_get g_static_private_set @@ -440,7 +441,7 @@ EXPORTS glib_minor_version gwin_closedir gwin_ftruncate + gwin_getlocale gwin_opendir gwin_readdir gwin_rewinddir - g_spaced_primes_closest @@ -2875,6 +2875,15 @@ DIR* gwin_opendir (const gchar *dirname); struct dirent* gwin_readdir (DIR *dir); void gwin_rewinddir (DIR *dir); gint gwin_closedir (DIR *dir); + +/* The MS setlocale uses locale names of the form "English_United + * States.1252" etc. We want the Unixish standard form "en", "zh_TW" + * etc. This function gets the current thread locale from Windows and + * returns it as a string of the above form for use in forming file + * names etc. The returned string should be deallocated with g_free(). + */ +gchar * gwin_getlocale (void); + #endif /* G_OS_WIN32 */ diff --git a/glib/gcache.c b/glib/gcache.c index 145a09316..dc58f0775 100644 --- a/glib/gcache.c +++ b/glib/gcache.c @@ -157,6 +157,9 @@ g_cache_remove (GCache *cache, key = g_hash_table_lookup (rcache->value_table, value); node = g_hash_table_lookup (rcache->key_table, key); + if (node == NULL) + return; + node->ref_count -= 1; if (node->ref_count == 0) { diff --git a/glib/glib.def b/glib/glib.def index 98b371fb1..d591abb8f 100644 --- a/glib/glib.def +++ b/glib/glib.def @@ -348,6 +348,7 @@ EXPORTS g_source_remove g_source_remove_by_source_data g_source_remove_by_user_data + g_spaced_primes_closest g_static_mutex_get_mutex_impl g_static_private_get g_static_private_set @@ -440,7 +441,7 @@ EXPORTS glib_minor_version gwin_closedir gwin_ftruncate + gwin_getlocale gwin_opendir gwin_readdir gwin_rewinddir - g_spaced_primes_closest diff --git a/glib/glib.h b/glib/glib.h index d88cef646..435c967c3 100644 --- a/glib/glib.h +++ b/glib/glib.h @@ -2875,6 +2875,15 @@ DIR* gwin_opendir (const gchar *dirname); struct dirent* gwin_readdir (DIR *dir); void gwin_rewinddir (DIR *dir); gint gwin_closedir (DIR *dir); + +/* The MS setlocale uses locale names of the form "English_United + * States.1252" etc. We want the Unixish standard form "en", "zh_TW" + * etc. This function gets the current thread locale from Windows and + * returns it as a string of the above form for use in forming file + * names etc. The returned string should be deallocated with g_free(). + */ +gchar * gwin_getlocale (void); + #endif /* G_OS_WIN32 */ diff --git a/glib/gmessages.c b/glib/gmessages.c index 5f60218bf..4fcdc0e2b 100644 --- a/glib/gmessages.c +++ b/glib/gmessages.c @@ -92,6 +92,9 @@ static GPrivate* g_log_depth = NULL; # define STRICT # include <windows.h> # include <process.h> /* For _getpid() */ + +static gboolean alloc_console_called = FALSE; + /* Just use stdio. If we're out of memory, we're hosed anyway. */ #undef write static inline int @@ -100,6 +103,7 @@ write (FILE *fd, int len) { fwrite (buf, len, 1, fd); + fflush (fd); return len; } @@ -108,12 +112,16 @@ ensure_stdout_valid (void) { HANDLE handle; - handle = GetStdHandle (STD_OUTPUT_HANDLE); - - if (handle == INVALID_HANDLE_VALUE) + if (!alloc_console_called) { - AllocConsole (); - freopen ("CONOUT$", "w", stdout); + handle = GetStdHandle (STD_OUTPUT_HANDLE); + + if (handle == INVALID_HANDLE_VALUE) + { + AllocConsole (); + alloc_console_called = TRUE; + freopen ("CONOUT$", "w", stdout); + } } } #else diff --git a/glib/gutils.c b/glib/gutils.c index 02718d59a..917676fbc 100644 --- a/glib/gutils.c +++ b/glib/gutils.c @@ -866,4 +866,578 @@ gwin_closedir (DIR *dir) return 0; } +/* Mingw32 headers don't have latest language and sublanguage codes */ +#ifndef LANG_AFRIKAANS +#define LANG_AFRIKAANS 0x36 +#endif +#ifndef LANG_ALBANIAN +#define LANG_ALBANIAN 0x1c +#endif +#ifndef LANG_ARABIC +#define LANG_ARABIC 0x01 +#endif +#ifndef LANG_ARMENIAN +#define LANG_ARMENIAN 0x2b +#endif +#ifndef LANG_ASSAMESE +#define LANG_ASSAMESE 0x4d +#endif +#ifndef LANG_AZERI +#define LANG_AZERI 0x2c +#endif +#ifndef LANG_BASQUE +#define LANG_BASQUE 0x2d +#endif +#ifndef LANG_BELARUSIAN +#define LANG_BELARUSIAN 0x23 +#endif +#ifndef LANG_BENGALI +#define LANG_BENGALI 0x45 +#endif +#ifndef LANG_CATALAN +#define LANG_CATALAN 0x03 +#endif +#ifndef LANG_ESTONIAN +#define LANG_ESTONIAN 0x25 +#endif +#ifndef LANG_FAEROESE +#define LANG_FAEROESE 0x38 +#endif +#ifndef LANG_FARSI +#define LANG_FARSI 0x29 +#endif +#ifndef LANG_GEORGIAN +#define LANG_GEORGIAN 0x37 +#endif +#ifndef LANG_GUJARATI +#define LANG_GUJARATI 0x47 +#endif +#ifndef LANG_HEBREW +#define LANG_HEBREW 0x0d +#endif +#ifndef LANG_HINDI +#define LANG_HINDI 0x39 +#endif +#ifndef LANG_INDONESIAN +#define LANG_INDONESIAN 0x21 +#endif +#ifndef LANG_KANNADA +#define LANG_KANNADA 0x4b +#endif +#ifndef LANG_KASHMIRI +#define LANG_KASHMIRI 0x60 +#endif +#ifndef LANG_KAZAK +#define LANG_KAZAK 0x3f +#endif +#ifndef LANG_KONKANI +#define LANG_KONKANI 0x57 +#endif +#ifndef LANG_LATVIAN +#define LANG_LATVIAN 0x26 +#endif +#ifndef LANG_LITHUANIAN +#define LANG_LITHUANIAN 0x27 +#endif +#ifndef LANG_MACEDONIAN +#define LANG_MACEDONIAN 0x2f +#endif +#ifndef LANG_MALAY +#define LANG_MALAY 0x3e +#endif +#ifndef LANG_MALAYALAM +#define LANG_MALAYALAM 0x4c +#endif +#ifndef LANG_MANIPURI +#define LANG_MANIPURI 0x58 +#endif +#ifndef LANG_MARATHI +#define LANG_MARATHI 0x4e +#endif +#ifndef LANG_NEPALI +#define LANG_NEPALI 0x61 +#endif +#ifndef LANG_ORIYA +#define LANG_ORIYA 0x48 +#endif +#ifndef LANG_PUNJABI +#define LANG_PUNJABI 0x46 +#endif +#ifndef LANG_SANSKRIT +#define LANG_SANSKRIT 0x4f +#endif +#ifndef LANG_SERBIAN +#define LANG_SERBIAN 0x1a +#endif +#ifndef LANG_SINDHI +#define LANG_SINDHI 0x59 +#endif +#ifndef LANG_SLOVAK +#define LANG_SLOVAK 0x1b +#endif +#ifndef LANG_SWAHILI +#define LANG_SWAHILI 0x41 +#endif +#ifndef LANG_TAMIL +#define LANG_TAMIL 0x49 +#endif +#ifndef LANG_TATAR +#define LANG_TATAR 0x44 +#endif +#ifndef LANG_TELUGU +#define LANG_TELUGU 0x4a +#endif +#ifndef LANG_THAI +#define LANG_THAI 0x1e +#endif +#ifndef LANG_UKRAINIAN +#define LANG_UKRAINIAN 0x22 +#endif +#ifndef LANG_URDU +#define LANG_URDU 0x20 +#endif +#ifndef LANG_UZBEK +#define LANG_UZBEK 0x43 +#endif +#ifndef LANG_VIETNAMESE +#define LANG_VIETNAMESE 0x2a +#endif +#ifndef SUBLANG_ARABIC_SAUDI_ARABIA +#define SUBLANG_ARABIC_SAUDI_ARABIA 0x01 +#endif +#ifndef SUBLANG_ARABIC_IRAQ +#define SUBLANG_ARABIC_IRAQ 0x02 +#endif +#ifndef SUBLANG_ARABIC_EGYPT +#define SUBLANG_ARABIC_EGYPT 0x03 +#endif +#ifndef SUBLANG_ARABIC_LIBYA +#define SUBLANG_ARABIC_LIBYA 0x04 +#endif +#ifndef SUBLANG_ARABIC_ALGERIA +#define SUBLANG_ARABIC_ALGERIA 0x05 +#endif +#ifndef SUBLANG_ARABIC_MOROCCO +#define SUBLANG_ARABIC_MOROCCO 0x06 +#endif +#ifndef SUBLANG_ARABIC_TUNISIA +#define SUBLANG_ARABIC_TUNISIA 0x07 +#endif +#ifndef SUBLANG_ARABIC_OMAN +#define SUBLANG_ARABIC_OMAN 0x08 +#endif +#ifndef SUBLANG_ARABIC_YEMEN +#define SUBLANG_ARABIC_YEMEN 0x09 +#endif +#ifndef SUBLANG_ARABIC_SYRIA +#define SUBLANG_ARABIC_SYRIA 0x0a +#endif +#ifndef SUBLANG_ARABIC_JORDAN +#define SUBLANG_ARABIC_JORDAN 0x0b +#endif +#ifndef SUBLANG_ARABIC_LEBANON +#define SUBLANG_ARABIC_LEBANON 0x0c +#endif +#ifndef SUBLANG_ARABIC_KUWAIT +#define SUBLANG_ARABIC_KUWAIT 0x0d +#endif +#ifndef SUBLANG_ARABIC_UAE +#define SUBLANG_ARABIC_UAE 0x0e +#endif +#ifndef SUBLANG_ARABIC_BAHRAIN +#define SUBLANG_ARABIC_BAHRAIN 0x0f +#endif +#ifndef SUBLANG_ARABIC_QATAR +#define SUBLANG_ARABIC_QATAR 0x10 +#endif +#ifndef SUBLANG_AZERI_LATIN +#define SUBLANG_AZERI_LATIN 0x01 +#endif +#ifndef SUBLANG_AZERI_CYRILLIC +#define SUBLANG_AZERI_CYRILLIC 0x02 +#endif +#ifndef SUBLANG_CHINESE_MACAU +#define SUBLANG_CHINESE_MACAU 0x05 +#endif +#ifndef SUBLANG_ENGLISH_SOUTH_AFRICA +#define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07 +#endif +#ifndef SUBLANG_ENGLISH_JAMAICA +#define SUBLANG_ENGLISH_JAMAICA 0x08 +#endif +#ifndef SUBLANG_ENGLISH_CARIBBEAN +#define SUBLANG_ENGLISH_CARIBBEAN 0x09 +#endif +#ifndef SUBLANG_ENGLISH_BELIZE +#define SUBLANG_ENGLISH_BELIZE 0x0a +#endif +#ifndef SUBLANG_ENGLISH_TRINIDAD +#define SUBLANG_ENGLISH_TRINIDAD 0x0b +#endif +#ifndef SUBLANG_ENGLISH_ZIMBABWE +#define SUBLANG_ENGLISH_ZIMBABWE 0x0c +#endif +#ifndef SUBLANG_ENGLISH_PHILIPPINES +#define SUBLANG_ENGLISH_PHILIPPINES 0x0d +#endif +#ifndef SUBLANG_FRENCH_LUXEMBOURG +#define SUBLANG_FRENCH_LUXEMBOURG 0x05 +#endif +#ifndef SUBLANG_FRENCH_MONACO +#define SUBLANG_FRENCH_MONACO 0x06 +#endif +#ifndef SUBLANG_GERMAN_LUXEMBOURG +#define SUBLANG_GERMAN_LUXEMBOURG 0x04 +#endif +#ifndef SUBLANG_GERMAN_LIECHTENSTEIN +#define SUBLANG_GERMAN_LIECHTENSTEIN 0x05 +#endif +#ifndef SUBLANG_KASHMIRI_INDIA +#define SUBLANG_KASHMIRI_INDIA 0x02 +#endif +#ifndef SUBLANG_MALAY_MALAYSIA +#define SUBLANG_MALAY_MALAYSIA 0x01 +#endif +#ifndef SUBLANG_MALAY_BRUNEI_DARUSSALAM +#define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02 +#endif +#ifndef SUBLANG_NEPALI_INDIA +#define SUBLANG_NEPALI_INDIA 0x02 +#endif +#ifndef SUBLANG_SERBIAN_LATIN +#define SUBLANG_SERBIAN_LATIN 0x02 +#endif +#ifndef SUBLANG_SERBIAN_CYRILLIC +#define SUBLANG_SERBIAN_CYRILLIC 0x03 +#endif +#ifndef SUBLANG_SPANISH_GUATEMALA +#define SUBLANG_SPANISH_GUATEMALA 0x04 +#endif +#ifndef SUBLANG_SPANISH_COSTA_RICA +#define SUBLANG_SPANISH_COSTA_RICA 0x05 +#endif +#ifndef SUBLANG_SPANISH_PANAMA +#define SUBLANG_SPANISH_PANAMA 0x06 +#endif +#ifndef SUBLANG_SPANISH_DOMINICAN_REPUBLIC +#define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07 +#endif +#ifndef SUBLANG_SPANISH_VENEZUELA +#define SUBLANG_SPANISH_VENEZUELA 0x08 +#endif +#ifndef SUBLANG_SPANISH_COLOMBIA +#define SUBLANG_SPANISH_COLOMBIA 0x09 +#endif +#ifndef SUBLANG_SPANISH_PERU +#define SUBLANG_SPANISH_PERU 0x0a +#endif +#ifndef SUBLANG_SPANISH_ARGENTINA +#define SUBLANG_SPANISH_ARGENTINA 0x0b +#endif +#ifndef SUBLANG_SPANISH_ECUADOR +#define SUBLANG_SPANISH_ECUADOR 0x0c +#endif +#ifndef SUBLANG_SPANISH_CHILE +#define SUBLANG_SPANISH_CHILE 0x0d +#endif +#ifndef SUBLANG_SPANISH_URUGUAY +#define SUBLANG_SPANISH_URUGUAY 0x0e +#endif +#ifndef SUBLANG_SPANISH_PARAGUAY +#define SUBLANG_SPANISH_PARAGUAY 0x0f +#endif +#ifndef SUBLANG_SPANISH_BOLIVIA +#define SUBLANG_SPANISH_BOLIVIA 0x10 +#endif +#ifndef SUBLANG_SPANISH_EL_SALVADOR +#define SUBLANG_SPANISH_EL_SALVADOR 0x11 +#endif +#ifndef SUBLANG_SPANISH_HONDURAS +#define SUBLANG_SPANISH_HONDURAS 0x12 +#endif +#ifndef SUBLANG_SPANISH_NICARAGUA +#define SUBLANG_SPANISH_NICARAGUA 0x13 +#endif +#ifndef SUBLANG_SPANISH_PUERTO_RICO +#define SUBLANG_SPANISH_PUERTO_RICO 0x14 +#endif +#ifndef SUBLANG_SWEDISH_FINLAND +#define SUBLANG_SWEDISH_FINLAND 0x02 +#endif +#ifndef SUBLANG_URDU_PAKISTAN +#define SUBLANG_URDU_PAKISTAN 0x01 +#endif +#ifndef SUBLANG_URDU_INDIA +#define SUBLANG_URDU_INDIA 0x02 +#endif +#ifndef SUBLANG_UZBEK_LATIN +#define SUBLANG_UZBEK_LATIN 0x01 +#endif +#ifndef SUBLANG_UZBEK_CYRILLIC +#define SUBLANG_UZBEK_CYRILLIC 0x02 +#endif + +gchar * +gwin_getlocale (void) +{ + LCID lcid = GetThreadLocale (); + gint primary, sub; + gchar *l = NULL, *sl = NULL; + gchar bfr[20]; + + primary = PRIMARYLANGID (LANGIDFROMLCID (lcid)); + sub = SUBLANGID (LANGIDFROMLCID (lcid)); + switch (primary) + { + case LANG_AFRIKAANS: l = "af"; break; + case LANG_ALBANIAN: l = "sq"; break; + case LANG_ARABIC: + l = "ar"; + switch (sub) + { + case SUBLANG_ARABIC_SAUDI_ARABIA: sl = "SA"; break; + case SUBLANG_ARABIC_IRAQ: sl = "IQ"; break; + case SUBLANG_ARABIC_EGYPT: sl = "EG"; break; + case SUBLANG_ARABIC_LIBYA: sl = "LY"; break; + case SUBLANG_ARABIC_ALGERIA: sl = "DZ"; break; + case SUBLANG_ARABIC_MOROCCO: sl = "MA"; break; + case SUBLANG_ARABIC_TUNISIA: sl = "TN"; break; + case SUBLANG_ARABIC_OMAN: sl = "OM"; break; + case SUBLANG_ARABIC_YEMEN: sl = "YE"; break; + case SUBLANG_ARABIC_SYRIA: sl = "SY"; break; + case SUBLANG_ARABIC_JORDAN: sl = "JO"; break; + case SUBLANG_ARABIC_LEBANON: sl = "LB"; break; + case SUBLANG_ARABIC_KUWAIT: sl = "KW"; break; + case SUBLANG_ARABIC_UAE: sl = "AE"; break; + case SUBLANG_ARABIC_BAHRAIN: sl = "BH"; break; + case SUBLANG_ARABIC_QATAR: sl = "QA"; break; + } + break; + case LANG_ARMENIAN: l = "hy"; break; + case LANG_ASSAMESE: l = "as"; break; + case LANG_AZERI: l = "az"; break; + case LANG_BASQUE: l = "eu"; break; + case LANG_BELARUSIAN: l = "be"; break; + case LANG_BENGALI: l = "bn"; break; + case LANG_BULGARIAN: l = "bg"; break; + case LANG_CATALAN: l = "ca"; break; + case LANG_CHINESE: + l = "zh"; + switch (sub) + { + case SUBLANG_CHINESE_TRADITIONAL: sl = "TW"; break; + case SUBLANG_CHINESE_SIMPLIFIED: sl = "CH"; break; + case SUBLANG_CHINESE_HONGKONG: sl = "HK"; break; + case SUBLANG_CHINESE_SINGAPORE: sl = "SG"; break; + case SUBLANG_CHINESE_MACAU: sl = "MO"; break; + } + break; + case LANG_CROATIAN: /* LANG_CROATIAN == LANG_SERBIAN + * What used to be called Serbo-Croatian + * should really now be two separate + * languages because of political reasons. + * (Says tml, who knows nothing about Serbian + * or Croatian.) + * (I can feel those flames coming already.) + */ + switch (sub) + { + case SUBLANG_SERBIAN_LATIN: l = "hr"; break; + case SUBLANG_SERBIAN_CYRILLIC: l = "sr"; break; + default: l = "hr"; /* ??? */ + } + break; + case LANG_CZECH: l = "cs"; break; + case LANG_DANISH: l = "da"; break; + case LANG_DUTCH: + l = "nl"; + switch (sub) + { + case SUBLANG_DUTCH_BELGIAN: sl = "BE"; break; + } + break; + case LANG_ENGLISH: + l = "en"; + switch (sub) + { + case SUBLANG_ENGLISH_US: sl = "US"; break; + case SUBLANG_ENGLISH_UK: sl = "GB"; break; + case SUBLANG_ENGLISH_AUS: sl = "AU"; break; + case SUBLANG_ENGLISH_CAN: sl = "CA"; break; + case SUBLANG_ENGLISH_NZ: sl = "NZ"; break; + case SUBLANG_ENGLISH_EIRE: sl = "IE"; break; + case SUBLANG_ENGLISH_SOUTH_AFRICA: sl = "SA"; break; + case SUBLANG_ENGLISH_JAMAICA: sl = "JM"; break; + case SUBLANG_ENGLISH_CARIBBEAN: sl = "@caribbean"; break; /* ??? */ + case SUBLANG_ENGLISH_BELIZE: sl = "BZ"; break; + case SUBLANG_ENGLISH_TRINIDAD: sl = "TT"; break; + case SUBLANG_ENGLISH_ZIMBABWE: sl = "ZW"; break; + case SUBLANG_ENGLISH_PHILIPPINES: sl = "PH"; break; + } + break; + case LANG_ESTONIAN: l = "et"; break; + case LANG_FAEROESE: l = "fo"; break; + case LANG_FARSI: l = "fa"; break; + case LANG_FINNISH: l = "fi"; break; + case LANG_FRENCH: + l = "fr"; + switch (sub) + { + case SUBLANG_FRENCH_BELGIAN: sl = "BE"; break; + case SUBLANG_FRENCH_CANADIAN: sl = "CA"; break; + case SUBLANG_FRENCH_SWISS: sl = "CH"; break; + case SUBLANG_FRENCH_LUXEMBOURG: sl = "LU"; break; + case SUBLANG_FRENCH_MONACO: sl = "MC"; break; + } + break; + case LANG_GEORGIAN: l = "ka"; break; + case LANG_GERMAN: + l = "de"; + switch (sub) + { + case SUBLANG_GERMAN_SWISS: sl = "CH"; break; + case SUBLANG_GERMAN_AUSTRIAN: sl = "AT"; break; + case SUBLANG_GERMAN_LUXEMBOURG: sl = "LU"; break; + case SUBLANG_GERMAN_LIECHTENSTEIN: sl = "LI"; break; + } + break; + case LANG_GREEK: l = "el"; break; + case LANG_GUJARATI: l = "gu"; break; + case LANG_HEBREW: l = "he"; break; + case LANG_HINDI: l = "hi"; break; + case LANG_HUNGARIAN: l = "hu"; break; + case LANG_ICELANDIC: l = "is"; break; + case LANG_INDONESIAN: l = "id"; break; + case LANG_ITALIAN: + l = "it"; + switch (sub) + { + case SUBLANG_ITALIAN_SWISS: sl = "CH"; break; + } + break; + case LANG_JAPANESE: l = "ja"; break; + case LANG_KANNADA: l = "kn"; break; + case LANG_KASHMIRI: + l = "ks"; + switch (sub) + { + case SUBLANG_KASHMIRI_INDIA: sl = "IN"; break; + } + break; + case LANG_KAZAK: l = "kk"; break; + case LANG_KONKANI: l = "kok"; break; /* ??? */ + case LANG_KOREAN: l = "ko"; break; + case LANG_LATVIAN: l = "lv"; break; + case LANG_LITHUANIAN: l = "lt"; break; + case LANG_MACEDONIAN: l = "mk"; break; + case LANG_MALAY: + l = "ms"; + switch (sub) + { + case SUBLANG_MALAY_MALAYSIA: sl = "MY"; break; + case SUBLANG_MALAY_BRUNEI_DARUSSALAM: sl = "BN"; break; + } + break; + case LANG_MALAYALAM: l = "ml"; break; + case LANG_MANIPURI: l = "mni"; break; + case LANG_MARATHI: l = "mr"; break; + case LANG_NEPALI: + l = "ne"; + switch (sub) + { + case SUBLANG_NEPALI_INDIA: sl = "IN"; break; + } + break; + case LANG_NORWEGIAN: + l = "no"; + switch (sub) + { + case SUBLANG_NORWEGIAN_BOKMAL: sl = "@bokmal"; break; + case SUBLANG_NORWEGIAN_NYNORSK: sl = "@nynorsk"; break; + } + break; + case LANG_ORIYA: l = "or"; break; + case LANG_POLISH: l = "pl"; break; + case LANG_PORTUGUESE: + l = "pt"; + switch (sub) + { + case SUBLANG_PORTUGUESE_BRAZILIAN: sl = "BR"; break; + } + break; + case LANG_PUNJABI: l = "pa"; break; + case LANG_ROMANIAN: l = "ro"; break; + case LANG_RUSSIAN: l = "ru"; break; + case LANG_SANSKRIT: l = "sa"; break; + case LANG_SINDHI: l = "sd"; break; + case LANG_SLOVAK: l = "sk"; break; + case LANG_SLOVENIAN: l = "sl"; break; + case LANG_SPANISH: + l = "es"; + switch (sub) + { + case SUBLANG_SPANISH_MEXICAN: sl = "MX"; break; + case SUBLANG_SPANISH_MODERN: sl = "@modern"; break; /* ??? */ + case SUBLANG_SPANISH_GUATEMALA: sl = "GT"; break; + case SUBLANG_SPANISH_COSTA_RICA: sl = "CR"; break; + case SUBLANG_SPANISH_PANAMA: sl = "PA"; break; + case SUBLANG_SPANISH_DOMINICAN_REPUBLIC: sl = "DO"; break; + case SUBLANG_SPANISH_VENEZUELA: sl = "VE"; break; + case SUBLANG_SPANISH_COLOMBIA: sl = "CO"; break; + case SUBLANG_SPANISH_PERU: sl = "PE"; break; + case SUBLANG_SPANISH_ARGENTINA: sl = "AR"; break; + case SUBLANG_SPANISH_ECUADOR: sl = "EC"; break; + case SUBLANG_SPANISH_CHILE: sl = "CL"; break; + case SUBLANG_SPANISH_URUGUAY: sl = "UY"; break; + case SUBLANG_SPANISH_PARAGUAY: sl = "PY"; break; + case SUBLANG_SPANISH_BOLIVIA: sl = "BO"; break; + case SUBLANG_SPANISH_EL_SALVADOR: sl = "SV"; break; + case SUBLANG_SPANISH_HONDURAS: sl = "HN"; break; + case SUBLANG_SPANISH_NICARAGUA: sl = "NI"; break; + case SUBLANG_SPANISH_PUERTO_RICO: sl = "PR"; break; + } + break; + case LANG_SWAHILI: l = "sw"; break; + case LANG_SWEDISH: + l = "sv"; + switch (sub) + { + case SUBLANG_SWEDISH_FINLAND: sl = "FI"; break; + } + break; + case LANG_TAMIL: l = "ta"; break; + case LANG_TATAR: l = "tt"; break; + case LANG_TELUGU: l = "te"; break; + case LANG_THAI: l = "th"; break; + case LANG_TURKISH: l = "tr"; break; + case LANG_UKRAINIAN: l = "uk"; break; + case LANG_URDU: + l = "ur"; + switch (sub) + { + case SUBLANG_URDU_PAKISTAN: sl = "PK"; break; + case SUBLANG_URDU_INDIA: sl = "IN"; break; + } + break; + case LANG_UZBEK: + l = "uz"; + switch (sub) + { + case SUBLANG_UZBEK_LATIN: sl = "2latin"; break; + case SUBLANG_UZBEK_CYRILLIC: sl = "@cyrillic"; break; + } + break; + case LANG_VIETNAMESE: l = "vi"; break; + default: l = "xx"; break; + } + strcpy (bfr, l); + if (sl != NULL) + { + strcat (bfr, "_"); + strcat (bfr, sl); + } + + return g_strdup (bfr); +} + #endif /* G_OS_WIN32 */ diff --git a/gmessages.c b/gmessages.c index 5f60218bf..4fcdc0e2b 100644 --- a/gmessages.c +++ b/gmessages.c @@ -92,6 +92,9 @@ static GPrivate* g_log_depth = NULL; # define STRICT # include <windows.h> # include <process.h> /* For _getpid() */ + +static gboolean alloc_console_called = FALSE; + /* Just use stdio. If we're out of memory, we're hosed anyway. */ #undef write static inline int @@ -100,6 +103,7 @@ write (FILE *fd, int len) { fwrite (buf, len, 1, fd); + fflush (fd); return len; } @@ -108,12 +112,16 @@ ensure_stdout_valid (void) { HANDLE handle; - handle = GetStdHandle (STD_OUTPUT_HANDLE); - - if (handle == INVALID_HANDLE_VALUE) + if (!alloc_console_called) { - AllocConsole (); - freopen ("CONOUT$", "w", stdout); + handle = GetStdHandle (STD_OUTPUT_HANDLE); + + if (handle == INVALID_HANDLE_VALUE) + { + AllocConsole (); + alloc_console_called = TRUE; + freopen ("CONOUT$", "w", stdout); + } } } #else diff --git a/gmodule/ChangeLog b/gmodule/ChangeLog index 26ba0ea80..003914627 100644 --- a/gmodule/ChangeLog +++ b/gmodule/ChangeLog @@ -1,8 +1,3 @@ -1999-10-05 Tor Lillqvist <tml@iki.fi> - - * gmodule.h: (Win32) Use __declspec(dllexport) in G_MODULE_EXPORT - only with gcc. - Sun Oct 3 19:30:52 PDT 1999 Manish Singh <yosh@gimp.org> * gmodule.h diff --git a/gmodule/gmodule.h b/gmodule/gmodule.h index 536a3c691..f8b835548 100644 --- a/gmodule/gmodule.h +++ b/gmodule/gmodule.h @@ -40,7 +40,7 @@ extern const char *g_log_domain_gmodule; * to feature Windows dll stubs. */ #define G_MODULE_IMPORT extern -#if defined (G_OS_WIN32) && defined (__GNUC__) +#if defined (G_OS_WIN32) # define G_MODULE_EXPORT __declspec(dllexport) #else /* !G_OS_WIN32 */ # define G_MODULE_EXPORT @@ -866,4 +866,578 @@ gwin_closedir (DIR *dir) return 0; } +/* Mingw32 headers don't have latest language and sublanguage codes */ +#ifndef LANG_AFRIKAANS +#define LANG_AFRIKAANS 0x36 +#endif +#ifndef LANG_ALBANIAN +#define LANG_ALBANIAN 0x1c +#endif +#ifndef LANG_ARABIC +#define LANG_ARABIC 0x01 +#endif +#ifndef LANG_ARMENIAN +#define LANG_ARMENIAN 0x2b +#endif +#ifndef LANG_ASSAMESE +#define LANG_ASSAMESE 0x4d +#endif +#ifndef LANG_AZERI +#define LANG_AZERI 0x2c +#endif +#ifndef LANG_BASQUE +#define LANG_BASQUE 0x2d +#endif +#ifndef LANG_BELARUSIAN +#define LANG_BELARUSIAN 0x23 +#endif +#ifndef LANG_BENGALI +#define LANG_BENGALI 0x45 +#endif +#ifndef LANG_CATALAN +#define LANG_CATALAN 0x03 +#endif +#ifndef LANG_ESTONIAN +#define LANG_ESTONIAN 0x25 +#endif +#ifndef LANG_FAEROESE +#define LANG_FAEROESE 0x38 +#endif +#ifndef LANG_FARSI +#define LANG_FARSI 0x29 +#endif +#ifndef LANG_GEORGIAN +#define LANG_GEORGIAN 0x37 +#endif +#ifndef LANG_GUJARATI +#define LANG_GUJARATI 0x47 +#endif +#ifndef LANG_HEBREW +#define LANG_HEBREW 0x0d +#endif +#ifndef LANG_HINDI +#define LANG_HINDI 0x39 +#endif +#ifndef LANG_INDONESIAN +#define LANG_INDONESIAN 0x21 +#endif +#ifndef LANG_KANNADA +#define LANG_KANNADA 0x4b +#endif +#ifndef LANG_KASHMIRI +#define LANG_KASHMIRI 0x60 +#endif +#ifndef LANG_KAZAK +#define LANG_KAZAK 0x3f +#endif +#ifndef LANG_KONKANI +#define LANG_KONKANI 0x57 +#endif +#ifndef LANG_LATVIAN +#define LANG_LATVIAN 0x26 +#endif +#ifndef LANG_LITHUANIAN +#define LANG_LITHUANIAN 0x27 +#endif +#ifndef LANG_MACEDONIAN +#define LANG_MACEDONIAN 0x2f +#endif +#ifndef LANG_MALAY +#define LANG_MALAY 0x3e +#endif +#ifndef LANG_MALAYALAM +#define LANG_MALAYALAM 0x4c +#endif +#ifndef LANG_MANIPURI +#define LANG_MANIPURI 0x58 +#endif +#ifndef LANG_MARATHI +#define LANG_MARATHI 0x4e +#endif +#ifndef LANG_NEPALI +#define LANG_NEPALI 0x61 +#endif +#ifndef LANG_ORIYA +#define LANG_ORIYA 0x48 +#endif +#ifndef LANG_PUNJABI +#define LANG_PUNJABI 0x46 +#endif +#ifndef LANG_SANSKRIT +#define LANG_SANSKRIT 0x4f +#endif +#ifndef LANG_SERBIAN +#define LANG_SERBIAN 0x1a +#endif +#ifndef LANG_SINDHI +#define LANG_SINDHI 0x59 +#endif +#ifndef LANG_SLOVAK +#define LANG_SLOVAK 0x1b +#endif +#ifndef LANG_SWAHILI +#define LANG_SWAHILI 0x41 +#endif +#ifndef LANG_TAMIL +#define LANG_TAMIL 0x49 +#endif +#ifndef LANG_TATAR +#define LANG_TATAR 0x44 +#endif +#ifndef LANG_TELUGU +#define LANG_TELUGU 0x4a +#endif +#ifndef LANG_THAI +#define LANG_THAI 0x1e +#endif +#ifndef LANG_UKRAINIAN +#define LANG_UKRAINIAN 0x22 +#endif +#ifndef LANG_URDU +#define LANG_URDU 0x20 +#endif +#ifndef LANG_UZBEK +#define LANG_UZBEK 0x43 +#endif +#ifndef LANG_VIETNAMESE +#define LANG_VIETNAMESE 0x2a +#endif +#ifndef SUBLANG_ARABIC_SAUDI_ARABIA +#define SUBLANG_ARABIC_SAUDI_ARABIA 0x01 +#endif +#ifndef SUBLANG_ARABIC_IRAQ +#define SUBLANG_ARABIC_IRAQ 0x02 +#endif +#ifndef SUBLANG_ARABIC_EGYPT +#define SUBLANG_ARABIC_EGYPT 0x03 +#endif +#ifndef SUBLANG_ARABIC_LIBYA +#define SUBLANG_ARABIC_LIBYA 0x04 +#endif +#ifndef SUBLANG_ARABIC_ALGERIA +#define SUBLANG_ARABIC_ALGERIA 0x05 +#endif +#ifndef SUBLANG_ARABIC_MOROCCO +#define SUBLANG_ARABIC_MOROCCO 0x06 +#endif +#ifndef SUBLANG_ARABIC_TUNISIA +#define SUBLANG_ARABIC_TUNISIA 0x07 +#endif +#ifndef SUBLANG_ARABIC_OMAN +#define SUBLANG_ARABIC_OMAN 0x08 +#endif +#ifndef SUBLANG_ARABIC_YEMEN +#define SUBLANG_ARABIC_YEMEN 0x09 +#endif +#ifndef SUBLANG_ARABIC_SYRIA +#define SUBLANG_ARABIC_SYRIA 0x0a +#endif +#ifndef SUBLANG_ARABIC_JORDAN +#define SUBLANG_ARABIC_JORDAN 0x0b +#endif +#ifndef SUBLANG_ARABIC_LEBANON +#define SUBLANG_ARABIC_LEBANON 0x0c +#endif +#ifndef SUBLANG_ARABIC_KUWAIT +#define SUBLANG_ARABIC_KUWAIT 0x0d +#endif +#ifndef SUBLANG_ARABIC_UAE +#define SUBLANG_ARABIC_UAE 0x0e +#endif +#ifndef SUBLANG_ARABIC_BAHRAIN +#define SUBLANG_ARABIC_BAHRAIN 0x0f +#endif +#ifndef SUBLANG_ARABIC_QATAR +#define SUBLANG_ARABIC_QATAR 0x10 +#endif +#ifndef SUBLANG_AZERI_LATIN +#define SUBLANG_AZERI_LATIN 0x01 +#endif +#ifndef SUBLANG_AZERI_CYRILLIC +#define SUBLANG_AZERI_CYRILLIC 0x02 +#endif +#ifndef SUBLANG_CHINESE_MACAU +#define SUBLANG_CHINESE_MACAU 0x05 +#endif +#ifndef SUBLANG_ENGLISH_SOUTH_AFRICA +#define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07 +#endif +#ifndef SUBLANG_ENGLISH_JAMAICA +#define SUBLANG_ENGLISH_JAMAICA 0x08 +#endif +#ifndef SUBLANG_ENGLISH_CARIBBEAN +#define SUBLANG_ENGLISH_CARIBBEAN 0x09 +#endif +#ifndef SUBLANG_ENGLISH_BELIZE +#define SUBLANG_ENGLISH_BELIZE 0x0a +#endif +#ifndef SUBLANG_ENGLISH_TRINIDAD +#define SUBLANG_ENGLISH_TRINIDAD 0x0b +#endif +#ifndef SUBLANG_ENGLISH_ZIMBABWE +#define SUBLANG_ENGLISH_ZIMBABWE 0x0c +#endif +#ifndef SUBLANG_ENGLISH_PHILIPPINES +#define SUBLANG_ENGLISH_PHILIPPINES 0x0d +#endif +#ifndef SUBLANG_FRENCH_LUXEMBOURG +#define SUBLANG_FRENCH_LUXEMBOURG 0x05 +#endif +#ifndef SUBLANG_FRENCH_MONACO +#define SUBLANG_FRENCH_MONACO 0x06 +#endif +#ifndef SUBLANG_GERMAN_LUXEMBOURG +#define SUBLANG_GERMAN_LUXEMBOURG 0x04 +#endif +#ifndef SUBLANG_GERMAN_LIECHTENSTEIN +#define SUBLANG_GERMAN_LIECHTENSTEIN 0x05 +#endif +#ifndef SUBLANG_KASHMIRI_INDIA +#define SUBLANG_KASHMIRI_INDIA 0x02 +#endif +#ifndef SUBLANG_MALAY_MALAYSIA +#define SUBLANG_MALAY_MALAYSIA 0x01 +#endif +#ifndef SUBLANG_MALAY_BRUNEI_DARUSSALAM +#define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02 +#endif +#ifndef SUBLANG_NEPALI_INDIA +#define SUBLANG_NEPALI_INDIA 0x02 +#endif +#ifndef SUBLANG_SERBIAN_LATIN +#define SUBLANG_SERBIAN_LATIN 0x02 +#endif +#ifndef SUBLANG_SERBIAN_CYRILLIC +#define SUBLANG_SERBIAN_CYRILLIC 0x03 +#endif +#ifndef SUBLANG_SPANISH_GUATEMALA +#define SUBLANG_SPANISH_GUATEMALA 0x04 +#endif +#ifndef SUBLANG_SPANISH_COSTA_RICA +#define SUBLANG_SPANISH_COSTA_RICA 0x05 +#endif +#ifndef SUBLANG_SPANISH_PANAMA +#define SUBLANG_SPANISH_PANAMA 0x06 +#endif +#ifndef SUBLANG_SPANISH_DOMINICAN_REPUBLIC +#define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07 +#endif +#ifndef SUBLANG_SPANISH_VENEZUELA +#define SUBLANG_SPANISH_VENEZUELA 0x08 +#endif +#ifndef SUBLANG_SPANISH_COLOMBIA +#define SUBLANG_SPANISH_COLOMBIA 0x09 +#endif +#ifndef SUBLANG_SPANISH_PERU +#define SUBLANG_SPANISH_PERU 0x0a +#endif +#ifndef SUBLANG_SPANISH_ARGENTINA +#define SUBLANG_SPANISH_ARGENTINA 0x0b +#endif +#ifndef SUBLANG_SPANISH_ECUADOR +#define SUBLANG_SPANISH_ECUADOR 0x0c +#endif +#ifndef SUBLANG_SPANISH_CHILE +#define SUBLANG_SPANISH_CHILE 0x0d +#endif +#ifndef SUBLANG_SPANISH_URUGUAY +#define SUBLANG_SPANISH_URUGUAY 0x0e +#endif +#ifndef SUBLANG_SPANISH_PARAGUAY +#define SUBLANG_SPANISH_PARAGUAY 0x0f +#endif +#ifndef SUBLANG_SPANISH_BOLIVIA +#define SUBLANG_SPANISH_BOLIVIA 0x10 +#endif +#ifndef SUBLANG_SPANISH_EL_SALVADOR +#define SUBLANG_SPANISH_EL_SALVADOR 0x11 +#endif +#ifndef SUBLANG_SPANISH_HONDURAS +#define SUBLANG_SPANISH_HONDURAS 0x12 +#endif +#ifndef SUBLANG_SPANISH_NICARAGUA +#define SUBLANG_SPANISH_NICARAGUA 0x13 +#endif +#ifndef SUBLANG_SPANISH_PUERTO_RICO +#define SUBLANG_SPANISH_PUERTO_RICO 0x14 +#endif +#ifndef SUBLANG_SWEDISH_FINLAND +#define SUBLANG_SWEDISH_FINLAND 0x02 +#endif +#ifndef SUBLANG_URDU_PAKISTAN +#define SUBLANG_URDU_PAKISTAN 0x01 +#endif +#ifndef SUBLANG_URDU_INDIA +#define SUBLANG_URDU_INDIA 0x02 +#endif +#ifndef SUBLANG_UZBEK_LATIN +#define SUBLANG_UZBEK_LATIN 0x01 +#endif +#ifndef SUBLANG_UZBEK_CYRILLIC +#define SUBLANG_UZBEK_CYRILLIC 0x02 +#endif + +gchar * +gwin_getlocale (void) +{ + LCID lcid = GetThreadLocale (); + gint primary, sub; + gchar *l = NULL, *sl = NULL; + gchar bfr[20]; + + primary = PRIMARYLANGID (LANGIDFROMLCID (lcid)); + sub = SUBLANGID (LANGIDFROMLCID (lcid)); + switch (primary) + { + case LANG_AFRIKAANS: l = "af"; break; + case LANG_ALBANIAN: l = "sq"; break; + case LANG_ARABIC: + l = "ar"; + switch (sub) + { + case SUBLANG_ARABIC_SAUDI_ARABIA: sl = "SA"; break; + case SUBLANG_ARABIC_IRAQ: sl = "IQ"; break; + case SUBLANG_ARABIC_EGYPT: sl = "EG"; break; + case SUBLANG_ARABIC_LIBYA: sl = "LY"; break; + case SUBLANG_ARABIC_ALGERIA: sl = "DZ"; break; + case SUBLANG_ARABIC_MOROCCO: sl = "MA"; break; + case SUBLANG_ARABIC_TUNISIA: sl = "TN"; break; + case SUBLANG_ARABIC_OMAN: sl = "OM"; break; + case SUBLANG_ARABIC_YEMEN: sl = "YE"; break; + case SUBLANG_ARABIC_SYRIA: sl = "SY"; break; + case SUBLANG_ARABIC_JORDAN: sl = "JO"; break; + case SUBLANG_ARABIC_LEBANON: sl = "LB"; break; + case SUBLANG_ARABIC_KUWAIT: sl = "KW"; break; + case SUBLANG_ARABIC_UAE: sl = "AE"; break; + case SUBLANG_ARABIC_BAHRAIN: sl = "BH"; break; + case SUBLANG_ARABIC_QATAR: sl = "QA"; break; + } + break; + case LANG_ARMENIAN: l = "hy"; break; + case LANG_ASSAMESE: l = "as"; break; + case LANG_AZERI: l = "az"; break; + case LANG_BASQUE: l = "eu"; break; + case LANG_BELARUSIAN: l = "be"; break; + case LANG_BENGALI: l = "bn"; break; + case LANG_BULGARIAN: l = "bg"; break; + case LANG_CATALAN: l = "ca"; break; + case LANG_CHINESE: + l = "zh"; + switch (sub) + { + case SUBLANG_CHINESE_TRADITIONAL: sl = "TW"; break; + case SUBLANG_CHINESE_SIMPLIFIED: sl = "CH"; break; + case SUBLANG_CHINESE_HONGKONG: sl = "HK"; break; + case SUBLANG_CHINESE_SINGAPORE: sl = "SG"; break; + case SUBLANG_CHINESE_MACAU: sl = "MO"; break; + } + break; + case LANG_CROATIAN: /* LANG_CROATIAN == LANG_SERBIAN + * What used to be called Serbo-Croatian + * should really now be two separate + * languages because of political reasons. + * (Says tml, who knows nothing about Serbian + * or Croatian.) + * (I can feel those flames coming already.) + */ + switch (sub) + { + case SUBLANG_SERBIAN_LATIN: l = "hr"; break; + case SUBLANG_SERBIAN_CYRILLIC: l = "sr"; break; + default: l = "hr"; /* ??? */ + } + break; + case LANG_CZECH: l = "cs"; break; + case LANG_DANISH: l = "da"; break; + case LANG_DUTCH: + l = "nl"; + switch (sub) + { + case SUBLANG_DUTCH_BELGIAN: sl = "BE"; break; + } + break; + case LANG_ENGLISH: + l = "en"; + switch (sub) + { + case SUBLANG_ENGLISH_US: sl = "US"; break; + case SUBLANG_ENGLISH_UK: sl = "GB"; break; + case SUBLANG_ENGLISH_AUS: sl = "AU"; break; + case SUBLANG_ENGLISH_CAN: sl = "CA"; break; + case SUBLANG_ENGLISH_NZ: sl = "NZ"; break; + case SUBLANG_ENGLISH_EIRE: sl = "IE"; break; + case SUBLANG_ENGLISH_SOUTH_AFRICA: sl = "SA"; break; + case SUBLANG_ENGLISH_JAMAICA: sl = "JM"; break; + case SUBLANG_ENGLISH_CARIBBEAN: sl = "@caribbean"; break; /* ??? */ + case SUBLANG_ENGLISH_BELIZE: sl = "BZ"; break; + case SUBLANG_ENGLISH_TRINIDAD: sl = "TT"; break; + case SUBLANG_ENGLISH_ZIMBABWE: sl = "ZW"; break; + case SUBLANG_ENGLISH_PHILIPPINES: sl = "PH"; break; + } + break; + case LANG_ESTONIAN: l = "et"; break; + case LANG_FAEROESE: l = "fo"; break; + case LANG_FARSI: l = "fa"; break; + case LANG_FINNISH: l = "fi"; break; + case LANG_FRENCH: + l = "fr"; + switch (sub) + { + case SUBLANG_FRENCH_BELGIAN: sl = "BE"; break; + case SUBLANG_FRENCH_CANADIAN: sl = "CA"; break; + case SUBLANG_FRENCH_SWISS: sl = "CH"; break; + case SUBLANG_FRENCH_LUXEMBOURG: sl = "LU"; break; + case SUBLANG_FRENCH_MONACO: sl = "MC"; break; + } + break; + case LANG_GEORGIAN: l = "ka"; break; + case LANG_GERMAN: + l = "de"; + switch (sub) + { + case SUBLANG_GERMAN_SWISS: sl = "CH"; break; + case SUBLANG_GERMAN_AUSTRIAN: sl = "AT"; break; + case SUBLANG_GERMAN_LUXEMBOURG: sl = "LU"; break; + case SUBLANG_GERMAN_LIECHTENSTEIN: sl = "LI"; break; + } + break; + case LANG_GREEK: l = "el"; break; + case LANG_GUJARATI: l = "gu"; break; + case LANG_HEBREW: l = "he"; break; + case LANG_HINDI: l = "hi"; break; + case LANG_HUNGARIAN: l = "hu"; break; + case LANG_ICELANDIC: l = "is"; break; + case LANG_INDONESIAN: l = "id"; break; + case LANG_ITALIAN: + l = "it"; + switch (sub) + { + case SUBLANG_ITALIAN_SWISS: sl = "CH"; break; + } + break; + case LANG_JAPANESE: l = "ja"; break; + case LANG_KANNADA: l = "kn"; break; + case LANG_KASHMIRI: + l = "ks"; + switch (sub) + { + case SUBLANG_KASHMIRI_INDIA: sl = "IN"; break; + } + break; + case LANG_KAZAK: l = "kk"; break; + case LANG_KONKANI: l = "kok"; break; /* ??? */ + case LANG_KOREAN: l = "ko"; break; + case LANG_LATVIAN: l = "lv"; break; + case LANG_LITHUANIAN: l = "lt"; break; + case LANG_MACEDONIAN: l = "mk"; break; + case LANG_MALAY: + l = "ms"; + switch (sub) + { + case SUBLANG_MALAY_MALAYSIA: sl = "MY"; break; + case SUBLANG_MALAY_BRUNEI_DARUSSALAM: sl = "BN"; break; + } + break; + case LANG_MALAYALAM: l = "ml"; break; + case LANG_MANIPURI: l = "mni"; break; + case LANG_MARATHI: l = "mr"; break; + case LANG_NEPALI: + l = "ne"; + switch (sub) + { + case SUBLANG_NEPALI_INDIA: sl = "IN"; break; + } + break; + case LANG_NORWEGIAN: + l = "no"; + switch (sub) + { + case SUBLANG_NORWEGIAN_BOKMAL: sl = "@bokmal"; break; + case SUBLANG_NORWEGIAN_NYNORSK: sl = "@nynorsk"; break; + } + break; + case LANG_ORIYA: l = "or"; break; + case LANG_POLISH: l = "pl"; break; + case LANG_PORTUGUESE: + l = "pt"; + switch (sub) + { + case SUBLANG_PORTUGUESE_BRAZILIAN: sl = "BR"; break; + } + break; + case LANG_PUNJABI: l = "pa"; break; + case LANG_ROMANIAN: l = "ro"; break; + case LANG_RUSSIAN: l = "ru"; break; + case LANG_SANSKRIT: l = "sa"; break; + case LANG_SINDHI: l = "sd"; break; + case LANG_SLOVAK: l = "sk"; break; + case LANG_SLOVENIAN: l = "sl"; break; + case LANG_SPANISH: + l = "es"; + switch (sub) + { + case SUBLANG_SPANISH_MEXICAN: sl = "MX"; break; + case SUBLANG_SPANISH_MODERN: sl = "@modern"; break; /* ??? */ + case SUBLANG_SPANISH_GUATEMALA: sl = "GT"; break; + case SUBLANG_SPANISH_COSTA_RICA: sl = "CR"; break; + case SUBLANG_SPANISH_PANAMA: sl = "PA"; break; + case SUBLANG_SPANISH_DOMINICAN_REPUBLIC: sl = "DO"; break; + case SUBLANG_SPANISH_VENEZUELA: sl = "VE"; break; + case SUBLANG_SPANISH_COLOMBIA: sl = "CO"; break; + case SUBLANG_SPANISH_PERU: sl = "PE"; break; + case SUBLANG_SPANISH_ARGENTINA: sl = "AR"; break; + case SUBLANG_SPANISH_ECUADOR: sl = "EC"; break; + case SUBLANG_SPANISH_CHILE: sl = "CL"; break; + case SUBLANG_SPANISH_URUGUAY: sl = "UY"; break; + case SUBLANG_SPANISH_PARAGUAY: sl = "PY"; break; + case SUBLANG_SPANISH_BOLIVIA: sl = "BO"; break; + case SUBLANG_SPANISH_EL_SALVADOR: sl = "SV"; break; + case SUBLANG_SPANISH_HONDURAS: sl = "HN"; break; + case SUBLANG_SPANISH_NICARAGUA: sl = "NI"; break; + case SUBLANG_SPANISH_PUERTO_RICO: sl = "PR"; break; + } + break; + case LANG_SWAHILI: l = "sw"; break; + case LANG_SWEDISH: + l = "sv"; + switch (sub) + { + case SUBLANG_SWEDISH_FINLAND: sl = "FI"; break; + } + break; + case LANG_TAMIL: l = "ta"; break; + case LANG_TATAR: l = "tt"; break; + case LANG_TELUGU: l = "te"; break; + case LANG_THAI: l = "th"; break; + case LANG_TURKISH: l = "tr"; break; + case LANG_UKRAINIAN: l = "uk"; break; + case LANG_URDU: + l = "ur"; + switch (sub) + { + case SUBLANG_URDU_PAKISTAN: sl = "PK"; break; + case SUBLANG_URDU_INDIA: sl = "IN"; break; + } + break; + case LANG_UZBEK: + l = "uz"; + switch (sub) + { + case SUBLANG_UZBEK_LATIN: sl = "2latin"; break; + case SUBLANG_UZBEK_CYRILLIC: sl = "@cyrillic"; break; + } + break; + case LANG_VIETNAMESE: l = "vi"; break; + default: l = "xx"; break; + } + strcpy (bfr, l); + if (sl != NULL) + { + strcat (bfr, "_"); + strcat (bfr, sl); + } + + return g_strdup (bfr); +} + #endif /* G_OS_WIN32 */ diff --git a/testglib.c b/testglib.c index 2a5ba7381..70762ef51 100644 --- a/testglib.c +++ b/testglib.c @@ -914,8 +914,13 @@ main (int argc, #ifdef G_HAVE_GINT64 g_assert (GUINT64_SWAP_LE_BE (gu64t1) == gu64t2); #endif + g_print ("ok\n"); +#ifdef G_OS_WIN32 + g_print ("current locale: %s\n", gwin_getlocale ()); +#endif + return 0; } diff --git a/tests/testglib.c b/tests/testglib.c index 2a5ba7381..70762ef51 100644 --- a/tests/testglib.c +++ b/tests/testglib.c @@ -914,8 +914,13 @@ main (int argc, #ifdef G_HAVE_GINT64 g_assert (GUINT64_SWAP_LE_BE (gu64t1) == gu64t2); #endif + g_print ("ok\n"); +#ifdef G_OS_WIN32 + g_print ("current locale: %s\n", gwin_getlocale ()); +#endif + return 0; } |