/* ******************************************************************************* * * 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() >= (int32_t)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