]>
Commit | Line | Data |
---|---|---|
b75a7d8f A |
1 | /* |
2 | ********************************************************************** | |
3 | * Copyright (c) 2003, International Business Machines | |
4 | * Corporation and others. All Rights Reserved. | |
5 | ********************************************************************** | |
6 | * Author: Alan Liu | |
7 | * Created: March 19 2003 | |
8 | * Since: ICU 2.6 | |
9 | ********************************************************************** | |
10 | */ | |
11 | #include "unicode/ucat.h" | |
12 | #include "unicode/ustring.h" | |
13 | #include "cstring.h" | |
14 | #include "uassert.h" | |
15 | ||
16 | /* Separator between set_num and msg_num */ | |
17 | static const char SEPARATOR = '%'; | |
18 | ||
19 | /* Maximum length of a set_num/msg_num key, incl. terminating zero. | |
20 | * Longest possible key is "-2147483648%-2147483648" */ | |
21 | #define MAX_KEY_LEN (24) | |
22 | ||
23 | /** | |
24 | * Fill in buffer with a set_num/msg_num key string, given the numeric | |
25 | * values. Numeric values must be >= 0. Buffer must be of length | |
26 | * MAX_KEY_LEN or more. | |
27 | */ | |
28 | static char* | |
29 | _catkey(char* buffer, int32_t set_num, int32_t msg_num) { | |
30 | int32_t i = 0; | |
31 | i = T_CString_integerToString(buffer, set_num, 10); | |
32 | buffer[i++] = SEPARATOR; | |
33 | T_CString_integerToString(buffer+i, msg_num, 10); | |
34 | return buffer; | |
35 | } | |
36 | ||
37 | U_CAPI u_nl_catd U_EXPORT2 | |
38 | u_catopen(const char* name, const char* locale, UErrorCode* ec) { | |
39 | return (u_nl_catd) ures_open(name, locale, ec); | |
40 | } | |
41 | ||
42 | U_CAPI void U_EXPORT2 | |
43 | u_catclose(u_nl_catd catd) { | |
44 | ures_close((UResourceBundle*) catd); /* may be NULL */ | |
45 | } | |
46 | ||
47 | U_CAPI const UChar* U_EXPORT2 | |
48 | u_catgets(u_nl_catd catd, int32_t set_num, int32_t msg_num, | |
49 | const UChar* s, | |
50 | int32_t* len, UErrorCode* ec) { | |
51 | ||
52 | char key[MAX_KEY_LEN]; | |
53 | const UChar* result; | |
54 | ||
55 | if (ec == NULL || U_FAILURE(*ec)) { | |
56 | goto ERROR; | |
57 | } | |
58 | ||
59 | result = ures_getStringByKey((const UResourceBundle*) catd, | |
60 | _catkey(key, set_num, msg_num), | |
61 | len, ec); | |
62 | if (U_FAILURE(*ec)) { | |
63 | goto ERROR; | |
64 | } | |
65 | ||
66 | return result; | |
67 | ||
68 | ERROR: | |
69 | /* In case of any failure, return s */ | |
70 | if (len != NULL) { | |
71 | *len = u_strlen(s); | |
72 | } | |
73 | return s; | |
74 | } | |
75 | ||
76 | /*eof*/ |