~ubuntu-branches/ubuntu/oneiric/firebird2.5/oneiric-security

« back to all changes in this revision

Viewing changes to debian/patches/svn/icu-entrypoints.patch

  • Committer: Bazaar Package Importer
  • Author(s): Damyan Ivanov
  • Date: 2011-04-23 11:14:47 UTC
  • mfrom: (15.1.3 sid)
  • Revision ID: james.westby@ubuntu.com-20110423111447-liopox8hmj2yb5po
Tags: 2.5.0.26074-0.ds4-5
* watch: protect against 'ReleaseCandidate' in versions
* add a patch from upstream SVN fixing loading of ICU routines
* disable fix_kfreebsd_amd64_miscompile.patch
* link fbtrace with ICU and libpthreads
* drop lintian overrides about manpages in dependency package
* claim conformance to Policy 3.9.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
commit e5d2bb8731424146121acff1fd686c534f9f60b0
 
2
Author: asfernandes <asfernandes@de594faa-8d1b-4a0c-9a6a-a7de5f8bf859>
 
3
Commit: asfernandes <asfernandes@de594faa-8d1b-4a0c-9a6a-a7de5f8bf859>
 
4
 
 
5
    Fixed CORE-3447 - Collation is not installed with icu > 4.2.
 
6
    
 
7
    git-svn-id: https://firebird.svn.sourceforge.net/svnroot/firebird/firebird/branches/B2_5_Release@52787 de594faa-8d1b-4a0c-9a6a-a7de5f8bf859
 
8
 
 
9
diff --git a/src/jrd/unicode_util.cpp b/src/jrd/unicode_util.cpp
 
10
index 39f2688..ba675c3 100644
 
11
--- a/src/jrd/unicode_util.cpp
 
12
+++ b/src/jrd/unicode_util.cpp
 
13
@@ -61,8 +61,11 @@ private:
 
14
        ICU& operator =(const ICU&);    // not implemented
 
15
 
 
16
 public:
 
17
-       ICU()
 
18
-               : inModule(NULL), ucModule(NULL)
 
19
+       ICU(int aMajorVersion, int aMinorVersion)
 
20
+               : majorVersion(aMajorVersion),
 
21
+                 minorVersion(aMinorVersion),
 
22
+                 inModule(NULL),
 
23
+                 ucModule(NULL)
 
24
        {
 
25
        }
 
26
 
 
27
@@ -72,6 +75,21 @@ public:
 
28
                delete inModule;
 
29
        }
 
30
 
 
31
+       template <typename T> void getEntryPoint(const char* name, ModuleLoader::Module* module, T& ptr)
 
32
+       {
 
33
+               string symbol;
 
34
+
 
35
+               symbol.printf("%s_%d_%d", name, majorVersion, minorVersion);
 
36
+               module->findSymbol(symbol, ptr);
 
37
+               if (ptr)
 
38
+                       return;
 
39
+
 
40
+               symbol.printf("%s_%d%d", name, majorVersion, minorVersion);
 
41
+               module->findSymbol(symbol, ptr);
 
42
+       }
 
43
+
 
44
+       int majorVersion;
 
45
+       int minorVersion;
 
46
        ModuleLoader::Module* inModule;
 
47
        ModuleLoader::Module* ucModule;
 
48
        UVersionInfo collVersion;
 
49
@@ -740,17 +758,17 @@ UnicodeUtil::ICU* UnicodeUtil::loadICU(const Firebird::string& icuVersion,
 
50
        const Firebird::string& configInfo)
 
51
 {
 
52
 #if defined(WIN_NT)
 
53
-       const char* const inTemplate = "icuin%s%s.dll";
 
54
-       const char* const ucTemplate = "icuuc%s%s.dll";
 
55
+       const char* const inTemplate = "icuin%d%d.dll";
 
56
+       const char* const ucTemplate = "icuuc%d%d.dll";
 
57
 #elif defined(DARWIN)
 
58
        const char* const inTemplate = "/Library/Frameworks/Firebird.framework/Versions/A/Libraries/libicui18n.dylib";
 
59
        const char* const ucTemplate = "/Library/Frameworks/Firebird.framework/versions/A/Libraries/libicuuc.dylib";
 
60
 #elif defined(HPUX)
 
61
-       const char* const inTemplate = "libicui18n.sl.%s%s";
 
62
-       const char* const ucTemplate = "libicuuc.sl.%s%s";
 
63
+       const char* const inTemplate = "libicui18n.sl.%d%d";
 
64
+       const char* const ucTemplate = "libicuuc.sl.%d%d";
 
65
 #else
 
66
-       const char* const inTemplate = "libicui18n.so.%s%s";
 
67
-       const char* const ucTemplate = "libicuuc.so.%s%s";
 
68
+       const char* const inTemplate = "libicui18n.so.%d%d";
 
69
+       const char* const ucTemplate = "libicuuc.so.%d%d";
 
70
 #endif
 
71
 
 
72
        ObjectsArray<string> versions;
 
73
@@ -764,41 +782,32 @@ UnicodeUtil::ICU* UnicodeUtil::loadICU(const Firebird::string& icuVersion,
 
74
 
 
75
        for (ObjectsArray<string>::const_iterator i(versions.begin()); i != versions.end(); ++i)
 
76
        {
 
77
-               string majorVersion;
 
78
-               string minorVersion;
 
79
+               int majorVersion, minorVersion;
 
80
 
 
81
                if (*i == "default")
 
82
                {
 
83
-                       majorVersion = STRINGIZE(U_ICU_VERSION_MAJOR_NUM);
 
84
-                       minorVersion = STRINGIZE(U_ICU_VERSION_MINOR_NUM);
 
85
+                       majorVersion = U_ICU_VERSION_MAJOR_NUM;
 
86
+                       minorVersion = U_ICU_VERSION_MINOR_NUM;
 
87
                }
 
88
-               else
 
89
-               {
 
90
-                       const size_t pos = i->find('.');
 
91
-                       if (pos == i->npos)
 
92
-                               continue;
 
93
+               else if (sscanf(i->c_str(), "%d.%d", &majorVersion, &minorVersion) != 2)
 
94
+                       continue;
 
95
 
 
96
-                       majorVersion = i->substr(0, pos);
 
97
-                       minorVersion = i->substr(pos + 1);
 
98
-               }
 
99
+               string configVersion;
 
100
+               configVersion.printf("%d.%d", majorVersion, minorVersion);
 
101
 
 
102
-               if (version != majorVersion + "." + minorVersion)
 
103
-               {
 
104
+               if (version != configVersion)
 
105
                        continue;
 
106
-               }
 
107
 
 
108
                ReadLockGuard readGuard(icuModules->lock);
 
109
 
 
110
                ICU* icu;
 
111
                if (icuModules->modules().get(version, icu))
 
112
-               {
 
113
                        return icu;
 
114
-               }
 
115
 
 
116
                PathName filename;
 
117
-               filename.printf(ucTemplate, majorVersion.c_str(), minorVersion.c_str());
 
118
+               filename.printf(ucTemplate, majorVersion, minorVersion);
 
119
 
 
120
-               icu = FB_NEW(*getDefaultMemoryPool()) ICU();
 
121
+               icu = FB_NEW(*getDefaultMemoryPool()) ICU(majorVersion, minorVersion);
 
122
 
 
123
                icu->ucModule = ModuleLoader::loadModule(filename);
 
124
                if (!icu->ucModule)
 
125
@@ -813,7 +822,7 @@ UnicodeUtil::ICU* UnicodeUtil::loadICU(const Firebird::string& icuVersion,
 
126
                        continue;
 
127
                }
 
128
 
 
129
-               filename.printf(inTemplate, majorVersion.c_str(), minorVersion.c_str());
 
130
+               filename.printf(inTemplate, majorVersion, minorVersion);
 
131
 
 
132
                icu->inModule = ModuleLoader::loadModule(filename);
 
133
                if (!icu->inModule)
 
134
@@ -828,61 +837,25 @@ UnicodeUtil::ICU* UnicodeUtil::loadICU(const Firebird::string& icuVersion,
 
135
                        continue;
 
136
                }
 
137
 
 
138
-               string symbol;
 
139
-
 
140
-               symbol.printf("u_init_%s_%s", majorVersion.c_str(), minorVersion.c_str());
 
141
-               icu->ucModule->findSymbol(symbol, icu->uInit);
 
142
-
 
143
-               symbol.printf("u_versionToString_%s_%s", majorVersion.c_str(), minorVersion.c_str());
 
144
-               icu->ucModule->findSymbol(symbol, icu->uVersionToString);
 
145
-
 
146
-               symbol.printf("uloc_countAvailable_%s_%s", majorVersion.c_str(), minorVersion.c_str());
 
147
-               icu->ucModule->findSymbol(symbol, icu->ulocCountAvailable);
 
148
-
 
149
-               symbol.printf("uloc_getAvailable_%s_%s", majorVersion.c_str(), minorVersion.c_str());
 
150
-               icu->ucModule->findSymbol(symbol, icu->ulocGetAvailable);
 
151
-
 
152
-               symbol.printf("uset_close_%s_%s", majorVersion.c_str(), minorVersion.c_str());
 
153
-               icu->ucModule->findSymbol(symbol, icu->usetClose);
 
154
-
 
155
-               symbol.printf("uset_getItem_%s_%s", majorVersion.c_str(), minorVersion.c_str());
 
156
-               icu->ucModule->findSymbol(symbol, icu->usetGetItem);
 
157
-
 
158
-               symbol.printf("uset_getItemCount_%s_%s", majorVersion.c_str(), minorVersion.c_str());
 
159
-               icu->ucModule->findSymbol(symbol, icu->usetGetItemCount);
 
160
-
 
161
-               symbol.printf("uset_open_%s_%s", majorVersion.c_str(), minorVersion.c_str());
 
162
-               icu->ucModule->findSymbol(symbol, icu->usetOpen);
 
163
-
 
164
-               symbol.printf("ucol_close_%s_%s", majorVersion.c_str(), minorVersion.c_str());
 
165
-               icu->inModule->findSymbol(symbol, icu->ucolClose);
 
166
-
 
167
-               symbol.printf("ucol_getContractions_%s_%s", majorVersion.c_str(), minorVersion.c_str());
 
168
-               icu->inModule->findSymbol(symbol, icu->ucolGetContractions);
 
169
-
 
170
-               symbol.printf("ucol_getSortKey_%s_%s", majorVersion.c_str(), minorVersion.c_str());
 
171
-               icu->inModule->findSymbol(symbol, icu->ucolGetSortKey);
 
172
-
 
173
-               symbol.printf("ucol_open_%s_%s", majorVersion.c_str(), minorVersion.c_str());
 
174
-               icu->inModule->findSymbol(symbol, icu->ucolOpen);
 
175
-
 
176
-               symbol.printf("ucol_setAttribute_%s_%s", majorVersion.c_str(), minorVersion.c_str());
 
177
-               icu->inModule->findSymbol(symbol, icu->ucolSetAttribute);
 
178
-
 
179
-               symbol.printf("ucol_strcoll_%s_%s", majorVersion.c_str(), minorVersion.c_str());
 
180
-               icu->inModule->findSymbol(symbol, icu->ucolStrColl);
 
181
-
 
182
-               symbol.printf("ucol_getVersion_%s_%s", majorVersion.c_str(), minorVersion.c_str());
 
183
-               icu->inModule->findSymbol(symbol, icu->ucolGetVersion);
 
184
-
 
185
-               symbol.printf("utrans_open_%s_%s", majorVersion.c_str(), minorVersion.c_str());
 
186
-               icu->inModule->findSymbol(symbol, icu->utransOpen);
 
187
-
 
188
-               symbol.printf("utrans_close_%s_%s", majorVersion.c_str(), minorVersion.c_str());
 
189
-               icu->inModule->findSymbol(symbol, icu->utransClose);
 
190
-
 
191
-               symbol.printf("utrans_transUChars_%s_%s", majorVersion.c_str(), minorVersion.c_str());
 
192
-               icu->inModule->findSymbol(symbol, icu->utransTransUChars);
 
193
+               icu->getEntryPoint("u_init", icu->ucModule, icu->uInit);
 
194
+               icu->getEntryPoint("u_versionToString", icu->ucModule, icu->uVersionToString);
 
195
+               icu->getEntryPoint("uloc_countAvailable", icu->ucModule, icu->ulocCountAvailable);
 
196
+               icu->getEntryPoint("uloc_getAvailable", icu->ucModule, icu->ulocGetAvailable);
 
197
+               icu->getEntryPoint("uset_close", icu->ucModule, icu->usetClose);
 
198
+               icu->getEntryPoint("uset_getItem", icu->ucModule, icu->usetGetItem);
 
199
+               icu->getEntryPoint("uset_getItemCount", icu->ucModule, icu->usetGetItemCount);
 
200
+               icu->getEntryPoint("uset_open", icu->ucModule, icu->usetOpen);
 
201
+
 
202
+               icu->getEntryPoint("ucol_close", icu->inModule, icu->ucolClose);
 
203
+               icu->getEntryPoint("ucol_getContractions", icu->inModule, icu->ucolGetContractions);
 
204
+               icu->getEntryPoint("ucol_getSortKey", icu->inModule, icu->ucolGetSortKey);
 
205
+               icu->getEntryPoint("ucol_open", icu->inModule, icu->ucolOpen);
 
206
+               icu->getEntryPoint("ucol_setAttribute", icu->inModule, icu->ucolSetAttribute);
 
207
+               icu->getEntryPoint("ucol_strcoll", icu->inModule, icu->ucolStrColl);
 
208
+               icu->getEntryPoint("ucol_getVersion", icu->inModule, icu->ucolGetVersion);
 
209
+               icu->getEntryPoint("utrans_open", icu->inModule, icu->utransOpen);
 
210
+               icu->getEntryPoint("utrans_close", icu->inModule, icu->utransClose);
 
211
+               icu->getEntryPoint("utrans_transUChars", icu->inModule, icu->utransTransUChars);
 
212
 
 
213
                if (/*!icu->uInit ||*/ !icu->uVersionToString || !icu->ulocCountAvailable ||
 
214
                        !icu->ulocGetAvailable || !icu->usetClose || !icu->usetGetItem ||