diff --git a/databases/firebird25-client/Makefile b/databases/firebird25-client/Makefile index dfaf1d9a2737..5516192ff958 100644 --- a/databases/firebird25-client/Makefile +++ b/databases/firebird25-client/Makefile @@ -1,16 +1,15 @@ # Created by: Alonso Cárdenas Márquez # $FreeBSD$ PORTNAME= firebird -PORTREVISION= 3 PKGNAMESUFFIX= ${PORTVERSION:R:S/.//}-client COMMENT= Firebird-2 database client MASTERDIR= ${.CURDIR}/../firebird25-server PLIST= ${PKGDIR}/pkg-plist.client CLIENT_ONLY= yes .include "${MASTERDIR}/Makefile" diff --git a/databases/firebird25-server/Makefile b/databases/firebird25-server/Makefile index a797cf3baad5..e6ad26493026 100644 --- a/databases/firebird25-server/Makefile +++ b/databases/firebird25-server/Makefile @@ -1,217 +1,216 @@ # Created by: Alonso Cárdenas Márquez # $FreeBSD$ PORTNAME= firebird -PORTVERSION= 2.5.2 -PORTREVISION?= 5 +PORTVERSION= 2.5.3 CATEGORIES?= databases MASTER_SITES= SF/${PORTNAME}/${PORTNAME}/${PORTVERSION:S/.0//}-Release/ PKGNAMESUFFIX?= ${PORTVERSION:R:S/.//}-server -DISTNAME= ${PORTNAME:S/f/F/}-${PORTVERSION}.26540-0 +DISTNAME= ${PORTNAME:S/f/F/}-${PORTVERSION}.26778-0 DIST_SUBDIR= ${PORTNAME} MAINTAINER= ports@FreeBSD.org COMMENT?= Firebird-2 relational database (server) CONFLICTS?= ${PORTNAME}20-client-* \ ${PORTNAME}21-client-* \ ${PORTNAME}20-server-* \ ${PORTNAME}21-server-* LIB_DEPENDS= libicuuc.so:${PORTSDIR}/devel/icu USES= bison tar:bzip2 gmake GNU_CONFIGURE= yes MAKE_JOBS_UNSAFE= yes CONFIGURE_ARGS= --with-system-editline \ --with-system-icu \ --prefix=${LOCALSTATEDIR} \ --exec-prefix=${PREFIX} \ --with-fbconf=${PREFIX}/${CONFDIR} \ --with-fbglock=${LOCALSTATEDIR} \ --with-fbhelp=${LOCALSTATEDIR}/help \ --with-fbintl=${LIBEXECDIR}/intl \ --with-fblog=${LOCALSTATEDIR} \ --with-fbmsg=${DATADIR} \ --with-fbplugins=${LIBEXECDIR}/plugins \ --with-fbsbin=${PREFIX}/sbin \ --with-fbsecure-db=${LOCALSTATEDIR} \ --with-fbudf=${LIBEXECDIR}/UDF CONFIGURE_ENV+= PTHREAD_CFLAGS="${PTHREAD_CFLAGS}" \ PTHREAD_LIBS="${PTHREAD_LIBS}" CFLAGS+= -I${LOCALBASE}/include LDFLAGS+= -L${LOCALBASE}/lib LOCALSTATEDIR= /var/db/firebird CONFDIR= etc/firebird LIBEXECDIR= ${PREFIX}/libexec/firebird PLIST_SUB= FIREBIRD_VERSION=${PORTVERSION} \ LOCALSTATEDIR="var/db/firebird" CONFDIR="${CONFDIR}" # Don't use ld for linking, use gcc LD= ${CC} # Don't strip binary files STRIP= ONLY_FOR_ARCHS= i386 amd64 CONFLICTS+= firebird-client-2.0* firebird-server-2.0* \ firebird-client-2.1* firebird-server-2.1* INSTALL_FB= ${INSTALL} ${COPY} IPCRM_CMD= /usr/bin/ipcrm IPCS_CMD= /usr/bin/ipcs IPCCHECK!= ${IPCRM_CMD} -q 0 2>&1 || true .if ${IPCCHECK:Mimplemented} IGNORE= your system does not support sysvipc .endif .if !defined(CLIENT_ONLY) # Server part stuff LIB_DEPENDS+= libfbembed.so:${PORTSDIR}/databases/firebird25-client CONFIGURE_ARGS+=--enable-superserver ALL_TARGET= firebird_embedded firebird_server USE_RC_SUBR= firebird SUB_FILES= pkg-message UTIL_SBIN= fb_inet_server fb_lock_print fb_smp_server fbserver UTIL_BIN= fbguard fbsplit fbstat fbsvcmgr fbtracemgr gbak gdef gfix gsec \ nbackup UDF_SO= ib_udf.so fbudf.so UDF_SQL= src/extlib/ib_udf2.sql src/extlib/fbudf/fbudf.sql PKGINSTALL?= ${PKGDIR}/pkg-install-server .else # Client part stuff ALL_TARGET= firebird_basic libfbembed libfbclient embed_isql embed_gpre \ embed_gdef embed_qli extlib USE_LDCONFIG= yes CLIENT_BIN= gpre isql-fb qli .include .if ${PORT_OPTIONS:MDOCS} PORTDOCS= * FB_DOCS_FILES= WhatsNew README.* Firebird* ReleaseNotes.pdf ambiguity.txt \ ods11-index-structure.html FB_DOCS_DIRS= sql.extensions license upgrade .endif .endif MAKE_ENV+= FIREBIRD_TMP="${WRKDIR}" FIREBIRD_LOCK="${WRKDIR}" MAKE_ARGS+= PREFIX="${STAGEDIR}${PREFIX}" OPTIONS_DEFINE= DOCS post-extract: @${RM} -rf ${WRKSRC}/extern/icu post-patch: ${FIND} ${WRKSRC} -name "*.sh" -exec ${CHMOD} +x {} \+ ${REINPLACE_CMD} -e \ 's|/isql|/isql-fb|g' -e \ 's|/gstat|/fbstat|g' -e \ 's|/gsplit|/fbsplit|g' ${WRKSRC}/builds/posix/make.defaults .include .if ${ARCH} == "amd64" CFLAGS+= -DAMD64 .endif .if !defined(CLIENT_ONLY) USERS= ${PORTNAME} GROUPS= ${USERS} .endif .ifndef WITHOUT_IPC_CLEANUP pre-build: .if !defined(CLIENT_ONLY) @${SETENV} PKG_PREFIX="${STAGEDIR}${PREFIX}" ${SH} ${PKGINSTALL} ${PORTNAME} PRE-INSTALL .endif ${MAKE} -C ${WRKSRC}/extern/btyacc [ -f ${WRKDIR}/ipcs.pre.build ] || ${IPCS_CMD} -s | ${TAIL} -n +3 | \ ${GREP} -F `${ID} -un` | ${CAT} > ${WRKDIR}/ipcs.pre.build post-build: ${IPCS_CMD} -s | ${TAIL} -n +3 | ${GREP} -F `${ID} -un` | ${CAT} > ${WRKDIR}/ipcs.post.build ${DIFF} -n ${WRKDIR}/ipcs.pre.build ${WRKDIR}/ipcs.post.build | \ ${TAIL} -n +2 | ${SED} -E 's/^s +([0-9]+).*$$/\/usr\/bin\/ipcrm -s \1/' > ${WRKDIR}/ipcrm.sh ${SH} ${WRKDIR}/ipcrm.sh .endif do-install: .if !defined(CLIENT_ONLY) ${INSTALL_PROGRAM} ${UTIL_BIN:S!^!${WRKSRC}/gen/firebird/bin/!} ${STAGEDIR}${PREFIX}/bin ${INSTALL_PROGRAM} ${UTIL_SBIN:S!^!${WRKSRC}/gen/firebird/bin/!} ${STAGEDIR}${PREFIX}/sbin @${MKDIR} ${STAGEDIR}${PREFIX}/${CONFDIR} ${INSTALL_DATA} ${WRKSRC}/gen/install/misc/aliases.conf ${STAGEDIR}${PREFIX}/${CONFDIR}/aliases.conf.sample ${INSTALL_DATA} ${WRKSRC}/gen/install/misc/fbtrace.conf ${STAGEDIR}${PREFIX}/${CONFDIR}/fbtrace.conf ${MKDIR} ${STAGEDIR}${LIBEXECDIR}/udf ${STAGEDIR}${LOCALSTATEDIR}/help ${STAGEDIR}${LIBEXECDIR}/intl \ ${STAGEDIR}${LIBEXECDIR}/plugins ${INSTALL_DATA} ${WRKSRC}/gen/install/misc/fbintl.conf ${STAGEDIR}${LIBEXECDIR}/intl/fbintl.conf ${INSTALL_FB} -m 0555 ${UDF_SO:S!^!${WRKSRC}/gen/firebird/UDF/!} ${STAGEDIR}${LIBEXECDIR}/udf ${INSTALL_FB} -m 0444 ${UDF_SQL:S!^!${WRKSRC}/!} ${STAGEDIR}${LIBEXECDIR}/udf ${INSTALL_FB} -m 0555 ${WRKSRC}/gen/firebird/plugins/libfbtrace.so ${STAGEDIR}${LIBEXECDIR}/plugins ${INSTALL_FB} -m 0660 ${WRKSRC}/gen/firebird/security2.fdb ${STAGEDIR}${LOCALSTATEDIR}/security2.fdb.sample ${INSTALL_FB} -m 0440 ${WRKSRC}/gen/firebird/help/help.fdb ${STAGEDIR}${LOCALSTATEDIR}/help ${INSTALL_FB} -m 0555 ${WRKSRC}/gen/firebird/intl/libfbintl.so ${STAGEDIR}${LIBEXECDIR}/intl/fbintl.so .else # defined CLIENT_ONLY ${INSTALL_PROGRAM} ${CLIENT_BIN:S!^!${WRKSRC}/gen/firebird/bin/!} ${STAGEDIR}${PREFIX}/bin ${SED} -e "s=%%PREFIX%%=${PREFIX}=g" ${WRKSRC}/gen/install/misc/firebird.conf > ${WRKDIR}/firebird.conf @${MKDIR} ${STAGEDIR}${PREFIX}/${CONFDIR} ${INSTALL_DATA} ${WRKDIR}/firebird.conf ${STAGEDIR}${PREFIX}/${CONFDIR}/firebird.conf.sample ${INSTALL_DATA} ${WRKSRC}/gen/firebird/lib/libib_util.so \ ${WRKSRC}/gen/firebird/lib/libfbclient.so.${PORTVERSION} \ ${WRKSRC}/gen/firebird/lib/libfbembed.so.${PORTVERSION} \ ${STAGEDIR}${PREFIX}/lib ${LN} -fs libfbclient.so.${PORTVERSION} ${STAGEDIR}${PREFIX}/lib/libfbclient.so.2.5 ${LN} -fs libfbclient.so.${PORTVERSION} ${STAGEDIR}${PREFIX}/lib/libfbclient.so.2 ${LN} -fs libfbclient.so.${PORTVERSION} ${STAGEDIR}${PREFIX}/lib/libfbclient.so ${LN} -fs libfbembed.so.${PORTVERSION} ${STAGEDIR}${PREFIX}/lib/libfbembed.so.2.5 ${LN} -fs libfbembed.so.${PORTVERSION} ${STAGEDIR}${PREFIX}/lib/libfbembed.so.2 ${LN} -fs libfbembed.so.${PORTVERSION} ${STAGEDIR}${PREFIX}/lib/libfbembed.so ${LN} -fs libfbembed.so.${PORTVERSION} ${STAGEDIR}${PREFIX}/lib/libgds.so.2.5 ${LN} -fs libfbembed.so.${PORTVERSION} ${STAGEDIR}${PREFIX}/lib/libgds.so.2 ${LN} -fs libfbembed.so.${PORTVERSION} ${STAGEDIR}${PREFIX}/lib/libgds.so @${MKDIR} ${STAGEDIR}${PREFIX}/include ${INSTALL_DATA} ${WRKSRC}/gen/firebird/include/*.h ${STAGEDIR}${PREFIX}/include @${MKDIR} ${STAGEDIR}${DATADIR} ${INSTALL_DATA} ${WRKSRC}/gen/firebird/*.msg ${STAGEDIR}${DATADIR} .if ${PORT_OPTIONS:MDOCS} @${ECHO_MSG} "===> Installing documentation for ${PKGNAME}" @${MKDIR} ${FB_DOCS_DIRS:S!^!${STAGEDIR}${DOCSDIR}/!} @${INSTALL_DATA} ${FB_DOCS_FILES:S!^!${WRKSRC}/doc/!} ${STAGEDIR}${DOCSDIR} @${LN} -sf ${DOCSDIR}/README.user ${STAGEDIR}${DOCSDIR}/README @${INSTALL_DATA} ${WRKSRC}/doc/sql.extensions/* ${STAGEDIR}${DOCSDIR}/sql.extensions @${INSTALL_DATA} ${WRKSRC}/doc/license/* ${STAGEDIR}${DOCSDIR}/license @${INSTALL_DATA} ${WRKSRC}/src/misc/upgrade/v2/* ${STAGEDIR}${DOCSDIR}/upgrade .endif .endif .include diff --git a/databases/firebird25-server/distinfo b/databases/firebird25-server/distinfo index 08be05cd62d6..a91ac0f09af9 100644 --- a/databases/firebird25-server/distinfo +++ b/databases/firebird25-server/distinfo @@ -1,2 +1,2 @@ -SHA256 (firebird/Firebird-2.5.2.26540-0.tar.bz2) = bbb9a408198898818d5be3c301dde0f8524fd8e2f509662121d7393e02520721 -SIZE (firebird/Firebird-2.5.2.26540-0.tar.bz2) = 13805637 +SHA256 (firebird/Firebird-2.5.3.26778-0.tar.bz2) = d4c561185e5df1c24b9c19d335d178b82d03bd15bab4963d2bc374eb75d41c4b +SIZE (firebird/Firebird-2.5.3.26778-0.tar.bz2) = 13991175 diff --git a/databases/firebird25-server/files/patch-src-jrd_unicode_util.cpp b/databases/firebird25-server/files/patch-src-jrd_unicode_util.cpp deleted file mode 100644 index 3c1598b2c04b..000000000000 --- a/databases/firebird25-server/files/patch-src-jrd_unicode_util.cpp +++ /dev/null @@ -1,290 +0,0 @@ ---- src/jrd/unicode_util.cpp 2013-03-19 03:38:19.000000000 -0500 -+++ src/jrd/unicode_util.cpp 2013-09-05 08:59:56.000000000 -0500 -@@ -42,6 +42,9 @@ - #include "unicode/ucnv.h" - #include "unicode/ucol.h" - -+// The next major ICU version after 4.8 is 49. -+#define ICU_NEW_VERSION_MEANING 49 -+ - - using namespace Firebird; - -@@ -49,8 +52,16 @@ - namespace Jrd { - - -+#if U_ICU_VERSION_MAJOR_NUM >= ICU_NEW_VERSION_MEANING -+const char* const UnicodeUtil::DEFAULT_ICU_VERSION = STRINGIZE(U_ICU_VERSION_MAJOR_NUM); -+#else - const char* const UnicodeUtil::DEFAULT_ICU_VERSION = - STRINGIZE(U_ICU_VERSION_MAJOR_NUM)"."STRINGIZE(U_ICU_VERSION_MINOR_NUM); -+#endif -+ -+ -+static void formatFilename(PathName& filename, const char* templateName, -+ int majorVersion, int minorVersion); - - - // encapsulate ICU collations libraries -@@ -65,12 +76,16 @@ - : majorVersion(aMajorVersion), - minorVersion(aMinorVersion), - inModule(NULL), -- ucModule(NULL) -+ ucModule(NULL), -+ ciAiTransCache(*getDefaultMemoryPool()) - { - } - - ~ICU() - { -+ while (ciAiTransCache.hasData()) -+ utransClose(ciAiTransCache.pop()); -+ - delete ucModule; - delete inModule; - } -@@ -79,6 +94,11 @@ - { - string symbol; - -+ symbol.printf("%s_%d", name, majorVersion); -+ module->findSymbol(symbol, ptr); -+ if (ptr) -+ return; -+ - symbol.printf("%s_%d_%d", name, majorVersion, minorVersion); - module->findSymbol(symbol, ptr); - if (ptr) -@@ -86,6 +106,40 @@ - - symbol.printf("%s_%d%d", name, majorVersion, minorVersion); - module->findSymbol(symbol, ptr); -+ if (ptr) -+ return; -+ -+ symbol.printf("%s", name); -+ module->findSymbol(symbol, ptr); -+ } -+ -+ UTransliterator* getCiAiTransliterator() -+ { -+ ciAiTransCacheMutex.enter(); -+ UTransliterator* ret; -+ -+ if (!ciAiTransCache.isEmpty()) -+ { -+ ret = ciAiTransCache.pop(); -+ ciAiTransCacheMutex.leave(); -+ } -+ else -+ { -+ ciAiTransCacheMutex.leave(); -+ -+ UErrorCode errorCode = U_ZERO_ERROR; -+ // Fix for CORE-4136. Was "Any-Upper; NFD; [:Nonspacing Mark:] Remove; NFC". -+ ret = utransOpen("NFD; [:Nonspacing Mark:] Remove; NFC", -+ UTRANS_FORWARD, NULL, 0, NULL, &errorCode); -+ } -+ -+ return ret; -+ } -+ -+ void releaseCiAiTransliterator(UTransliterator* trans) -+ { -+ MutexLockGuard guard(ciAiTransCacheMutex); -+ ciAiTransCache.push(trans); - } - - int majorVersion; -@@ -93,6 +147,8 @@ - ModuleLoader::Module* inModule; - ModuleLoader::Module* ucModule; - UVersionInfo collVersion; -+ Mutex ciAiTransCacheMutex; -+ Array ciAiTransCache; - - void (U_EXPORT2 *uInit)(UErrorCode* status); - void (U_EXPORT2 *uVersionToString)(UVersionInfo versionArray, char* versionString); -@@ -157,14 +213,25 @@ - RWLock lock; - }; - --namespace { -- GlobalPtr icuModules; --} -+static GlobalPtr icuModules; - - - static const char* const COLL_30_VERSION = "41.128.4.4"; // ICU 3.0 collator version - - -+static void formatFilename(PathName& filename, const char* templateName, -+ int majorVersion, int minorVersion) -+{ -+ string s; -+ if (majorVersion >= ICU_NEW_VERSION_MEANING) -+ s.printf("%d", majorVersion); -+ else -+ s.printf("%d%d", majorVersion, minorVersion); -+ -+ filename.printf(templateName, s.c_str()); -+} -+ -+ - static void getVersions(const string& configInfo, ObjectsArray& versions) - { - charset cs; -@@ -758,17 +825,17 @@ - const Firebird::string& configInfo) - { - #if defined(WIN_NT) -- const char* const inTemplate = "icuin%d%d.dll"; -- const char* const ucTemplate = "icuuc%d%d.dll"; -+ const char* const inTemplate = "icuin%s.dll"; -+ const char* const ucTemplate = "icuuc%s.dll"; - #elif defined(DARWIN) - const char* const inTemplate = "/Library/Frameworks/Firebird.framework/Versions/A/Libraries/libicui18n.dylib"; - const char* const ucTemplate = "/Library/Frameworks/Firebird.framework/versions/A/Libraries/libicuuc.dylib"; - #elif defined(HPUX) -- const char* const inTemplate = "libicui18n.sl.%d%d"; -- const char* const ucTemplate = "libicuuc.sl.%d%d"; -+ const char* const inTemplate = "libicui18n.sl.%s"; -+ const char* const ucTemplate = "libicuuc.sl.%s"; - #else -- const char* const inTemplate = "libicui18n.so.%d%d"; -- const char* const ucTemplate = "libicuuc.so.%d%d"; -+ const char* const inTemplate = "libicui18n.so.%s"; -+ const char* const ucTemplate = "libicuuc.so.%s"; - #endif - - ObjectsArray versions; -@@ -776,24 +843,28 @@ - - string version = icuVersion.isEmpty() ? versions[0] : icuVersion; - if (version == "default") -- { -- version.printf("%d.%d", U_ICU_VERSION_MAJOR_NUM, U_ICU_VERSION_MINOR_NUM); -- } -+ version = DEFAULT_ICU_VERSION; - - for (ObjectsArray::const_iterator i(versions.begin()); i != versions.end(); ++i) - { - int majorVersion, minorVersion; -+ int n = sscanf((*i == "default" ? version : *i).c_str(), "%d.%d", -+ &majorVersion, &minorVersion); - -- if (*i == "default") -- { -- majorVersion = U_ICU_VERSION_MAJOR_NUM; -- minorVersion = U_ICU_VERSION_MINOR_NUM; -- } -- else if (sscanf(i->c_str(), "%d.%d", &majorVersion, &minorVersion) != 2) -+ if (n == 1) -+ minorVersion = 0; -+ else if (n != 2) - continue; - - string configVersion; -- configVersion.printf("%d.%d", majorVersion, minorVersion); -+ -+ if (majorVersion >= ICU_NEW_VERSION_MEANING) -+ { -+ minorVersion = 0; -+ configVersion.printf("%d", majorVersion); -+ } -+ else -+ configVersion.printf("%d.%d", majorVersion, minorVersion); - - if (version != configVersion) - continue; -@@ -805,7 +876,7 @@ - return icu; - - PathName filename; -- filename.printf(ucTemplate, majorVersion, minorVersion); -+ formatFilename(filename, ucTemplate, majorVersion, minorVersion); - - icu = FB_NEW(*getDefaultMemoryPool()) ICU(majorVersion, minorVersion); - -@@ -822,7 +893,7 @@ - continue; - } - -- filename.printf(inTemplate, majorVersion, minorVersion); -+ formatFilename(filename, inTemplate, majorVersion, minorVersion); - - icu->inModule = ModuleLoader::loadModule(filename); - if (!icu->inModule) -@@ -1208,44 +1279,40 @@ - ULONG UnicodeUtil::Utf16Collation::canonical(ULONG srcLen, const USHORT* src, ULONG dstLen, ULONG* dst, - const ULONG* exceptions) - { -+ fb_assert(srcLen % sizeof(*src) == 0); -+ - HalfStaticArray upperStr; - -- if ((attributes & (TEXTTYPE_ATTR_CASE_INSENSITIVE | TEXTTYPE_ATTR_ACCENT_INSENSITIVE)) == -- (TEXTTYPE_ATTR_CASE_INSENSITIVE | TEXTTYPE_ATTR_ACCENT_INSENSITIVE)) -+ if (attributes & TEXTTYPE_ATTR_CASE_INSENSITIVE) - { -- fb_assert(srcLen % sizeof(*src) == 0); -- -- memcpy(upperStr.getBuffer(srcLen / sizeof(USHORT)), src, srcLen); -- -- UErrorCode errorCode = U_ZERO_ERROR; -- UTransliterator* trans = icu->utransOpen("Any-Upper; NFD; [:Nonspacing Mark:] Remove; NFC", -- UTRANS_FORWARD, NULL, 0, NULL, &errorCode); -+ srcLen = utf16UpperCase(srcLen, src, srcLen, -+ upperStr.getBuffer(srcLen / sizeof(USHORT)), NULL); -+ src = upperStr.begin(); - -- if (errorCode <= 0) -+ if (attributes & TEXTTYPE_ATTR_ACCENT_INSENSITIVE) - { -- const int32_t capacity = upperStr.getCount(); -- int32_t len = srcLen / sizeof(USHORT); -- int32_t limit = len; -- -- icu->utransTransUChars(trans, reinterpret_cast(upperStr.begin()), -- &len, capacity, 0, &limit, &errorCode); -- icu->utransClose(trans); -+ UTransliterator* trans = icu->getCiAiTransliterator(); - -- len *= sizeof(USHORT); -- if (ULONG(len) > dstLen) -- len = INTL_BAD_STR_LENGTH; -+ if (trans) -+ { -+ const int32_t capacity = upperStr.getCount(); -+ int32_t len = srcLen / sizeof(USHORT); -+ int32_t limit = len; -+ -+ UErrorCode errorCode = U_ZERO_ERROR; -+ icu->utransTransUChars(trans, reinterpret_cast(upperStr.begin()), -+ &len, capacity, 0, &limit, &errorCode); -+ icu->releaseCiAiTransliterator(trans); -+ -+ len *= sizeof(USHORT); -+ if (ULONG(len) > dstLen) -+ len = INTL_BAD_STR_LENGTH; - -- srcLen = len; -- src = upperStr.begin(); -+ srcLen = len; -+ } -+ else -+ return INTL_BAD_STR_LENGTH; - } -- else -- return INTL_BAD_STR_LENGTH; -- } -- else if (attributes & TEXTTYPE_ATTR_CASE_INSENSITIVE) -- { -- srcLen = utf16UpperCase(srcLen, src, -- srcLen, upperStr.getBuffer(srcLen / sizeof(USHORT)), exceptions); -- src = upperStr.begin(); - } - - // convert UTF-16 to UTF-32