scuffed-code/icu4c/source/common/resbund_cnv.cpp

73 lines
2.2 KiB
C++

/*
*******************************************************************************
*
* Copyright (C) 1997-2004, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
* file name: resbund_cnv.cpp
* encoding: US-ASCII
* tab size: 8 (not used)
* indentation:4
*
* created on: 2004aug25
* created by: Markus W. Scherer
*
* Character conversion functions moved here from resbund.cpp
*/
#include "unicode/utypes.h"
#include "unicode/resbund.h"
#include "uinvchar.h"
U_NAMESPACE_BEGIN
ResourceBundle::ResourceBundle( const UnicodeString& path,
const Locale& locale,
UErrorCode& error)
:UObject(), fLocale(NULL)
{
constructForLocale(path, locale, error);
}
ResourceBundle::ResourceBundle( const UnicodeString& path,
UErrorCode& error)
:UObject(), fLocale(NULL)
{
constructForLocale(path, Locale::getDefault(), error);
}
void
ResourceBundle::constructForLocale(const UnicodeString& path,
const Locale& locale,
UErrorCode& error)
{
char name[300];
if(path.length() >= sizeof(name)) {
fResource = NULL;
error = U_ILLEGAL_ARGUMENT_ERROR;
} else if(!path.isEmpty()) {
if(uprv_isInvariantUString(path.getBuffer(), path.length())) {
// the invariant converter is sufficient for package and tree names
// and is more efficient
path.extract(0, INT32_MAX, name, (int32_t)sizeof(name), US_INV);
} else {
#if !UCONFIG_NO_CONVERSION
// use the default converter to support variant-character paths
path.extract(name, sizeof(name), 0, error);
#else
// the default converter is not available
fResource = NULL;
error = U_UNSUPPORTED_ERROR;
return;
#endif
}
fResource = ures_open(name, locale.getName(), &error);
} else {
fResource = ures_open(0, locale.getName(), &error);
}
}
U_NAMESPACE_END