Index: trunk/src/emx/src/lib/locale/setlocale.c
===================================================================
--- trunk/src/emx/src/lib/locale/setlocale.c	(revision 1781)
+++ trunk/src/emx/src/lib/locale/setlocale.c	(revision 1782)
@@ -222,5 +222,5 @@
 static void localeMonetaryFree(__LIBC_PLOCALELCONV pLconv);
 static int localeNumericDo(__LIBC_PLOCALELCONV pLconv, UconvObject uobj, struct UniLconv *pULconv);
-static int localeMonetaryDo(__LIBC_PLOCALELCONV pLconv, UconvObject uobj, LocaleObject lobj, struct UniLconv *pULconv);
+static int localeMonetaryDo(__LIBC_PLOCALELCONV pLconv, UconvObject uobj, LocaleObject lobj, struct UniLconv *pULconv, const char *pszLocale);
 static void localeGlobalFree(__LIBC_PLOCALEGLOBAL pGlobal, int iCategory);
 static int localeParseLocale(char *pszLocale, const char **ppszCodepage);
@@ -902,6 +902,7 @@
  * @param   uobj        The UconvObject to use.
  * @param   pULconv     Pointer to the pULconv structure to get the data from.
- */
-static int localeMonetaryDo(__LIBC_PLOCALELCONV pLconv, UconvObject uobj, LocaleObject lobj, struct UniLconv *pULconv)
+ * @param   pszLocale   The locale specifier.
+ */
+static int localeMonetaryDo(__LIBC_PLOCALELCONV pLconv, UconvObject uobj, LocaleObject lobj, struct UniLconv *pULconv, const char *pszLocale)
 {
     int rc;
@@ -909,32 +910,55 @@
     localeMonetaryFree(pLconv);
 
-    /*
-     * Convert the stuff.
-     */
+    if (    !IS_C_LOCALE(pszLocale)
+        &&  !IS_POSIX_LOCALE(pszLocale))
+    {
+        /*
+         * Convert the stuff.
+         */
 #define CONVERT_UCS(field) \
-    do  { rc = convert_ucs(uobj, pULconv->field, &pLconv->s.field); if (rc) return rc; } while (0)
-    CONVERT_UCS(int_curr_symbol);
-    CONVERT_UCS(currency_symbol);
-    CONVERT_UCS(mon_decimal_point);
-    CONVERT_UCS(mon_thousands_sep);
-    CONVERT_UCS(positive_sign);
-    CONVERT_UCS(negative_sign);
-    pLconv->s.int_frac_digits   = pULconv->int_frac_digits;
-    pLconv->s.frac_digits       = pULconv->frac_digits;
-    pLconv->s.p_cs_precedes     = pULconv->p_cs_precedes;
-    pLconv->s.p_sep_by_space    = pULconv->p_sep_by_space;
-    pLconv->s.n_cs_precedes     = pULconv->n_cs_precedes;
-    pLconv->s.n_sep_by_space    = pULconv->n_sep_by_space;
-    pLconv->s.p_sign_posn       = pULconv->p_sign_posn;
-    pLconv->s.n_sign_posn       = pULconv->n_sign_posn;
+        do  { rc = convert_ucs(uobj, pULconv->field, &pLconv->s.field); if (rc) return rc; } while (0)
+        CONVERT_UCS(int_curr_symbol);
+        CONVERT_UCS(currency_symbol);
+        CONVERT_UCS(mon_decimal_point);
+        CONVERT_UCS(mon_thousands_sep);
+        CONVERT_UCS(positive_sign);
+        CONVERT_UCS(negative_sign);
+        pLconv->s.int_frac_digits   = pULconv->int_frac_digits;
+        pLconv->s.frac_digits       = pULconv->frac_digits;
+        pLconv->s.p_cs_precedes     = pULconv->p_cs_precedes;
+        pLconv->s.p_sep_by_space    = pULconv->p_sep_by_space;
+        pLconv->s.n_cs_precedes     = pULconv->n_cs_precedes;
+        pLconv->s.n_sep_by_space    = pULconv->n_sep_by_space;
+        pLconv->s.p_sign_posn       = pULconv->p_sign_posn;
+        pLconv->s.n_sign_posn       = pULconv->n_sign_posn;
 #undef CONVERT_UCS
 
-    /*
-     * Extra stuff (which I don't know which member corresponds to).
-     */
-    if ((rc = query_item(lobj, uobj, CRNCYSTR, &pLconv->pszCrncyStr)))
-        return rc;
-
-    return localeConvertGrouping(pULconv->mon_grouping, &pLconv->s.mon_grouping);
+        /*
+         * Extra stuff (which I don't know which member corresponds to).
+         */
+        if ((rc = query_item(lobj, uobj, CRNCYSTR, &pLconv->pszCrncyStr)))
+            return rc;
+
+        return localeConvertGrouping(pULconv->mon_grouping, &pLconv->s.mon_grouping);
+    }
+    else
+    {
+        /*
+         * The C/POSIX locale.
+         */
+        pLconv->fMonetaryConsts = 1;
+        pLconv->s.int_curr_symbol = pLconv->s.currency_symbol = pLconv->s.mon_decimal_point
+            = pLconv->s.mon_thousands_sep = pLconv->s.positive_sign = pLconv->s.negative_sign
+            = pLconv->pszCrncyStr = "";
+        pLconv->s.int_frac_digits   = -1;
+        pLconv->s.frac_digits       = -1;
+        pLconv->s.p_cs_precedes     = -1;
+        pLconv->s.p_sep_by_space    = -1;
+        pLconv->s.n_cs_precedes     = -1;
+        pLconv->s.n_sep_by_space    = -1;
+        pLconv->s.p_sign_posn       = -1;
+        pLconv->s.n_sign_posn       = -1;
+        return 0;
+    }
 }
 
@@ -1233,5 +1257,5 @@
                     rc = localeNumericDo(&pTemp->Lconv, uobj, pULconv);
                 else
-                    rc = localeMonetaryDo(&pTemp->Lconv, uobj, lobj, pULconv);
+                    rc = localeMonetaryDo(&pTemp->Lconv, uobj, lobj, pULconv, pszLocale);
                 UniFreeLocaleInfo(pULconv);
             }
