[firebird/f14/master] - added patch from upstream to fix (rh #697313)

Philippe Makowski makowski at fedoraproject.org
Fri Apr 22 06:08:17 UTC 2011


commit 7af02c07a40f68208e95605558dec1846c0f2d80
Author: makowski <makowski at fedoraproject.org>
Date:   Thu Apr 21 23:35:13 2011 +0200

    - added patch from upstream to fix (rh #697313)

 firebird-2.1.4-svn-CORE-3447.patch |  182 ++++++++++++++++++++++++++++++++++++
 firebird.spec                      |    7 +-
 2 files changed, 188 insertions(+), 1 deletions(-)
---
diff --git a/firebird-2.1.4-svn-CORE-3447.patch b/firebird-2.1.4-svn-CORE-3447.patch
new file mode 100644
index 0000000..0b9b6e7
--- /dev/null
+++ b/firebird-2.1.4-svn-CORE-3447.patch
@@ -0,0 +1,182 @@
+--- src/jrd/unicode_util.cpp	2011/04/21 19:57:57	52787
++++ src/jrd/unicode_util.cpp	2011/04/21 20:25:12	52788
+@@ -57,8 +57,10 @@
+ 	ICU& operator =(const ICU&);	// not implemented
+ 
+ public:
+-	ICU()
+-		: inModule(NULL),
++	ICU(int aMajorVersion, int aMinorVersion)
++		: majorVersion(aMajorVersion),
++		  minorVersion(aMinorVersion),
++		  inModule(NULL),
+ 		  ucModule(NULL)
+ 	{
+ 	}
+@@ -69,6 +71,21 @@
+ 		delete inModule;
+ 	}
+ 
++	template <typename T> void getEntryPoint(const char* name, ModuleLoader::Module* module, T& ptr)
++	{
++		string symbol;
++
++		symbol.printf("%s_%d_%d", name, majorVersion, minorVersion);
++		module->findSymbol(symbol, ptr);
++		if (ptr)
++			return;
++
++		symbol.printf("%s_%d%d", name, majorVersion, minorVersion);
++		module->findSymbol(symbol, ptr);
++	}
++
++	int majorVersion;
++	int minorVersion;
+ 	ModuleLoader::Module* inModule;
+ 	ModuleLoader::Module* ucModule;
+ 	UVersionInfo collVersion;
+@@ -714,17 +731,17 @@
+ 	const Firebird::string& configInfo)
+ {
+ #if defined(WIN_NT)
+-	const char* const inTemplate = "icuin%s%s.dll";
+-	const char* const ucTemplate = "icuuc%s%s.dll";
++	const char* const inTemplate = "icuin%d%d.dll";
++	const char* const ucTemplate = "icuuc%d%d.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.%s%s";
+-	const char* const ucTemplate = "libicuuc.sl.%s%s";
++	const char* const inTemplate = "libicui18n.sl.%d%d";
++	const char* const ucTemplate = "libicuuc.sl.%d%d";
+ #else
+-	const char* const inTemplate = "libicui18n.so.%s%s";
+-	const char* const ucTemplate = "libicuuc.so.%s%s";
++	const char* const inTemplate = "libicui18n.so.%d%d";
++	const char* const ucTemplate = "libicuuc.so.%d%d";
+ #endif
+ 
+ 	ObjectsArray<string> versions;
+@@ -736,25 +753,20 @@
+ 
+ 	for (ObjectsArray<string>::const_iterator i(versions.begin()); i != versions.end(); ++i)
+ 	{
+-		string majorVersion;
+-		string minorVersion;
++		int majorVersion, minorVersion;
+ 
+ 		if (*i == "default")
+ 		{
+-			majorVersion = STRINGIZE(U_ICU_VERSION_MAJOR_NUM);
+-			minorVersion = STRINGIZE(U_ICU_VERSION_MINOR_NUM);
++			majorVersion = U_ICU_VERSION_MAJOR_NUM;
++			minorVersion = U_ICU_VERSION_MINOR_NUM;
+ 		}
+-		else
+-		{
+-			size_t pos = i->find('.');
+-			if (pos == i->npos)
+-				continue;
++		else if (sscanf(i->c_str(), "%d.%d", &majorVersion, &minorVersion) != 2)
++			continue;
+ 
+-			majorVersion = i->substr(0, pos);
+-			minorVersion = i->substr(pos + 1);
+-		}
++		string configVersion;
++		configVersion.printf("%d.%d", majorVersion, minorVersion);
+ 
+-		if (version != majorVersion + "." + minorVersion)
++		if (version != configVersion)
+ 			continue;
+ 
+ 		ReadLockGuard readGuard(icuModules.lock);
+@@ -764,9 +776,9 @@
+ 			return icu;
+ 
+ 		PathName filename;
+-		filename.printf(ucTemplate, majorVersion.c_str(), minorVersion.c_str());
++		filename.printf(ucTemplate, majorVersion, minorVersion);
+ 
+-		icu = FB_NEW(*getDefaultMemoryPool()) ICU();
++		icu = FB_NEW(*getDefaultMemoryPool()) ICU(majorVersion, minorVersion);
+ 
+ 		icu->ucModule = ModuleLoader::loadModule(filename);
+ 		if (!icu->ucModule)
+@@ -781,7 +793,7 @@
+ 			continue;
+ 		}
+ 
+-		filename.printf(inTemplate, majorVersion.c_str(), minorVersion.c_str());
++		filename.printf(inTemplate, majorVersion, minorVersion);
+ 
+ 		icu->inModule = ModuleLoader::loadModule(filename);
+ 		if (!icu->inModule)
+@@ -796,49 +808,21 @@
+ 			continue;
+ 		}
+ 
+-		string symbol;
+-
+-		symbol.printf("u_versionToString_%s_%s", majorVersion.c_str(), minorVersion.c_str());
+-		icu->ucModule->findSymbol(symbol, icu->uVersionToString);
+-
+-		symbol.printf("uloc_countAvailable_%s_%s", majorVersion.c_str(), minorVersion.c_str());
+-		icu->ucModule->findSymbol(symbol, icu->ulocCountAvailable);
+-
+-		symbol.printf("uloc_getAvailable_%s_%s", majorVersion.c_str(), minorVersion.c_str());
+-		icu->ucModule->findSymbol(symbol, icu->ulocGetAvailable);
+-
+-		symbol.printf("uset_close_%s_%s", majorVersion.c_str(), minorVersion.c_str());
+-		icu->ucModule->findSymbol(symbol, icu->usetClose);
+-
+-		symbol.printf("uset_getItem_%s_%s", majorVersion.c_str(), minorVersion.c_str());
+-		icu->ucModule->findSymbol(symbol, icu->usetGetItem);
+-
+-		symbol.printf("uset_getItemCount_%s_%s", majorVersion.c_str(), minorVersion.c_str());
+-		icu->ucModule->findSymbol(symbol, icu->usetGetItemCount);
+-
+-		symbol.printf("uset_open_%s_%s", majorVersion.c_str(), minorVersion.c_str());
+-		icu->ucModule->findSymbol(symbol, icu->usetOpen);
+-
+-		symbol.printf("ucol_close_%s_%s", majorVersion.c_str(), minorVersion.c_str());
+-		icu->inModule->findSymbol(symbol, icu->ucolClose);
+-
+-		symbol.printf("ucol_getContractions_%s_%s", majorVersion.c_str(), minorVersion.c_str());
+-		icu->inModule->findSymbol(symbol, icu->ucolGetContractions);
+-
+-		symbol.printf("ucol_getSortKey_%s_%s", majorVersion.c_str(), minorVersion.c_str());
+-		icu->inModule->findSymbol(symbol, icu->ucolGetSortKey);
+-
+-		symbol.printf("ucol_open_%s_%s", majorVersion.c_str(), minorVersion.c_str());
+-		icu->inModule->findSymbol(symbol, icu->ucolOpen);
+-
+-		symbol.printf("ucol_setAttribute_%s_%s", majorVersion.c_str(), minorVersion.c_str());
+-		icu->inModule->findSymbol(symbol, icu->ucolSetAttribute);
+-
+-		symbol.printf("ucol_strcoll_%s_%s", majorVersion.c_str(), minorVersion.c_str());
+-		icu->inModule->findSymbol(symbol, icu->ucolStrColl);
+-
+-		symbol.printf("ucol_getVersion_%s_%s", majorVersion.c_str(), minorVersion.c_str());
+-		icu->inModule->findSymbol(symbol, icu->ucolGetVersion);
++		icu->getEntryPoint("u_versionToString", icu->ucModule, icu->uVersionToString);
++		icu->getEntryPoint("uloc_countAvailable", icu->ucModule, icu->ulocCountAvailable);
++		icu->getEntryPoint("uloc_getAvailable", icu->ucModule, icu->ulocGetAvailable);
++		icu->getEntryPoint("uset_close", icu->ucModule, icu->usetClose);
++		icu->getEntryPoint("uset_getItem", icu->ucModule, icu->usetGetItem);
++		icu->getEntryPoint("uset_getItemCount", icu->ucModule, icu->usetGetItemCount);
++		icu->getEntryPoint("uset_open", icu->ucModule, icu->usetOpen);
++
++		icu->getEntryPoint("ucol_close", icu->inModule, icu->ucolClose);
++		icu->getEntryPoint("ucol_getContractions", icu->inModule, icu->ucolGetContractions);
++		icu->getEntryPoint("ucol_getSortKey", icu->inModule, icu->ucolGetSortKey);
++		icu->getEntryPoint("ucol_open", icu->inModule, icu->ucolOpen);
++		icu->getEntryPoint("ucol_setAttribute", icu->inModule, icu->ucolSetAttribute);
++		icu->getEntryPoint("ucol_strcoll", icu->inModule, icu->ucolStrColl);
++		icu->getEntryPoint("ucol_getVersion", icu->inModule, icu->ucolGetVersion);
+ 
+ 		if (!icu->uVersionToString || !icu->ulocCountAvailable || !icu->ulocGetAvailable ||
+ 			!icu->usetClose || !icu->usetGetItem || !icu->usetGetItemCount || !icu->usetOpen ||
+
diff --git a/firebird.spec b/firebird.spec
index 3fc8c70..3484d5a 100644
--- a/firebird.spec
+++ b/firebird.spec
@@ -5,7 +5,7 @@
 Summary:	SQL relational database management system
 Name:		firebird
 Version:	2.1.4.18393.0
-Release:	2%{?dist}
+Release:	3%{?dist}
 
 Group:		Applications/Databases
 License:	Interbase
@@ -25,6 +25,7 @@ Patch4:		firebird-gcc-icu.patch
 # from upstream
 Patch5:		firebird-s390x.patch
 Patch6:     firebird-fix-CORE-3388.patch
+Patch7:		firebird-2.1.4-svn-CORE-3447.patch
 
 BuildRequires:	autoconf
 BuildRequires:	automake
@@ -140,6 +141,7 @@ iconv	-f	ISO-8859-1	-t	utf-8	-c	./doc/README.intl					-o	./doc/README.intl
 %patch4
 %patch5 -p1
 %patch6
+%patch7
 
 %build
 
@@ -539,6 +541,9 @@ fi
 
 
 %changelog
+* Fri Apr 22 2011 Philippe Makowski <makowski at fedoraproject.org>  2.1.4.18393.0-3
+- added patch from upstream to fix (rh #697313)
+
 * Thu Mar 17 2011 Philippe Makowski <makowski at fedoraproject.org>  2.1.4.18393.0-2
 - added patch from upstream to fix the s390(x) build
 


More information about the scm-commits mailing list