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 /gutils.c | |
parent | a2760140c83d32887a0f3f16cd2a49fd2a3adb59 (diff) | |
download | glib-30cc3ed1fe251c3b5ee477152645884849037af0.tar.gz |
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.
Diffstat (limited to 'gutils.c')
-rw-r--r-- | gutils.c | 574 |
1 files changed, 574 insertions, 0 deletions
@@ -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 */ |