|
1 /* |
|
2 ****************************************************************************** |
|
3 * |
|
4 * Copyright (C) 1998-2004, International Business Machines |
|
5 * Corporation and others. All Rights Reserved. |
|
6 * |
|
7 ****************************************************************************** |
|
8 * |
|
9 * ucnvdisp.c: |
|
10 * Implements APIs for the ICU's codeset conversion library display names. |
|
11 * |
|
12 * Modification History: |
|
13 * |
|
14 * Date Name Description |
|
15 * 04/04/99 helena Fixed internal header inclusion. |
|
16 * 05/09/00 helena Added implementation to handle fallback mappings. |
|
17 * 06/20/2000 helena OS/400 port changes; mostly typecast. |
|
18 * 09/08/2004 grhoten split from ucnv.c |
|
19 */ |
|
20 |
|
21 #include "unicode/utypes.h" |
|
22 |
|
23 #if !UCONFIG_NO_CONVERSION |
|
24 |
|
25 #include "unicode/ustring.h" |
|
26 #include "unicode/ures.h" |
|
27 #include "unicode/ucnv.h" |
|
28 #include "cstring.h" |
|
29 #include "ustr_imp.h" |
|
30 #include "ucnv_imp.h" |
|
31 #include "putilimp.h" |
|
32 |
|
33 U_CAPI int32_t U_EXPORT2 |
|
34 ucnv_getDisplayName(const UConverter *cnv, |
|
35 const char *displayLocale, |
|
36 UChar *displayName, int32_t displayNameCapacity, |
|
37 UErrorCode *pErrorCode) { |
|
38 UResourceBundle *rb; |
|
39 const UChar *name; |
|
40 int32_t length; |
|
41 UErrorCode localStatus = U_ZERO_ERROR; |
|
42 |
|
43 /* check arguments */ |
|
44 if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { |
|
45 return 0; |
|
46 } |
|
47 |
|
48 if(cnv==NULL || displayNameCapacity<0 || (displayNameCapacity>0 && displayName==NULL)) { |
|
49 *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; |
|
50 return 0; |
|
51 } |
|
52 |
|
53 /* open the resource bundle and get the display name string */ |
|
54 rb=ures_open(NULL, displayLocale, pErrorCode); |
|
55 if(U_FAILURE(*pErrorCode)) { |
|
56 return 0; |
|
57 } |
|
58 |
|
59 /* use the internal name as the key */ |
|
60 name=ures_getStringByKey(rb, cnv->sharedData->staticData->name, &length, &localStatus); |
|
61 ures_close(rb); |
|
62 |
|
63 if(U_SUCCESS(localStatus)) { |
|
64 /* copy the string */ |
|
65 if (*pErrorCode == U_ZERO_ERROR) { |
|
66 *pErrorCode = localStatus; |
|
67 } |
|
68 u_memcpy(displayName, name, uprv_min(length, displayNameCapacity)*U_SIZEOF_UCHAR); |
|
69 } else { |
|
70 /* convert the internal name into a Unicode string */ |
|
71 length=(int32_t)uprv_strlen(cnv->sharedData->staticData->name); |
|
72 u_charsToUChars(cnv->sharedData->staticData->name, displayName, uprv_min(length, displayNameCapacity)); |
|
73 } |
|
74 return u_terminateUChars(displayName, displayNameCapacity, length, pErrorCode); |
|
75 } |
|
76 |
|
77 #endif |
|
78 |
|
79 /* |
|
80 * Hey, Emacs, please set the following: |
|
81 * |
|
82 * Local Variables: |
|
83 * indent-tabs-mode: nil |
|
84 * End: |
|
85 * |
|
86 */ |