2
*******************************************************************************
4
* Copyright (C) 1998-1999, International Business Machines
5
* Corporation and others. All Rights Reserved.
7
*******************************************************************************
11
* Modification History:
13
* Date Name Description
14
* 11/18/98 stephen Creation.
15
* 12/10/1999 bobbyr@optiosoftware.com Fix for memory leak + string allocation bugs
16
*******************************************************************************
23
#include "unicode/ustring.h"
24
#include "unicode/uloc.h"
27
u_locbund_new(const char *loc)
29
ULocaleBundle *result = (ULocaleBundle*) uprv_malloc(sizeof(ULocaleBundle));
35
len = (loc == 0 ? strlen(uloc_getDefault()) : strlen(loc));
36
result->fLocale = (char*) uprv_malloc(len + 1);
37
if(result->fLocale == 0) {
42
strcpy(result->fLocale, (loc == 0 ? uloc_getDefault() : loc) );
44
result->fNumberFormat = 0;
45
result->fPercentFormat = 0;
46
result->fCurrencyFormat = 0;
47
result->fScientificFormat = 0;
48
result->fSpelloutFormat = 0;
49
result->fDateFormat = 0;
50
result->fTimeFormat = 0;
56
u_locbund_clone(const ULocaleBundle *bundle)
58
ULocaleBundle *result = (ULocaleBundle*)uprv_malloc(sizeof(ULocaleBundle));
59
UErrorCode status = U_ZERO_ERROR;
64
result->fLocale = (char*) uprv_malloc(strlen(bundle->fLocale) + 1);
65
if(result->fLocale == 0) {
70
strcpy(result->fLocale, bundle->fLocale );
72
result->fNumberFormat = (bundle->fNumberFormat == 0 ? 0 :
73
unum_clone(bundle->fNumberFormat, &status));
74
result->fPercentFormat = (bundle->fPercentFormat == 0 ? 0 :
75
unum_clone(bundle->fPercentFormat,
77
result->fCurrencyFormat = (bundle->fCurrencyFormat == 0 ? 0 :
78
unum_clone(bundle->fCurrencyFormat,
80
result->fScientificFormat = (bundle->fScientificFormat == 0 ? 0 :
81
unum_clone(bundle->fScientificFormat,
83
result->fSpelloutFormat = (bundle->fSpelloutFormat == 0 ? 0 :
84
unum_clone(bundle->fSpelloutFormat,
86
result->fDateFormat = (bundle->fDateFormat == 0 ? 0 :
87
udat_clone(bundle->fDateFormat, &status));
88
result->fTimeFormat = (bundle->fTimeFormat == 0 ? 0 :
89
udat_clone(bundle->fTimeFormat, &status));
95
u_locbund_delete(ULocaleBundle *bundle)
97
uprv_free(bundle->fLocale);
99
if(bundle->fNumberFormat != 0)
100
unum_close(bundle->fNumberFormat);
101
if(bundle->fPercentFormat != 0)
102
unum_close(bundle->fPercentFormat);
103
if(bundle->fCurrencyFormat != 0)
104
unum_close(bundle->fCurrencyFormat);
105
if(bundle->fScientificFormat != 0)
106
unum_close(bundle->fScientificFormat);
107
if(bundle->fSpelloutFormat != 0)
108
unum_close(bundle->fSpelloutFormat);
109
if(bundle->fDateFormat != 0)
110
udat_close(bundle->fDateFormat);
111
if(bundle->fTimeFormat != 0)
112
udat_close(bundle->fTimeFormat);
118
u_locbund_getNumberFormat(ULocaleBundle *bundle)
120
UErrorCode status = U_ZERO_ERROR;
122
if(bundle->fNumberFormat == 0) {
123
bundle->fNumberFormat = unum_open(UNUM_DEFAULT, NULL,0,bundle->fLocale,NULL, &status);
124
if(U_FAILURE(status))
128
return bundle->fNumberFormat;
132
u_locbund_getPercentFormat(ULocaleBundle *bundle)
134
UErrorCode status = U_ZERO_ERROR;
136
if(bundle->fPercentFormat == 0) {
137
bundle->fPercentFormat = unum_open(UNUM_PERCENT,NULL,0, bundle->fLocale,NULL, &status);
138
if(U_FAILURE(status))
142
return bundle->fPercentFormat;
146
u_locbund_getCurrencyFormat(ULocaleBundle *bundle)
148
UErrorCode status = U_ZERO_ERROR;
150
if(bundle->fCurrencyFormat == 0) {
151
bundle->fCurrencyFormat = unum_open(UNUM_CURRENCY,NULL,0, bundle->fLocale, NULL,&status);
152
if(U_FAILURE(status))
156
return bundle->fCurrencyFormat;
162
u_locbund_getScientificFormat(ULocaleBundle *bundle)
164
UErrorCode status = U_ZERO_ERROR;
165
/* UChar pattern [PAT_SIZE];*/
167
if(bundle->fScientificFormat == 0) {
168
/* create the pattern for the locale */
169
/* u_uastrcpy(pattern, "0.000000E000");*/
171
bundle->fScientificFormat = unum_open(UNUM_SCIENTIFIC, NULL, 0,
172
bundle->fLocale, NULL,&status);
174
if(U_FAILURE(status))
178
return bundle->fScientificFormat;
182
u_locbund_getSpelloutFormat(ULocaleBundle *bundle)
184
UErrorCode status = U_ZERO_ERROR;
186
if(bundle->fSpelloutFormat == 0) {
187
bundle->fSpelloutFormat = unum_open(UNUM_SPELLOUT,NULL,0 ,bundle->fLocale, NULL,
191
return bundle->fSpelloutFormat;
195
u_locbund_getDateFormat(ULocaleBundle *bundle)
197
UErrorCode status = U_ZERO_ERROR;
199
if(bundle->fDateFormat == 0) {
200
bundle->fDateFormat = udat_open(UDAT_NONE, UDAT_DEFAULT,
201
bundle->fLocale, 0, 0,NULL,0, &status);
204
return bundle->fDateFormat;
208
u_locbund_getTimeFormat(ULocaleBundle *bundle)
210
UErrorCode status = U_ZERO_ERROR;
212
if(bundle->fTimeFormat == 0) {
213
bundle->fTimeFormat = udat_open(UDAT_DEFAULT, UDAT_NONE,
214
bundle->fLocale, 0, 0,NULL,0, &status);
217
return bundle->fTimeFormat;