This keeps the old names for the few struct fields that are left,
to avoid having to change code in ctype.h which references it.

Alternatively, we could switch consistently to the new names in ctype.h,
and add "#define _locale_mb_cur_max mb_cur_max" for the non-ucrt case?
That's a much larger and more intrusive change though.

Signed-off-by: Martin Storsjö <mar...@martin.st>
---
This fixes a testcase like this:

    #include <stdio.h>
    #include <locale.h>
    #include <ctype.h>

    int main(int argc, char const *argv[])
    {
        _locale_t loc = _create_locale(LC_ALL, "C");
        int ret = _isdigit_l('3', loc);
        printf ("%d\n", ret);
        return 0;
    }

I guess Wine would need a similar change for ucrt as well, as code which
does this correctly for ucrt right now fails in Wine.
---
 mingw-w64-headers/crt/crtdefs.h | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/mingw-w64-headers/crt/crtdefs.h b/mingw-w64-headers/crt/crtdefs.h
index 20ba574..2321733 100644
--- a/mingw-w64-headers/crt/crtdefs.h
+++ b/mingw-w64-headers/crt/crtdefs.h
@@ -442,6 +442,13 @@ typedef struct tagLC_ID {
 #ifndef _THREADLOCALEINFO
 #define _THREADLOCALEINFO
 typedef struct threadlocaleinfostruct {
+#ifdef __MSVCRT_VERSION__ >= 0x1400
+  // In UCRT, these fields actually have different names, but we keep the old
+  // names since e.g. macros in ctype.h reference them.
+  const unsigned short *pctype; // _locale_pctype
+  int mb_cur_max;               // _locale_mb_cur_max
+  unsigned int lc_codepage;     // _locale_lc_codepage
+#else
   int refcount;
   unsigned int lc_codepage;
   unsigned int lc_collate_cp;
@@ -465,6 +472,7 @@ typedef struct threadlocaleinfostruct {
   const unsigned char *pclmap;
   const unsigned char *pcumap;
   struct __lc_time_data *lc_time_curr;
+#endif
 } threadlocinfo;
 #endif /* _THREADLOCALEINFO */
 
-- 
2.7.4



_______________________________________________
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to