summaryrefslogtreecommitdiff
path: root/dev-libs/icu/files/icu-73.1-fix-UChar-api-deux.patch
blob: ea943873a82bc964d48e41e2d7dc3b07bfc63bdf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
https://bugs.gentoo.org/904381
https://unicode-org.atlassian.net/browse/ICU-22356
https://github.com/unicode-org/icu/pull/2431 (what we originally applied)
https://github.com/unicode-org/icu/pull/2432 (this commit)
https://github.com/unicode-org/icu/commit/4fd9d6ce9a951e66e727b296138f22cd05479de1

From 4fd9d6ce9a951e66e727b296138f22cd05479de1 Mon Sep 17 00:00:00 2001
From: Fredrik Roubert <roubert@google.com>
Date: Tue, 18 Apr 2023 23:39:28 +0200
Subject: [PATCH] ICU-22356 Use ConstChar16Ptr to safely cast from UChar* to
 char16_t*.

This is necessary for this header file to be usable by clients that
define UCHAR_TYPE as a type not compatible with char16_t, eg. uint16_t.
--- a/common/unicode/ures.h
+++ b/common/unicode/ures.h
@@ -25,6 +25,7 @@
 #ifndef URES_H
 #define URES_H
 
+#include "unicode/char16ptr.h"
 #include "unicode/utypes.h"
 #include "unicode/uloc.h"
 
@@ -812,7 +813,7 @@ inline UnicodeString
 ures_getUnicodeString(const UResourceBundle *resB, UErrorCode* status) {
     UnicodeString result;
     int32_t len = 0;
-    const char16_t *r = ures_getString(resB, &len, status);
+    const char16_t *r = ConstChar16Ptr(ures_getString(resB, &len, status));
     if(U_SUCCESS(*status)) {
         result.setTo(true, r, len);
     } else {
@@ -837,7 +838,7 @@ inline UnicodeString
 ures_getNextUnicodeString(UResourceBundle *resB, const char ** key, UErrorCode* status) {
     UnicodeString result;
     int32_t len = 0;
-    const char16_t* r = ures_getNextString(resB, &len, key, status);
+    const char16_t* r = ConstChar16Ptr(ures_getNextString(resB, &len, key, status));
     if(U_SUCCESS(*status)) {
         result.setTo(true, r, len);
     } else {
@@ -859,7 +860,7 @@ inline UnicodeString
 ures_getUnicodeStringByIndex(const UResourceBundle *resB, int32_t indexS, UErrorCode* status) {
     UnicodeString result;
     int32_t len = 0;
-    const char16_t* r = ures_getStringByIndex(resB, indexS, &len, status);
+    const char16_t* r = ConstChar16Ptr(ures_getStringByIndex(resB, indexS, &len, status));
     if(U_SUCCESS(*status)) {
         result.setTo(true, r, len);
     } else {
@@ -882,7 +883,7 @@ inline UnicodeString
 ures_getUnicodeStringByKey(const UResourceBundle *resB, const char* key, UErrorCode* status) {
     UnicodeString result;
     int32_t len = 0;
-    const char16_t* r = ures_getStringByKey(resB, key, &len, status);
+    const char16_t* r = ConstChar16Ptr(ures_getStringByKey(resB, key, &len, status));
     if(U_SUCCESS(*status)) {
         result.setTo(true, r, len);
     } else {
--- a/test/intltest/Makefile.in
+++ b/test/intltest/Makefile.in
@@ -70,7 +70,7 @@ numbertest_parse.o numbertest_doubleconversion.o numbertest_skeletons.o \
 static_unisets_test.o numfmtdatadriventest.o numbertest_range.o erarulestest.o \
 formattedvaluetest.o formatted_string_builder_test.o numbertest_permutation.o \
 units_data_test.o units_router_test.o units_test.o displayoptions_test.o \
-numbertest_simple.o
+numbertest_simple.o uchar_type_build_test.o
 
 DEPS = $(OBJECTS:.o=.d)
 
--- /dev/null
+++ b/test/intltest/uchar_type_build_test.cpp
@@ -0,0 +1,7 @@
+// © 2023 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html#License
+
+// ICU-22356 Test that client code can be built with UCHAR_TYPE redefined.
+#undef UCHAR_TYPE
+#define UCHAR_TYPE uint16_t
+#include "unicode/ures.h"