From 94290dfdfc82de21f15e874262d39afeb2a47fe5 Mon Sep 17 00:00:00 2001 From: Akira Kakuto Date: Tue, 5 Mar 2019 04:23:59 +0000 Subject: use u_strFromUTF8WithSub() with a change U_SENTINEL ---> 0xfffd git-svn-id: svn://tug.org/texlive/trunk@50234 c570f23f-e606-0410-a88d-b1316a301751 --- Build/source/texk/bibtex-x/ChangeLog | 7 ++++++- Build/source/texk/bibtex-x/bibtex-2.c | 21 ++++++++++++--------- 2 files changed, 18 insertions(+), 10 deletions(-) (limited to 'Build') diff --git a/Build/source/texk/bibtex-x/ChangeLog b/Build/source/texk/bibtex-x/ChangeLog index 7a52cff69e7..b6ddee7279b 100644 --- a/Build/source/texk/bibtex-x/ChangeLog +++ b/Build/source/texk/bibtex-x/ChangeLog @@ -1,6 +1,11 @@ 2019-03-05 Akira Kakuto - * bibtex-2.c: Avoid access violation on Windows. + * bibtex-2.c: Change U_SENTINEL to 0xfffd in + u_strFromUTF8WithSub(a, b, c, d, e, U_SENTINEL, NULL, f) + which is + u_strFromUTF8(a, b, c, d, e, f) + where U_SENTINEL is -1, because it works also for my + build of ICU. 2019-03-04 Hironobu Yamashita diff --git a/Build/source/texk/bibtex-x/bibtex-2.c b/Build/source/texk/bibtex-x/bibtex-2.c index 9d6203affe1..3d0b07aedc0 100644 --- a/Build/source/texk/bibtex-x/bibtex-2.c +++ b/Build/source/texk/bibtex-x/bibtex-2.c @@ -2962,27 +2962,30 @@ we use "-o" to indicate the rule of conpare. 23/sep/2009 /* icu_toUChars() seems not working here, using u_strFromUTF8 instead. (04/mar/2019) */ + +/* +On Windows, u_strFromUTF8() fails but u_strFromUTF8WithSub() +with U_SENTINEL (-1) ---> 0xfffd works. +So I use u_strFromUTF8WithSub() by replacing 0xffffffff --> 0xfffd. +--ak (05/mar/2019) +*/ + /* uchlen1 = icu_toUChars(entry_strs, (ptr1 * (ENT_STR_SIZE+1)), lenk1, uch1, ucap); uchlen2 = icu_toUChars(entry_strs, (ptr2 * (ENT_STR_SIZE+1)), lenk2, uch2, ucap); */ - u_strFromUTF8(uch1, ucap, &uchlen1, (char *)&ENTRY_STRS(ptr1, 0), lenk1, &err1); - u_strFromUTF8(uch2, ucap, &uchlen2, (char *)&ENTRY_STRS(ptr2, 0), lenk2, &err1); + u_strFromUTF8WithSub(uch1, ucap, &uchlen1, (char *)&ENTRY_STRS(ptr1, 0), lenk1, 0xfffd, NULL, &err1); + u_strFromUTF8WithSub(uch2, ucap, &uchlen2, (char *)&ENTRY_STRS(ptr2, 0), lenk2, 0xfffd, NULL, &err1); /* - In my Windows build, the above fails: err1 != U_ZERO_ERROR, which - gives access violation in ucol_open(). Maybe my ICU build is wrong. - In this case I use the original functions which seem not working, - only to avoid a crash by access violation. Thus I cannot support - correct behavior for bibtexu on Windows. -- A. Kakuto 2019/03/05 + If err1 != U_ZERO_ERROR, we use the original functions. */ if (!U_SUCCESS(err1)) { uchlen1 = icu_toUChars(entry_strs, (ptr1 * (ENT_STR_SIZE+1)), lenk1, uch1, ucap); uchlen2 = icu_toUChars(entry_strs, (ptr2 * (ENT_STR_SIZE+1)), lenk2, uch2, ucap); - } - err1 = U_ZERO_ERROR; + } if(Flag_location) ucol1 = ucol_open(Str_location, &err1); -- cgit v1.2.3