Merge ~danilogondolfo/ubuntu/+source/firebird3.0:mantic_merge_1 into ubuntu/+source/firebird3.0:ubuntu/devel

Proposed by Danilo Egea Gondolfo
Status: Superseded
Proposed branch: ~danilogondolfo/ubuntu/+source/firebird3.0:mantic_merge_1
Merge into: ubuntu/+source/firebird3.0:ubuntu/devel
Diff against target: 23704 lines (+3002/-12052)
191 files modified
README.md (+2/-2)
builds/install/arch-specific/android/BuildPackage.sh (+11/-3)
builds/install/arch-specific/win32/BuildExecutableInstall.bat (+3/-3)
builds/install/arch-specific/win32/FirebirdInstallSupportFunctions.inc (+14/-0)
builds/install/arch-specific/win32/FirebirdInstall_30.iss (+101/-60)
builds/install/arch-specific/win32/installation_scripted.txt (+31/-31)
builds/install/misc/firebird.conf.in (+5/-2)
builds/posix/Makefile.in (+17/-17)
builds/posix/Makefile.in.examples (+1/-0)
builds/posix/make.defaults (+1/-1)
builds/posix/prefix.darwin_i386 (+2/-5)
builds/posix/prefix.darwin_powerpc (+0/-5)
builds/posix/prefix.darwin_ppc64 (+2/-5)
builds/posix/prefix.darwin_x86_64 (+0/-1)
builds/win32/msvc10/empbuild.vcxproj (+6/-4)
builds/win32/msvc12/empbuild.vcxproj (+6/-4)
builds/win32/msvc14/empbuild.vcxproj (+6/-4)
configure.ac (+10/-17)
debian/changelog (+66/-0)
debian/clean (+1/-1)
debian/control (+1/-1)
debian/copyright (+82/-43)
debian/firebird3.0-server.lintian-overrides (+3/-3)
debian/gbp.conf (+3/-0)
debian/libib-util.lintian-overrides (+1/-1)
debian/pack-upstream-snapshot.sh (+3/-2)
debian/patches/deb/no-suse.init.patch (+1/-1)
debian/patches/no-binary-gbaks.patch (+2/-2)
debian/patches/out/cross-configure.patch (+6/-6)
debian/patches/out/hurd-maxpathlen.patch (+2/-2)
debian/patches/out/obsolete-syslogd.target.patch (+1/-1)
debian/patches/series (+2/-0)
debian/patches/upstream/riscv64-support.patch (+1/-1)
debian/patches/upstream/systemd-service-documentation.patch (+15/-0)
debian/patches/upstream/systemd-service-stderr.patch (+15/-0)
debian/rules (+9/-4)
debian/watch (+3/-5)
dev/null (+0/-17)
doc/WhatsNew (+185/-0)
examples/dbcrypt/CryptKeyHolder.cpp (+1/-1)
examples/dbcrypt/DbCrypt.cpp (+1/-1)
examples/interfaces/ifaceExamples.h (+0/-8)
src/alice/tdr.cpp (+8/-13)
src/auth/AuthDbg.cpp (+1/-1)
src/auth/SecDbCache.h (+10/-0)
src/auth/SecureRemotePassword/manage/SrpManagement.cpp (+1/-9)
src/auth/SecureRemotePassword/server/SrpServer.cpp (+16/-12)
src/auth/SecurityDatabase/LegacyManagement.epp (+1/-1)
src/auth/SecurityDatabase/LegacyServer.cpp (+1/-1)
src/burp/backup.epp (+1/-1)
src/common/ThreadStart.cpp (+11/-8)
src/common/UtilSvc.cpp (+1/-0)
src/common/classes/ClumpletReader.cpp (+14/-0)
src/common/classes/RefMutex.h (+4/-4)
src/common/classes/XThreadMutex.h (+1/-1)
src/common/classes/array.h (+6/-0)
src/common/classes/auto.h (+24/-7)
src/common/classes/locks.h (+11/-7)
src/common/common.h (+0/-6)
src/common/config/config.cpp (+1/-1)
src/common/fb_exception.cpp (+20/-7)
src/common/intlobj_new.h (+11/-3)
src/common/isc_sync.cpp (+4/-1)
src/common/os/posix/guid.cpp (+3/-0)
src/common/os/posix/os_utils.cpp (+6/-6)
src/common/unicode_util.cpp (+271/-54)
src/common/unicode_util.h (+49/-2)
src/common/utils.cpp (+25/-11)
src/dsql/DsqlCursor.cpp (+19/-25)
src/dsql/DsqlCursor.h (+1/-1)
src/dsql/dsql.cpp (+25/-26)
src/dsql/dsql.h (+4/-0)
src/dsql/pass1.cpp (+4/-9)
src/extlib/ib_util.cpp (+3/-4)
src/include/consts_pub.h (+1/-0)
src/include/fb_exception.h (+9/-4)
src/include/firebird.h (+0/-7)
src/include/firebird/UdrCppEngine.h (+1/-1)
src/include/gen/Firebird.pas (+3/-0)
src/include/gen/msgs.h (+1/-1)
src/include/gen/sql_code.h (+1/-1)
src/intl/charsets/cs_437.h (+0/-266)
src/intl/charsets/cs_737.h (+0/-266)
src/intl/charsets/cs_775.h (+0/-266)
src/intl/charsets/cs_850.h (+0/-266)
src/intl/charsets/cs_852.h (+0/-266)
src/intl/charsets/cs_857.h (+0/-266)
src/intl/charsets/cs_858.h (+0/-266)
src/intl/charsets/cs_860.h (+0/-266)
src/intl/charsets/cs_861.h (+0/-266)
src/intl/charsets/cs_862.h (+0/-266)
src/intl/charsets/cs_863.h (+0/-266)
src/intl/charsets/cs_864.h (+0/-266)
src/intl/charsets/cs_865.h (+0/-266)
src/intl/charsets/cs_866.h (+0/-266)
src/intl/charsets/cs_869.h (+0/-266)
src/intl/charsets/cs_big5.h (+0/-65)
src/intl/charsets/cs_cyrl.h (+1/-269)
src/intl/charsets/cs_gb2312.h (+1/-45)
src/intl/charsets/cs_iso8859_1.h (+0/-266)
src/intl/charsets/cs_iso8859_13.h (+0/-266)
src/intl/charsets/cs_iso8859_2.h (+0/-266)
src/intl/charsets/cs_iso8859_3.h (+0/-266)
src/intl/charsets/cs_iso8859_4.h (+0/-266)
src/intl/charsets/cs_iso8859_5.h (+0/-266)
src/intl/charsets/cs_iso8859_6.h (+0/-266)
src/intl/charsets/cs_iso8859_7.h (+0/-266)
src/intl/charsets/cs_iso8859_8.h (+0/-266)
src/intl/charsets/cs_iso8859_9.h (+0/-266)
src/intl/charsets/cs_jis_0208_1990.h (+1/-35)
src/intl/charsets/cs_koi8r.h (+0/-257)
src/intl/charsets/cs_koi8u.h (+0/-256)
src/intl/charsets/cs_ksc5601.h (+0/-5)
src/intl/charsets/cs_next.h (+1/-290)
src/intl/charsets/cs_sjis.h (+1/-252)
src/intl/charsets/cs_w1250.h (+0/-266)
src/intl/charsets/cs_w1251.h (+0/-266)
src/intl/charsets/cs_w1252.h (+0/-266)
src/intl/charsets/cs_w1253.h (+0/-266)
src/intl/charsets/cs_w1254.h (+0/-266)
src/intl/charsets/cs_w1255.h (+0/-266)
src/intl/charsets/cs_w1256.h (+0/-266)
src/intl/charsets/cs_w1257.h (+0/-266)
src/intl/charsets/cs_w1258.h (+1/-269)
src/intl/lc_ascii.cpp (+0/-2)
src/intl/lc_ksc.cpp (+0/-2)
src/intl/lc_narrow.cpp (+0/-2)
src/intl/ld.cpp (+4/-4)
src/intl/ld.h (+0/-8)
src/intl/ld_proto.h (+4/-4)
src/isql/isql.epp (+12/-13)
src/isql/show.epp (+33/-45)
src/jrd/Attachment.cpp (+11/-6)
src/jrd/Attachment.h (+113/-8)
src/jrd/CryptoManager.cpp (+26/-35)
src/jrd/CryptoManager.h (+2/-2)
src/jrd/DbCreators.cpp (+4/-10)
src/jrd/Mapping.cpp (+39/-18)
src/jrd/Mapping.h (+1/-1)
src/jrd/Monitoring.cpp (+1/-1)
src/jrd/Optimizer.cpp (+152/-72)
src/jrd/Optimizer.h (+6/-2)
src/jrd/ThreadCollect.h (+138/-0)
src/jrd/btr.cpp (+337/-229)
src/jrd/btr.h (+2/-0)
src/jrd/btr_proto.h (+3/-3)
src/jrd/build_no.h (+7/-7)
src/jrd/dfw.epp (+3/-1)
src/jrd/dpm.epp (+2/-0)
src/jrd/extds/ExtDS.cpp (+6/-6)
src/jrd/extds/InternalDS.cpp (+30/-30)
src/jrd/extds/IscDS.cpp (+22/-15)
src/jrd/ibase.h (+12/-0)
src/jrd/idx.cpp (+32/-13)
src/jrd/inf.cpp (+1/-1)
src/jrd/intl.cpp (+2/-0)
src/jrd/jrd.cpp (+163/-86)
src/jrd/jrd.h (+14/-2)
src/jrd/met.epp (+111/-94)
src/jrd/opt.cpp (+0/-2)
src/jrd/os/win32/winnt.cpp (+2/-0)
src/jrd/recsrc/IndexTableScan.cpp (+155/-95)
src/jrd/recsrc/RecordSource.h (+6/-0)
src/jrd/shut.cpp (+8/-2)
src/jrd/svc.cpp (+26/-70)
src/jrd/svc.h (+3/-0)
src/jrd/tra.cpp (+2/-0)
src/jrd/trace/TraceManager.cpp (+20/-3)
src/jrd/validation.cpp (+21/-10)
src/misc/pascal/fb_get_master_interface.pas (+2/-0)
src/misc/src_bundle.sh (+1/-1)
src/misc/writeBuildNum.sh (+2/-2)
src/msgs/messages2.sql (+1/-1)
src/msgs/system_errors2.sql (+1/-1)
src/plugins/udr_engine/UdrEngine.cpp (+1/-1)
src/remote/client/interface.cpp (+115/-20)
src/remote/inet.cpp (+2/-1)
src/remote/remote.cpp (+26/-1)
src/remote/remote.h (+8/-3)
src/remote/server/server.cpp (+19/-15)
src/utilities/fbtracemgr/traceMgrMain.cpp (+14/-8)
src/utilities/gstat/dba.epp (+9/-4)
src/utilities/nbackup/nbackup.cpp (+13/-1)
src/utilities/ntrace/traceplugin.cpp (+1/-1)
src/yvalve/DistributedTransaction.cpp (+6/-15)
src/yvalve/PluginManager.cpp (+3/-0)
src/yvalve/gds.cpp (+2/-2)
src/yvalve/gds_proto.h (+4/-2)
src/yvalve/preparse.cpp (+1/-1)
src/yvalve/utl.cpp (+29/-40)
src/yvalve/why.cpp (+5/-8)
Reviewer Review Type Date Requested Status
git-ubuntu import Pending
Review via email: mp+445975@code.launchpad.net

This proposal has been superseded by a proposal from 2023-07-04.

To post a comment you must log in.

Unmerged commits

c648f1d... by Danilo Egea Gondolfo

changelog

ba77bdd... by Danilo Egea Gondolfo

Merge branch 'ubuntu/devel' into mantic_merge_1

bfc434c... by Damyan Ivanov

3.0.11.33637.ds4-2 (patches unapplied)

Imported using git-ubuntu import.

9bcb942... by Damyan Ivanov

3.0.11.33637.ds4-1 (patches unapplied)

Imported using git-ubuntu import.

e681bf4... by Damyan Ivanov

3.0.10.33601.ds4-1 (patches unapplied)

Imported using git-ubuntu import.

35b5a24... by Damyan Ivanov

3.0.9.33560.ds4-3 (patches unapplied)

Imported using git-ubuntu import.

def9fad... by Damyan Ivanov

3.0.9.33560.ds4-2 (patches unapplied)

Imported using git-ubuntu import.

e09a3d4... by Damyan Ivanov

3.0.9.33560.ds4-1 (patches unapplied)

Imported using git-ubuntu import.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/.travis.yml b/.travis.yml
2deleted file mode 100644
3index ef72bb9..0000000
4--- a/.travis.yml
5+++ /dev/null
6@@ -1,78 +0,0 @@
7-matrix:
8- include:
9- # - os: osx
10- # osx_image: xcode9.2 # macOS 10.12 Sierra
11- # - os: osx
12- # osx_image: xcode11.2 # macOS 10.14 Mojave
13- - os: linux
14-
15-language: cpp
16-
17-notifications:
18- email: false
19-
20-sudo: required
21-dist: trusty
22-
23-install:
24- - |
25- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
26- sudo apt-get update
27- sudo apt-get install -y libtommath0 libtommath-dev
28- fi
29-
30-script:
31- - |
32- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
33- ./autogen.sh --enable-binreloc --prefix=/opt/firebird
34- make -j4
35- make dist
36- tar xzvf gen/Firebird-[0-9]*.tar.gz
37- (cd Firebird-[0-9]*; sudo ./install.sh -silent)
38- fi
39-
40- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
41- export LIBTOOLIZE=glibtoolize
42- export LIBTOOL=glibtool
43-
44- mkdir extern/icu-macos
45- pushd extern/icu-macos
46- curl -OL https://github.com/unicode-org/icu/releases/download/release-59-2/icu4c-59_2-src.tgz
47- curl -OL https://github.com/unicode-org/icu/commit/24aeb9a5a5874f4ce5db912e30670ac3ae236971.patch
48- tar xzf icu4c-59_2-src.tgz
49- ICU_INSTALL_PATH=`pwd`/install
50- cd icu/source
51- patch -p3 < ../../24aeb9a5a5874f4ce5db912e30670ac3ae236971.patch
52- ./runConfigureICU MacOSX --prefix=$ICU_INSTALL_PATH
53- make -j4
54- make install
55- install_name_tool -id @rpath/lib/libicuuc.dylib $ICU_INSTALL_PATH/lib/libicuuc.dylib
56- install_name_tool -id @rpath/lib/libicui18n.dylib $ICU_INSTALL_PATH/lib/libicui18n.dylib
57- install_name_tool -id @rpath/lib/libicudata.dylib $ICU_INSTALL_PATH/lib/libicudata.dylib
58- install_name_tool -change libicudata.59.dylib @loader_path/libicudata.59.dylib $ICU_INSTALL_PATH/lib/libicuuc.59.dylib
59- install_name_tool -change libicudata.59.dylib @loader_path/libicudata.59.dylib $ICU_INSTALL_PATH/lib/libicui18n.59.dylib
60- install_name_tool -change libicuuc.59.dylib @loader_path/libicuuc.59.dylib $ICU_INSTALL_PATH/lib/libicui18n.59.dylib
61- popd
62- mkdir -p gen/Release/firebird/lib
63- mkdir -p gen/Debug/firebird/lib
64- cp $ICU_INSTALL_PATH/lib/*.dylib gen/Release/firebird/lib/
65- cp $ICU_INSTALL_PATH/lib/*.dylib gen/Debug/firebird/lib/
66-
67- export C_INCLUDE_PATH="$ICU_INSTALL_PATH/include:$C_INCLUDE_PATH"
68- export CPLUS_INCLUDE_PATH="$ICU_INSTALL_PATH/include:$CPLUS_INCLUDE_PATH"
69-
70- LIBRARY_PATH="$ICU_INSTALL_PATH/lib:$LIBRARY_PATH" ./autogen.sh --with-builtin-tommath
71- make -j4
72-
73- (cd gen; make -B -f make.platform.postfix ICU_LOC="$ICU_INSTALL_PATH/lib/")
74- (cd gen; make -B -f Makefile.install)
75-
76- # Rename directory to make sure the build is relocatable.
77- mv gen gen2
78- sudo installer -pkg gen2/Release/*.pkg -verbose -target /
79-
80- export FIREBIRD_LOCK=`pwd`/temp
81- echo "create database 't.fdb'; select '1' from rdb\$database; select _win1252 '2' from rdb\$database; select _utf8 '3' collate unicode from rdb\$database;" | /Library/Frameworks/Firebird.framework/Resources/bin/isql
82-
83- echo "create database 'localhost:/tmp/t.fdb' user sysdba password 'masterkey'; select '11' from rdb\$database; select _win1252 '22' from rdb\$database; select _utf8 '33' collate unicode from rdb\$database;" | /Library/Frameworks/Firebird.framework/Resources/bin/isql
84- fi
85diff --git a/README.md b/README.md
86index 1c8a5e0..4759d06 100644
87--- a/README.md
88+++ b/README.md
89@@ -1,5 +1,5 @@
90-[![Build Status](https://api.travis-ci.com/FirebirdSQL/firebird.svg?branch=B3_0_Release)](https://travis-ci.com/FirebirdSQL/firebird)
91-[![Build Status](https://ci.appveyor.com/api/projects/status/github/FirebirdSQL/firebird?branch=B3_0_Release&svg=true)](https://ci.appveyor.com/project/FirebirdSQL/firebird)
92+[![Build Status (GitHub)](https://github.com/FirebirdSQL/firebird/actions/workflows/main.yml/badge.svg?branch=B3_0_Release)](https://github.com/FirebirdSQL/firebird/actions/workflows/main.yml?query=branch%3AB3_0_Release)
93+[![Build Status (AppVeyor)](https://ci.appveyor.com/api/projects/status/github/FirebirdSQL/firebird?branch=B3_0_Release&svg=true)](https://ci.appveyor.com/project/FirebirdSQL/firebird)
94
95 # Firebird README
96
97diff --git a/builds/install/arch-specific/android/BuildPackage.sh b/builds/install/arch-specific/android/BuildPackage.sh
98index beb8406..f7f5caa 100644
99--- a/builds/install/arch-specific/android/BuildPackage.sh
100+++ b/builds/install/arch-specific/android/BuildPackage.sh
101@@ -1,10 +1,18 @@
102+bits=${1}
103+[ -z "$bits" ] && bits=32
104+[ "$bits" = "32" ] && cross=arm-linux-androideabi
105+[ "$bits" = "64" ] && cross=aarch64-linux-android
106+[ -z "$cross" ] && echo "Invalid bits passed" && exit 1
107+arm=""
108+[ "$bits" = "64" ] && arm=64
109+
110 MakeVersion=gen/Make.Version
111 Build=`grep ^BuildNum ${MakeVersion}|awk '{print $3;}'`
112 Version=`grep ^FirebirdVersion ${MakeVersion}|awk '{print $3;}'`
113-Release="Firebird-${Version}.${Build}-0.arm.tar.gz"
114-Debug="Firebird-withDebugInfo-${Version}.${Build}-0.arm.tar.gz"
115+Release="Firebird-${Version}.${Build}-0.arm${arm}.tar.gz"
116+Debug="Firebird-withDebugInfo-${Version}.${Build}-0.arm${arm}.tar.gz"
117 Stripped=strip
118-aStrip=${NDK}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-strip
119+aStrip=${NDK}/toolchains/${cross}-4.9/prebuilt/linux-x86_64/bin/${cross}-strip
120 fbRootDir=`pwd`
121
122 cd gen/Release
123diff --git a/builds/install/arch-specific/win32/BuildExecutableInstall.bat b/builds/install/arch-specific/win32/BuildExecutableInstall.bat
124index b3437f0..1d86344 100644
125--- a/builds/install/arch-specific/win32/BuildExecutableInstall.bat
126+++ b/builds/install/arch-specific/win32/BuildExecutableInstall.bat
127@@ -264,7 +264,7 @@ copy %FB_ROOT_PATH%\lang_helpers\ib_util.pas %FB_OUTPUT_DIR%\include > nul || (c
128 @if errorlevel 0 (
129 if "%PROCESSOR_ARCHITECTURE%"=="x86" (
130 @echo Generating fbclient_bor.lib
131- @implib %FB_OUTPUT_DIR%\lib\fbclient_bor.lib %FB_OUTPUT_DIR%\fbclient.dll > nul
132+ @implib.exe %FB_OUTPUT_DIR%\lib\fbclient_bor.lib %FB_OUTPUT_DIR%\fbclient.dll > nul
133 )
134 )
135
136@@ -302,7 +302,7 @@ for %%v in ( ib_udf.sql ib_udf2.sql ) do (
137 for %%v in ( fbudf.sql fbudf.txt ) do (
138 copy %FB_ROOT_PATH%\src\extlib\fbudf\%%v %FB_OUTPUT_DIR%\UDF\%%v > nul
139 @if %ERRORLEVEL% GEQ 1 (
140- call :ERROR Copying %FB_ROOT_PATH%\src\extlib\%%v failed with error %ERRORLEVEL%
141+ call :ERROR Copying %FB_ROOT_PATH%\src\extlib\fbudf\%%v to %FB_OUTPUT_DIR%\UDF\%%v failed with error %ERRORLEVEL%
142 goto :EOF
143 )
144 )
145@@ -585,7 +585,7 @@ if "%FBBUILD_SHIP_PDB%" == "ship_pdb" (
146 )
147 set FBBUILD_ZIPFILE=%FBBUILD_INSTALL_IMAGES%\Firebird-%FBBUILD_FILE_ID%%FBBUILD_FILENAME_SUFFIX%.zip
148 )
149-
150+@echo calling sevenzip - %SEVENZIP% %FBBUILD_ZIPFILE% %FBBUILD_ZIP_PACK_ROOT%\*.*
151 @%SEVENZIP%\7z.exe a -r -tzip -mx9 %FBBUILD_ZIPFILE% %FBBUILD_ZIP_PACK_ROOT%\*.*
152 @echo End of ZIP_PACK
153 @echo.
154diff --git a/builds/install/arch-specific/win32/FirebirdInstallSupportFunctions.inc b/builds/install/arch-specific/win32/FirebirdInstallSupportFunctions.inc
155index 7bfefac..c95696f 100644
156--- a/builds/install/arch-specific/win32/FirebirdInstallSupportFunctions.inc
157+++ b/builds/install/arch-specific/win32/FirebirdInstallSupportFunctions.inc
158@@ -356,6 +356,20 @@ begin
159 end;
160
161
162+function FindInFile( Filename, StringToFind: String): Boolean;
163+var
164+ i: Integer;
165+ AString: AnsiString;
166+begin
167+ Result := False;
168+ LoadStringFromFile( Filename, Astring );
169+ i := Length( Astring );
170+ if i <> 0 then
171+ i := Pos ( StringToFind, Astring );
172+ if i <> 0 then Result := True;
173+end;
174+
175+
176 procedure DecodeVersion( VerStr: String; var VerInt: array of Integer );
177 var
178 i,p: Integer; s: string;
179diff --git a/builds/install/arch-specific/win32/FirebirdInstall_30.iss b/builds/install/arch-specific/win32/FirebirdInstall_30.iss
180index 6b38cd0..5a31401 100644
181--- a/builds/install/arch-specific/win32/FirebirdInstall_30.iss
182+++ b/builds/install/arch-specific/win32/FirebirdInstall_30.iss
183@@ -191,7 +191,7 @@
184 ;If we are still under development we can ignore some missing files.
185 #if GetEnv("FBBUILD_PROD_STATUS") == "DEV"
186 #define SkipFileIfDevStatus " skipifsourcedoesntexist "
187-#else
188+#else
189 #define SkipFileIfDevStatus " "
190 #endif
191
192@@ -351,7 +351,7 @@ Name: ru; MessagesFile: compiler:Languages\Russian.isl; InfoBeforeFile: {#GenDir
193 #endif
194
195 #ifdef iss_debug
196-; *** Note - this comment section needs revision or deletion.
197+; *** Note - this comment section needs revision or deletion.
198 ; It is only applicable to the ansi installer, which is no longer
199 ; supported for Firebird 3
200 ; By default, the languages available at runtime depend on the user's
201@@ -435,7 +435,7 @@ Root: HKLM; Subkey: "SOFTWARE\FirebirdSQL"; ValueType: none; Flags: deletekey;
202
203 [Icons]
204 Name: {group}\Firebird Server; Filename: {app}\firebird.exe; Parameters: {code:StartAppParams}; Flags: runminimized; MinVersion: 4.0,4.0; Check: InstallServerIcon; IconIndex: 0; Components: ServerComponent; Comment: Run Firebird Server (without guardian)
205-Name: {group}\Firebird Guardian; Filename: {app}\fbguard.exe; Parameters: {code:StartAppParams}; Flags: runminimized; MinVersion: 4.0,4.0; Check: InstallGuardianIcon; IconIndex: 1; Components: ServerComponent; Comment: Run Firebird Server (with guardian);
206+Name: {group}\Firebird Guardian; Filename: {app}\fbguard.exe; Parameters: {code:StartAppParams}; Flags: runminimized; MinVersion: 4.0,4.0; Check: InstallGuardianIcon; IconIndex: 1; Components: ServerComponent; Comment: Run Firebird Server (with guardian);
207 Name: {group}\Firebird ISQL Tool; Filename: {app}\isql.exe; Parameters: -z; WorkingDir: {app}; MinVersion: 4.0,4.0; Comment: {cm:RunISQL}
208 Name: {group}\Firebird {#FB_cur_ver} Release Notes; Filename: {app}\doc\Firebird_v{#FB_cur_ver}.ReleaseNotes.pdf; MinVersion: 4.0,4.0; Comment: {#MyAppName} {cm:ReleaseNotes}
209 Name: {group}\Firebird {#GroupnameVer} Quick Start Guide; Filename: {app}\doc\Firebird-3-QuickStart.pdf; MinVersion: 4.0,4.0; Comment: {#MyAppName} {#FB_cur_ver}
210@@ -688,7 +688,7 @@ begin
211 // or
212 // (pos('/?',Uppercase(CommandLine)) > 0) or // InnoSetup displays its own help if these switches are passed.
213 // (pos('/H',Uppercase(CommandLine)) > 0) ) // Note also that our help scren only appears after the Choose Language dialogue :-(
214- then begin
215+ then begin
216 ShowHelpDlg;
217 result := False;
218 Exit;
219@@ -835,7 +835,7 @@ begin
220 if IsComponentSelected('ServerComponent') and ( IsTaskSelected('UseSuperServerTask\UseGuardianTask')
221 or ( IsTaskSelected('UseSuperClassicTask\UseGuardianTask') ) ) then
222 SvcParams := ServerType + SvcParams + ' -guardian ';
223-
224+
225 InstanceName := ServiceName('We currently do not support or test for a different instance name');
226
227 SvcParams := SvcParams + InstanceName;
228@@ -858,29 +858,69 @@ begin
229 end;
230
231
232-
233-
234-function InitSecurityDB: Boolean;
235+function InitSecurityDB( PluginName: String ) : Boolean;
236 var
237 AStringList: TStringList;
238 TempDir: String;
239- ResultCode: Integer;
240- CmdStr: string;
241+ ResultCode: Integer;
242+ CmdStr: string;
243+ InputStr: string;
244+ OutputStr: string;
245 begin
246- TempDir := ExpandConstant( '{tmp}' );
247- CmdStr := ExpandConstant( '{app}\isql.exe' );
248- AStringList := TStringList.create;
249- with AStringList do begin
250- Add( 'create user ' + GetAdminUserName + ' password ''' + GetAdminUserPassword + ''' using plugin Srp;' );
251- if IsTaskSelected('EnableLegacyClientAuth') then
252- if ( ( uppercase( GetAdminUserName ) <> 'SYSDBA' ) or ( GetAdminUserPassword <> 'masterkey' ) ) then
253- Add( 'create or alter user ' + GetAdminUserName + ' password ''' + GetAdminUserPassword + ''' using plugin Legacy_UserManager;' );
254- Add( 'commit;' ); //Technically exit implies a commit so this not necessary. OTOH, explicitly committing makes for more readable code.
255- Add( 'exit;' );
256- SaveToFile( Tempdir +'\temp.sql' );
257- end;
258- Result := Exec( CmdStr , ' -m -m2 -user SYSDBA -i ' + TempDir + '\temp.sql -o ' + TempDir + '\temp.sql.txt employee ' , TempDir, SW_HIDE, ewWaitUntilTerminated, ResultCode );
259- DeleteFile( TempDir + +'\temp.sql ');
260+
261+ if PluginName = '' then
262+ PluginName := 'Srp';
263+
264+ TempDir := ExpandConstant( '{tmp}' );
265+ CmdStr := ExpandConstant( '{app}\isql.exe' );
266+ InputStr := TempDir + '\' + PluginName + '_temp.sql';
267+ OutputStr := InputStr + '.txt';
268+
269+ // Do we need to do this?
270+ if FileExists( InputStr ) then DeleteFile( InputStr );
271+ if FileExists( OutputStr ) then DeleteFile( OutputStr );
272+
273+ AStringList := TStringList.create;
274+ with AStringList do begin
275+ Add( 'create or alter user ' + GetAdminUserName + ' password ''' + GetAdminUserPassword + ''' using plugin ' + PluginName + ';' );
276+ Add( 'exit;' );
277+ SaveToFile( InputStr );
278+ end;
279+
280+
281+ Result := Exec( CmdStr , ' -m -m2 -user SYSDBA -i ' + InputStr + ' -o ' + OutputStr + ' employee ' , TempDir, SW_HIDE, ewWaitUntilTerminated, ResultCode );
282+
283+// DOC NOTE - we are not actually handling a non-zero result code.
284+// This is a complicated subject as the installer can be run either scripted
285+// or as a GUI. This needs more research. If InitSecurityDB fails do we fail
286+// the entire install? Allow user to complete and fix manually? Or give both options?
287+ if ResultCode <> 0 then begin
288+ Result := False;
289+ Log( 'In function InitSecurityDB Exec isql returned ' + IntToStr(ResultCode) + ' executing ' + InputStr );
290+ end;
291+ if FindInFile( OutputStr, 'error' ) then begin
292+ Result := False;
293+ Log( 'In function InitSecurityDB FindInFile found an error in ' + OutputStr );
294+ end;
295+
296+end;
297+
298+
299+function ConfigLegacyClientAuth: Boolean;
300+begin
301+
302+// This order of plugin evaluation favours Legacy_Auth as the preferred plugin
303+ ReplaceLine(GetAppPath+'\firebird.conf','AuthServer = ','AuthServer = Legacy_Auth, Srp, Win_Sspi','#');
304+ ReplaceLine(GetAppPath+'\firebird.conf','AuthClient = ','AuthClient = Legacy_Auth, Srp, Srp256, Win_Sspi','#');
305+ ReplaceLine(GetAppPath+'\firebird.conf','UserManager = ','UserManager = Legacy_UserManager, Srp','#');
306+ ReplaceLine(GetAppPath+'\firebird.conf','WireCrypt = ','WireCrypt = enabled','#');
307+
308+// This order of plugin evaluation favours the more secure defaults
309+// ReplaceLine(GetAppPath+'\firebird.conf','AuthServer = ','AuthServer = Srp, Win_Sspi, Legacy_Auth ','#');
310+// ReplaceLine(GetAppPath+'\firebird.conf','AuthClient = ','AuthClient = Srp, Srp256, Win_Sspi, Legacy_Auth','#');
311+// ReplaceLine(GetAppPath+'\firebird.conf','UserManager = ','UserManager = Srp, Legacy_UserManager','#');
312+// ReplaceLine(GetAppPath+'\firebird.conf','WireCrypt = ','WireCrypt = enabled','#');
313+
314 end;
315
316
317@@ -897,8 +937,8 @@ end;
318 function InstallServerIcon(): Boolean;
319 begin
320 result := false;
321- if IsTaskSelected('UseApplicationTask') and
322- IsComponentSelected('ServerComponent') and
323+ if IsTaskSelected('UseApplicationTask') and
324+ IsComponentSelected('ServerComponent') and
325 not ( IsTaskSelected('UseSuperServerTask\UseGuardianTask') or
326 IsTaskSelected('UseSuperClassicTask\UseGuardianTask') ) then
327 result := true;
328@@ -906,7 +946,7 @@ end;
329
330 function StartApp(Default: String): String;
331 begin
332- if IsComponentSelected('ServerComponent') and (
333+ if IsComponentSelected('ServerComponent') and (
334 IsTaskSelected('UseSuperServerTask\UseGuardianTask') or
335 IsTaskSelected('UseSuperClassicTask\UseGuardianTask') ) then
336 Result := GetAppPath+'\fbguard.exe'
337@@ -945,8 +985,8 @@ end;
338
339
340 procedure UpdateFirebirdConf;
341-// Update firebird conf.
342-// If user has deselected the guardian we should update firebird.conf accordingly.
343+// Update firebird conf.
344+// If user has deselected the guardian we should update firebird.conf accordingly.
345 // We also test if user has asked for classic or super server
346 // If EnableLegacyClientAuth has ben selected we update the file.......
347 // Otherwise we leave the file unchanged.
348@@ -956,34 +996,31 @@ begin
349 //firebird.conf exists. If it doesn't then we don't care.
350 if FileExists(GetAppPath+'\firebird.conf') then begin
351
352- if (IsComponentSelected('ServerComponent') ) then begin
353+ if (IsComponentSelected('ServerComponent') ) then begin
354
355-// Setting GuardianOption to 0 makes no sense. If the user deploys the guardian
356-// there is an expectation that it will restart the server in the event of a crash.
357+// Setting GuardianOption to 0 makes no sense. If the user deploys the guardian
358+// there is an expectation that it will restart the server in the event of a crash.
359 // Otherwise, why start firebird with the guardian?
360 // if not ( IsTaskSelected('UseSuperServerTask\UseGuardianTask') or IsTaskSelected('UseSuperClassicTask\UseGuardianTask') ) then
361 // ReplaceLine(GetAppPath+'\firebird.conf','GuardianOption','GuardianOption = 0','#');
362
363- // These attempts to modify firebird.conf may not survice repeated installs.
364+ // These attempts to modify firebird.conf may not survice repeated installs.
365
366- if IsTaskSelected('UseClassicServerTask') then
367- ReplaceLine(GetAppPath+'\firebird.conf','ServerMode = ','ServerMode = Classic','#');
368+ if IsTaskSelected('UseClassicServerTask') then
369+ ReplaceLine(GetAppPath+'\firebird.conf','ServerMode = ','ServerMode = Classic','#');
370
371 if IsTaskSelected('UseSuperClassicTask') then
372- ReplaceLine(GetAppPath+'\firebird.conf','ServerMode = ','ServerMode = SuperClassic','#');
373+ ReplaceLine(GetAppPath+'\firebird.conf','ServerMode = ','ServerMode = SuperClassic','#');
374
375- if IsTaskSelected('UseSuperServerTask') then
376- ReplaceLine(GetAppPath+'\firebird.conf','ServerMode = ','ServerMode = Super','#');
377+ if IsTaskSelected('UseSuperServerTask') then
378+ ReplaceLine(GetAppPath+'\firebird.conf','ServerMode = ','ServerMode = Super','#');
379
380 if IsTaskSelected('EnableLegacyClientAuth') then begin
381- ReplaceLine(GetAppPath+'\firebird.conf','AuthServer = ','AuthServer = Legacy_Auth, Srp, Win_Sspi','#');
382- ReplaceLine(GetAppPath+'\firebird.conf','AuthClient = ','AuthClient = Legacy_Auth, Srp, Win_Sspi','#');
383- ReplaceLine(GetAppPath+'\firebird.conf','UserManager = ','UserManager = Legacy_UserManager, Srp','#');
384- ReplaceLine(GetAppPath+'\firebird.conf','WireCrypt = ','WireCrypt = enabled','#');
385+ ConfigLegacyClientAuth;
386 end;
387
388- end;
389-
390+ end;
391+
392 end;
393 end;
394
395@@ -1021,9 +1058,9 @@ end;
396
397 procedure CurPageChanged(CurPage: Integer);
398 // These are the predefined page IDs of the Wizard form as of InnoSetup 5.5.6
399-// wpWelcome, wpLicense, wpPassword, wpInfoBefore, wpUserInfo,
400-// wpSelectDir, wpSelectComponents, wpSelectProgramGroup, wpSelectTasks,
401-// wpReady, wpPreparing, wpInstalling, wpInfoAfter, wpFinished
402+// wpWelcome, wpLicense, wpPassword, wpInfoBefore, wpUserInfo,
403+// wpSelectDir, wpSelectComponents, wpSelectProgramGroup, wpSelectTasks,
404+// wpReady, wpPreparing, wpInstalling, wpInfoAfter, wpFinished
405 begin
406 case CurPage of
407 wpWelcome: ResizeWizardForm(True); //There was a bug: every time when "go back" pressed the form was resized!
408@@ -1034,12 +1071,12 @@ end;
409
410
411 procedure CurStepChanged(CurStep: TSetupStep);
412-// currently just three steps - ssInstall, ssPostInstall, ssDone
413+// currently just three steps - ssInstall, ssPostInstall, ssDone
414 var
415 AppStr: String;
416 ReadMeFileStr: String;
417 begin
418- case CurStep of
419+ case CurStep of
420 ssInstall: begin
421 RenamePreFB3RC1Files;
422 SetupSharedFilesArray;
423@@ -1054,13 +1091,15 @@ begin
424 IncrementSharedCount(Is64BitInstallMode, GetAppPath+'\fbtrace.conf', false);
425 IncrementSharedCount(Is64BitInstallMode, GetAppPath+'\security3.fdb', false);
426
427- InitSecurityDB;
428+ InitSecurityDB('Srp');
429
430 //Fix up conf file
431 UpdateFirebirdConf;
432 RemoveSavedConfIfNoDiff;
433
434-
435+ if IsTaskSelected('EnableLegacyClientAuth') then
436+ InitSecurityDB( 'Legacy_UserManager' );
437+
438 end;
439
440 ssDone: begin
441@@ -1099,7 +1138,7 @@ end;
442 // # FIXME - we can probably remove this function
443 function ChooseUninstallIcon(Default: String): String;
444 begin
445- result := GetAppPath+'\firebird.exe';
446+ result := GetAppPath+'\firebird.exe';
447 end;
448
449 //InnoSetup has a Check Parameter that allows installation if the function returns true.
450@@ -1175,11 +1214,11 @@ begin
451 // a) Decrement shared count of each one and
452 // b) If Decrement reaches 0 (ie, function returns true) then we
453 // delete the file.
454- // c) We arbitrarily break after 100 loops. Typically the shared count should only be
455+ // c) We arbitrarily break after 100 loops. Typically the shared count should only be
456 // in single digits anyway but we don't want to risk the test entering an endless loop.
457 i := 0;
458- while not DecrementSharedCount(Is64BitInstallMode, aStringList[ count ] )
459- do
460+ while not DecrementSharedCount(Is64BitInstallMode, aStringList[ count ] )
461+ do
462 if i = 100 then break else inc(i);
463
464 res := DeleteFile( aStringList[ count ] );
465@@ -1204,29 +1243,31 @@ begin
466 Result := True
467 else if not ConfigureAuthentication then
468 Result := True
469- else
470+ else
471 Result := False;
472 end;
473
474
475 function NextButtonClick(CurPageID: Integer): Boolean;
476 var
477- i: integer;
478+ i: integer;
479 begin
480 Result := True;
481 case CurPageID of
482 AdminUserPage.ID : begin
483- { check user has entered new sysdba password correctly. }
484+ { check user has entered new sysdba password correctly. }
485 i := CompareStr(AdminUserPage.Values[0],AdminUserPage.Values[1]);
486 If not (i = 0) then begin
487 Result := False;
488 AdminUserPage.Values[0] :='';
489 AdminUserPage.Values[1] :='';
490 MsgBox(ExpandConstant('{cm:SYSDBAPasswordMismatch}'), mbError, MB_OK);
491- end;
492+ end;
493 end;
494 end;
495 end;
496-
497+
498 begin
499 end.
500+
501+; kate: replace-tabs on; indent-width 2; tab-width 2; replace-tabs-save on; syntax Pascal;
502diff --git a/builds/install/arch-specific/win32/installation_scripted.txt b/builds/install/arch-specific/win32/installation_scripted.txt
503index 15d159b..a155bfa 100644
504--- a/builds/install/arch-specific/win32/installation_scripted.txt
505+++ b/builds/install/arch-specific/win32/installation_scripted.txt
506@@ -14,14 +14,14 @@ General notes on preparing a scripted install
507 ---------------------------------------------
508
509 These notes only document the firebird specific options for a scripted
510-installation. Developers should refer to the full InnoSetup documentation
511-for a description of the other options available for a scripted install.
512+installation. Developers should refer to the full InnoSetup documentation
513+for a description of the other options available for a scripted install.
514 This can be found here:
515 http://www.jrsoftware.org/ishelp/
516
517-It is highly recommended that a scripted install is tested thoroughly
518-before deployment. The easiest way to test is to run the script without
519-the /SILENT parameter. This will present a standard installer with the
520+It is highly recommended that a scripted install is tested thoroughly
521+before deployment. The easiest way to test is to run the script without
522+the /SILENT parameter. This will present a standard installer with the
523 scripted options preselected.
524
525 NOTE that the /TASKS parameter clears all the default task settings. If
526@@ -44,7 +44,7 @@ HELP
527 Setup parameters specific to the Firebird Uninstaller
528 /CLEAN
529
530-For general parameters available to all InnoSetup based installers see the
531+For general parameters available to all InnoSetup based installers see the
532 documentation for innosetup. A summary is available via /? or /HELP
533
534
535@@ -53,10 +53,10 @@ Parameters specific to Firebird installs
536
537 HELP
538 Invoke this file as a help screen at installation time.
539- Note no / is prefixed !! Because /? and /HELP are now
540+ Note no / is prefixed !! Because /? and /HELP are now
541 used by innosetup itself to dispaly innosetup specific help.
542
543-
544+
545 /COMPONENTS="comma separated list of component names"
546
547 Choose from - ServerComponent,
548@@ -70,28 +70,28 @@ HELP
549 /COMPONENTS="ClientComponent"
550
551 would be required for a client only install.
552-
553- NOTE - If a full server instal is required there is no need to
554+
555+ NOTE - If a full server install is required there is no need to
556 specify /COMPONENTS. All three are chosen by default.
557-
558+
559
560 /TASKS="comma separated list of task names"
561
562 Specifies a list of tasks that should be initially selected or
563 deselected. To deselect a task, prefix its name with a "!" character.
564
565- Choose from - UseSuperServerTask
566+ Choose from - UseSuperServerTask
567 UseSuperServerTask\UseGuardianTask (optional)
568- or
569- UseSuperClassicTask
570+ or
571+ UseSuperClassicTask
572 UseSuperClassicTask\UseGuardianTask (optional)
573 or
574 UseClassicServerTask
575-
576- UseApplicationTask
577- or
578+
579+ UseApplicationTask
580+ or
581 UseServiceTask
582-
583+
584 AutoStartTask
585 CopyFbClientToSysTask
586 CopyFbClientAsGds32Task
587@@ -104,7 +104,7 @@ HELP
588
589 By default the following tasks are run:
590
591- UseSuperServerTask,UseServiceTask,AutoStartTask,CopyFbClientToSysTask
592+ UseSuperServerTask,UseServiceTask,AutoStartTask,CopyFbClientToSysTask
593
594 /MERGETASKS="comma separated list of task names"
595
596@@ -119,8 +119,8 @@ HELP
597 /SYSDBAPASSWORD="mypassword"
598
599 If supplied this will override the default SYSDBA password "masterkey".
600-
601- NOTE: If an existing Security database is found this parameter will be
602+
603+ NOTE: If an existing Security database is found this parameter will be
604 ignored.
605
606
607@@ -135,8 +135,8 @@ HELP
608 users by breaking a perfectly good working install of Firebird or InterBase.
609 Its your choice.
610
611-
612-
613+
614+
615 Parameters specific to Firebird uninstalls
616 ------------------------------------------
617
618@@ -159,27 +159,27 @@ Parameters specific to Firebird uninstalls
619
620 Examples
621 --------
622-These examples are just for firebird related options. In practice you
623-they will probably be combined with options such as /SILENT, /LOG,
624+These examples are just for firebird related options. In practice you
625+they will probably be combined with options such as /SILENT, /LOG,
626 /RESTARTEXITCODE etc.
627
628 1/ Full server install of super server architecture
629- o Change SYSDBA password from default masterkey,
630+ o Change SYSDBA password from default masterkey,
631 o deploy gds32 to <SYS>
632 o enable legacy authentication for older clients
633
634 /MERGETASKS="CopyFbClientAsGds32Task,EnableLegacyClientAuth" /SYSDBAPASSWORD="mypassword"
635-
636+
637 2/ Deploy Classic Server and keep other default tasks
638
639- /MERGETASKS="UseClassicServerTask"
640+ /MERGETASKS="UseClassicServerTask"
641
642-3/ Really mess things up by accidentally deselecting the defaults and
643+3/ Really mess things up by accidentally deselecting the defaults and
644 letting InnoSetup guess:
645
646- /TASKS="CopyFbClientAsGds32Task"
647+ /TASKS="CopyFbClientAsGds32Task"
648
649 Be careful when using the /TASKS parameter !
650
651-
652+
653
654diff --git a/builds/install/misc/firebird.conf.in b/builds/install/misc/firebird.conf.in
655index 807bc2d..3244959 100644
656--- a/builds/install/misc/firebird.conf.in
657+++ b/builds/install/misc/firebird.conf.in
658@@ -720,9 +720,12 @@
659 # Either enables or disables the "TCP Loopback Fast Path" feature (SIO_LOOPBACK_FAST_PATH).
660 # Applies to Windows (version 8/2012 or higher) only.
661 #
662-# Type: Boolean, default 1 (true)
663+# Note: Microsoft has deprecated it and not recommended to use anymore.
664+# To be removed in future Firebird versions.
665 #
666-#TcpLoopbackFastPath = 1
667+# Type: Boolean, default 0 (false)
668+#
669+#TcpLoopbackFastPath = 0
670
671 #
672 # Allows setting of IPV6_V6ONLY socket option. If enabled, IPv6 sockets
673diff --git a/builds/posix/Makefile.in b/builds/posix/Makefile.in
674index b6e90be..13e83cb 100644
675--- a/builds/posix/Makefile.in
676+++ b/builds/posix/Makefile.in
677@@ -348,7 +348,7 @@ $(LIBFBINTL_SO): $(INTL_Objects) $(COMMON_LIB)
678 gpre: $(GPRE) databases
679
680 $(GPRE): $(GPRE_Objects) $(COMMON_LIB)
681- $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
682+ $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS)
683
684 HELP_FDB = $(FIREBIRD)/help/help.fdb
685 SECURITY_FDB = $(FIREBIRD)/security3.fdb
686@@ -374,7 +374,7 @@ $(HELP_FDB): help.fdb
687 $(CHMOD) 0444 $@
688
689 help.fdb: $(BLD_ROOT)/misc/help.gbak
690- $(RUN_GBAK) -MODE read_only -R $< $@
691+ $(RUN_GBAK) -MODE read_only -replace $< $@
692 $(CHMOD) 0444 $@
693
694 $(SECURITY_FDB): security.fdb
695@@ -439,62 +439,62 @@ utilities: firebird_server fb_lock_print fbguard fbsvcmgr fbtracemgr gbak gfix g
696 firebird_server: $(FB_DAEMON)
697
698 $(FB_DAEMON): $(Remote_Server_Objects) $(COMMON_LIB)
699- $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
700+ $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS)
701
702 fb_lock_print: $(LOCKPRINT)
703
704 $(LOCKPRINT): $(LOCKPRINT_Objects) $(COMMON_LIB)
705- $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
706+ $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS)
707
708 fbguard: $(FBGUARD)
709
710 $(FBGUARD): $(FBGUARD_Objects) $(COMMON_LIB)
711- $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
712+ $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS)
713
714 fbsvcmgr: $(FBSVCMGR)
715
716 $(FBSVCMGR): $(FBSVCMGR_Objects) $(COMMON_LIB)
717- $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
718+ $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS)
719
720 fbtracemgr: $(FBTRACEMGR)
721
722 $(FBTRACEMGR): $(FBTRACEMGR_Objects) $(COMMON_LIB)
723- $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
724+ $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS)
725
726 gbak: $(GBAK)
727
728 $(GBAK): $(GBAK_Objects) $(COMMON_LIB)
729- $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
730+ $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS)
731
732 gsplit: $(GSPLIT)
733
734 $(GSPLIT): $(GSPLIT_Objects) $(COMMON_LIB)
735- $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
736+ $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS)
737
738 gfix: $(GFIX)
739
740 $(GFIX): $(GFIX_Objects) $(COMMON_LIB)
741- $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
742+ $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS)
743
744 gsec: $(GSEC)
745
746 $(GSEC): $(GSEC_Objects) $(COMMON_LIB)
747- $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
748+ $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS)
749
750 gstat: $(GSTAT)
751
752 $(GSTAT): $(GSTAT_Objects) $(COMMON_LIB)
753- $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
754+ $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS)
755
756 isql: $(ISQL)
757
758 $(ISQL): $(ISQL_Objects) $(COMMON_LIB)
759- $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LIBEDITLINE) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
760+ $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LIBEDITLINE) $(LINK_LIBS)
761
762 nbackup: $(NBACKUP)
763
764 $(NBACKUP): $(NBACKUP_Objects) $(COMMON_LIB)
765- $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
766+ $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS)
767
768
769 #___________________________________________________________________________
770@@ -570,7 +570,7 @@ gen_codes: $(CODES) msg.timestamp
771 $(CODES) $(SRC_ROOT)/include/gen $(LNG_ROOT)
772
773 $(CODES): $(CODES_Objects) $(COMMON_LIB)
774- $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
775+ $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS)
776
777 $(IDS): $(SRC_ROOT)/misc/ids.m $(SRC_ROOT)/jrd/relations.h
778 m4 $< > $@
779@@ -594,7 +594,7 @@ cross_rest: qli gbak_files
780 qli: $(QLI)
781
782 $(QLI): $(QLI_Objects) $(COMMON_LIB)
783- $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
784+ $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS)
785
786 examples: include_generic
787 $(MAKE) -f Makefile.examples -C $(GEN_ROOT)/examples/
788@@ -607,7 +607,7 @@ $(FIREBIRD_MSG): $(BUILD_FILE) msg.timestamp
789 $(CHMOD_6) $@
790
791 $(BUILD_FILE): $(BUILD_Objects) $(COMMON_LIB)
792- $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
793+ $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS)
794
795 gbak_files: $(GBAK_FILES)
796
797diff --git a/builds/posix/Makefile.in.examples b/builds/posix/Makefile.in.examples
798index bf21355..cf6e2ce 100644
799--- a/builds/posix/Makefile.in.examples
800+++ b/builds/posix/Makefile.in.examples
801@@ -60,6 +60,7 @@ export PATH
802 GPRE_FLAGS= -m -z -n
803
804 LIB_LINK_RPATH = $(call LIB_PLATFORM_RPATH,$(if $(subst intl,,$(1)),$(LIB),$(LIB)/../intl))
805+LINK_DARWIN_RPATH = -Wl,-rpath,@loader_path/../$(TARGET)/firebird
806 LIB_LINK_MAPFILE =
807
808 EXAMPLES_DEST= $(GEN_ROOT)/examples
809diff --git a/builds/posix/make.defaults b/builds/posix/make.defaults
810index e24079e..5e4f598 100755
811--- a/builds/posix/make.defaults
812+++ b/builds/posix/make.defaults
813@@ -315,7 +315,7 @@ LIB_LINK_SONAME= -Wl,-soname,$(1)
814 LIB_LINK_MAPFILE= -Wl,--version-script,$(1)
815 FIREBIRD_LIBRARY_LINK= -L$(LIB) -lfbclient $(MATHLIB)
816
817-EXE_LINK_OPTIONS= $(LDFLAGS) $(THR_FLAGS) $(UNDEF_FLAGS) $(LIB_PATH_OPTS) $(LINK_EMPTY_SYMBOLS)
818+EXE_LINK_OPTIONS= $(LDFLAGS) $(THR_FLAGS) $(UNDEF_FLAGS) $(LIB_PATH_OPTS) $(call LINK_DARWIN_RPATH,..) $(LINK_EMPTY_SYMBOLS)
819 LIB_LINK_OPTIONS= $(LDFLAGS) $(THR_FLAGS) -shared
820
821 FB_DAEMON = $(BIN)/firebird$(EXEC_EXT)
822diff --git a/builds/posix/prefix.darwin_i386 b/builds/posix/prefix.darwin_i386
823index b07d2fe..60d05cb 100644
824--- a/builds/posix/prefix.darwin_i386
825+++ b/builds/posix/prefix.darwin_i386
826@@ -27,17 +27,14 @@
827 # configure using --with-builtin-tommath
828 # or add the relevant -I, -L for an installed version of libtommath
829
830-DYLD_LIBRARY_PATH=$(HOME)/icu54/icu/source/lib
831-export DYLD_LIBRARY_PATH
832-
833 MACOSX_DEPLOYMENT_TARGET=10.9
834 export MACOSX_DEPLOYMENT_TARGET
835
836 PROD_FLAGS=-DDARWIN -pipe -O2 -MMD -fPIC -fno-common -arch i386 -mmacosx-version-min=10.9
837 DEV_FLAGS=-ggdb -DDARWIN -pipe -MMD -fPIC -fno-common -Wall -arch i386 -mmacosx-version-min=10.9 -Wno-non-virtual-dtor
838-CXXFLAGS:=$(CXXFLAGS) -fvisibility-inlines-hidden -fvisibility=hidden -msse4
839+CXXFLAGS:=$(CXXFLAGS) -fvisibility-inlines-hidden -fvisibility=hidden -msse4
840
841-EXE_LINK_OPTIONS:=-m32
842+EXE_LINK_OPTIONS+=-m32
843 LD_FLAGS+=-m32 -arch i386
844 LINK_LIBS+=-liconv
845 MATHLIB=$(ROOT)/extern/libtommath/.libs/libtommath.a
846diff --git a/builds/posix/prefix.darwin_powerpc b/builds/posix/prefix.darwin_powerpc
847index f8816c6..c56b5fe 100644
848--- a/builds/posix/prefix.darwin_powerpc
849+++ b/builds/posix/prefix.darwin_powerpc
850@@ -17,9 +17,6 @@
851 # Start of file prefix.darwin: $(VERSION) @PLATFORM@
852 # 2 Oct 2002, Nickolay Samofatov - Major Cleanup
853
854-DYLD_LIBRARY_PATH=$(FIREBIRD)/lib
855-export DYLD_LIBRARY_PATH
856-
857 MACOSX_DEPLOYMENT_TARGET=10.2
858 export MACOSX_DEPLOYMENT_TARGET
859
860@@ -27,6 +24,4 @@ PROD_FLAGS=-DDARWIN -pipe -p -MMD -fPIC -fno-common -arch ppc -mmacosx-version-m
861 DEV_FLAGS=-ggdb -DDARWIN -pipe -p -MMD -fPIC -fno-common -Wall -arch ppc -mmacosx-version-min=10.2 -Wno-non-virtual-dtor
862 CXXFLAGS:=$(CXXFLAGS) -fvisibility-inlines-hidden -fvisibility=hidden -fno-weak
863
864-EXE_LINK_OPTIONS:=
865-
866 include $(ROOT)/gen/darwin.defaults
867diff --git a/builds/posix/prefix.darwin_ppc64 b/builds/posix/prefix.darwin_ppc64
868index 9fbc89d..a33ed45 100644
869--- a/builds/posix/prefix.darwin_ppc64
870+++ b/builds/posix/prefix.darwin_ppc64
871@@ -18,7 +18,7 @@
872 # 2 Oct 2002, Nickolay Samofatov - Major Cleanup
873
874 # To use this file to build 64bit version of Firebird for MacOS 10.5 (Leopard)
875-# Can only be built on MacOSX 10.5 (Leopard) due to lack of 64bit support in
876+# Can only be built on MacOSX 10.5 (Leopard) due to lack of 64bit support in
877 # Carbon in previous versions of MacOSX
878 # 1. edit configure.in so that MAKEFILE_PREFIX=darwin_ppc64
879 # 2. uncomment the CPU_TYPE
880@@ -29,9 +29,6 @@
881 # 6. export LDFLAGS='-arch ppc_64'
882 # 7. export MACOSX_DEPLOYMENT_TARGET=10.5
883
884-DYLD_LIBRARY_PATH=$(FIREBIRD)/lib
885-export DYLD_LIBRARY_PATH
886-
887 MACOSX_DEPLOYMENT_TARGET=10.5
888 export MACOSX_DEPLOYMENT_TARGET
889
890@@ -39,7 +36,7 @@ PROD_FLAGS=-O3 -DDARWIN -pipe -p -MMD -fPIC -fno-common -mmacosx-version-min=10.
891 DEV_FLAGS=-ggdb -DDARWIN -pipe -p -MMD -fPIC -fno-common -Wall -mmacosx-version-min=10.5 -Wno-non-virtual-dtor
892 CXXFLAGS:=$(CXXFLAGS) -fvisibility-inlines-hidden -fvisibility=hidden
893
894-EXE_LINK_OPTIONS:=-arch ppc64
895+EXE_LINK_OPTIONS+=-arch ppc64
896 LD_FLAGS+=-arch ppc64
897
898 include $(ROOT)/gen/darwin.defaults
899diff --git a/builds/posix/prefix.darwin_x86_64 b/builds/posix/prefix.darwin_x86_64
900index cea366a..8fe5ea4 100644
901--- a/builds/posix/prefix.darwin_x86_64
902+++ b/builds/posix/prefix.darwin_x86_64
903@@ -43,7 +43,6 @@ PROD_FLAGS=-DDARWIN -pipe -O2 -MMD -fPIC -fno-common -mmacosx-version-min=10.9
904 DEV_FLAGS=-ggdb -DDARWIN -pipe -MMD -fPIC -fno-omit-frame-pointer -fno-common -Wall -fno-optimize-sibling-calls -mmacosx-version-min=10.9 -Wno-non-virtual-dtor
905 CXXFLAGS:=$(CXXFLAGS) -fvisibility-inlines-hidden -fvisibility=hidden -stdlib=libc++ -msse4
906
907-EXE_LINK_OPTIONS:=
908 UNDEF_PLATFORM=
909
910 LINK_LIBS+=-liconv
911diff --git a/builds/win32/msvc10/empbuild.vcxproj b/builds/win32/msvc10/empbuild.vcxproj
912index fe18fa4..4bf14d8 100644
913--- a/builds/win32/msvc10/empbuild.vcxproj
914+++ b/builds/win32/msvc10/empbuild.vcxproj
915@@ -154,8 +154,9 @@
916 </ResourceCompile>
917 <Link>
918 <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
919- <AdditionalDependencies>odbc32.lib;odbccp32.lib;fbclient.lib;%(AdditionalDependencies)</AdditionalDependencies>
920- <AdditionalLibraryDirectories>..\..\..\temp\$(Platform)\$(Configuration)\fbclient;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
921+ <AdditionalDependencies>odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
922+ <AdditionalLibraryDirectories>
923+ </AdditionalLibraryDirectories>
924 <SubSystem>Console</SubSystem>
925 <ProfileGuidedDatabase>
926 </ProfileGuidedDatabase>
927@@ -178,8 +179,9 @@
928 <Culture>0x0c0a</Culture>
929 </ResourceCompile>
930 <Link>
931- <AdditionalDependencies>odbc32.lib;odbccp32.lib;fbclient.lib;%(AdditionalDependencies)</AdditionalDependencies>
932- <AdditionalLibraryDirectories>..\..\..\temp\$(Platform)\$(Configuration)\fbclient;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
933+ <AdditionalDependencies>odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
934+ <AdditionalLibraryDirectories>
935+ </AdditionalLibraryDirectories>
936 <SubSystem>Console</SubSystem>
937 <ProfileGuidedDatabase>
938 </ProfileGuidedDatabase>
939diff --git a/builds/win32/msvc12/empbuild.vcxproj b/builds/win32/msvc12/empbuild.vcxproj
940index 893b48f..b52c463 100644
941--- a/builds/win32/msvc12/empbuild.vcxproj
942+++ b/builds/win32/msvc12/empbuild.vcxproj
943@@ -158,8 +158,9 @@
944 </ResourceCompile>
945 <Link>
946 <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
947- <AdditionalDependencies>odbc32.lib;odbccp32.lib;fbclient.lib;%(AdditionalDependencies)</AdditionalDependencies>
948- <AdditionalLibraryDirectories>..\..\..\temp\$(Platform)\$(Configuration)\fbclient;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
949+ <AdditionalDependencies>odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
950+ <AdditionalLibraryDirectories>
951+ </AdditionalLibraryDirectories>
952 <SubSystem>Console</SubSystem>
953 <ProfileGuidedDatabase>
954 </ProfileGuidedDatabase>
955@@ -182,8 +183,9 @@
956 <Culture>0x0c0a</Culture>
957 </ResourceCompile>
958 <Link>
959- <AdditionalDependencies>odbc32.lib;odbccp32.lib;fbclient.lib;%(AdditionalDependencies)</AdditionalDependencies>
960- <AdditionalLibraryDirectories>..\..\..\temp\$(Platform)\$(Configuration)\fbclient;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
961+ <AdditionalDependencies>odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
962+ <AdditionalLibraryDirectories>
963+ </AdditionalLibraryDirectories>
964 <SubSystem>Console</SubSystem>
965 <ProfileGuidedDatabase>
966 </ProfileGuidedDatabase>
967diff --git a/builds/win32/msvc14/empbuild.vcxproj b/builds/win32/msvc14/empbuild.vcxproj
968index 862a256..61630c9 100644
969--- a/builds/win32/msvc14/empbuild.vcxproj
970+++ b/builds/win32/msvc14/empbuild.vcxproj
971@@ -158,8 +158,9 @@
972 </ResourceCompile>
973 <Link>
974 <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
975- <AdditionalDependencies>odbc32.lib;odbccp32.lib;fbclient.lib;%(AdditionalDependencies)</AdditionalDependencies>
976- <AdditionalLibraryDirectories>..\..\..\temp\$(Platform)\$(Configuration)\fbclient;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
977+ <AdditionalDependencies>odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
978+ <AdditionalLibraryDirectories>
979+ </AdditionalLibraryDirectories>
980 <SubSystem>Console</SubSystem>
981 <ProfileGuidedDatabase>
982 </ProfileGuidedDatabase>
983@@ -182,8 +183,9 @@
984 <Culture>0x0c0a</Culture>
985 </ResourceCompile>
986 <Link>
987- <AdditionalDependencies>odbc32.lib;odbccp32.lib;fbclient.lib;%(AdditionalDependencies)</AdditionalDependencies>
988- <AdditionalLibraryDirectories>..\..\..\temp\$(Platform)\$(Configuration)\fbclient;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
989+ <AdditionalDependencies>odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
990+ <AdditionalLibraryDirectories>
991+ </AdditionalLibraryDirectories>
992 <SubSystem>Console</SubSystem>
993 <ProfileGuidedDatabase>
994 </ProfileGuidedDatabase>
995diff --git a/configure.ac b/configure.ac
996index 180dd2d..93c3917 100644
997--- a/configure.ac
998+++ b/configure.ac
999@@ -239,7 +239,7 @@ dnl CPU_TYPE=ppc64
1000 STD_EDITLINE=true
1001 ;;
1002
1003- aarch64*-*-linux*)
1004+ aarch64*-*-linux*)
1005 MAKEFILE_PREFIX=linux_arm64
1006 INSTALL_PREFIX=linux
1007 PLATFORM=LINUX
1008@@ -251,7 +251,7 @@ dnl CPU_TYPE=ppc64
1009 libdir=/usr/lib64
1010 ;;
1011
1012- powerpc64le-*-linux*)
1013+ powerpc64le-*-linux*)
1014 MAKEFILE_PREFIX=linux_powerpc64el
1015 INSTALL_PREFIX=linux
1016 PLATFORM=LINUX
1017@@ -263,7 +263,7 @@ dnl CPU_TYPE=ppc64
1018 libdir=/usr/lib64
1019 ;;
1020
1021- powerpc64-*-linux*)
1022+ powerpc64-*-linux*)
1023 MAKEFILE_PREFIX=linux_powerpc64
1024 INSTALL_PREFIX=linux
1025 PLATFORM=LINUX
1026@@ -840,7 +840,7 @@ AC_COMPILE_IFELSE(
1027 dnl check for va_copy() in stdarg.h
1028 AC_COMPILE_IFELSE(
1029 [AC_LANG_PROGRAM([[#include <stdarg.h>
1030- void vafun(const char* fmt, ...) {va_list par, par2; va_start(par, fmt); va_copy(par2, par); va_end(par2); va_end(par);}]],
1031+ void vafun(const char* fmt, ...) {va_list par, par2; va_start(par, fmt); va_copy(par2, par); va_end(par2); va_end(par);}]],
1032 [[return 0;]])],
1033 AC_DEFINE(HAVE_VA_COPY, 1, [Define this if va_copy() is defined in stdarg.h]))
1034
1035@@ -924,15 +924,8 @@ AC_COMPILE_IFELSE(
1036 AC_DEFINE(HAVE_AO_COMPARE_AND_SWAP_FULL, 1, [Define this if AO_compare_and_swap_full() is defined in atomic_ops.h]))
1037
1038 dnl Check for time function
1039-case $host in
1040- *-darwin*)
1041- ac_cv_func_clock_gettime=no
1042- ;;
1043- *)
1044- AC_SEARCH_LIBS(clock_gettime, rt)
1045- AC_CHECK_FUNCS(clock_gettime)
1046- ;;
1047-esac
1048+AC_SEARCH_LIBS(clock_gettime, rt)
1049+AC_CHECK_FUNCS(clock_gettime)
1050
1051 dnl Checks for pthread functions
1052 AC_CHECK_FUNCS(pthread_mutexattr_setprotocol)
1053@@ -959,7 +952,7 @@ AC_MSG_CHECKING(for working sem_init())
1054 AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <semaphore.h>
1055 main () {
1056 sem_t s;
1057- exit(sem_init(&s,0,0));
1058+ return sem_init(&s,0,0);
1059 }
1060 ]])],[AC_DEFINE(WORKING_SEM_INIT,1,[Define this if sem_init() works on the platform])
1061 AC_MSG_RESULT(yes)],[AC_MSG_RESULT(no)
1062@@ -991,7 +984,7 @@ if test "$ac_cv_sys_file_offset_bits" = "no"; then
1063 AC_MSG_CHECKING(for native large file support)
1064 AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <unistd.h>
1065 main () {
1066- exit(!(sizeof(off_t) == 8));
1067+ return !(sizeof(off_t) == 8);
1068 }]])],[ac_cv_sys_file_offset_bits=64; AC_DEFINE(_FILE_OFFSET_BITS,64)
1069 AC_MSG_RESULT(yes)],[AC_MSG_RESULT(no)],[])
1070 fi
1071@@ -1033,7 +1026,7 @@ main () {
1072 char a;
1073 union { long long x; sem_t y; } b;
1074 };
1075- exit((int)&((struct s*)0)->b);
1076+ return (int)&((struct s*)0)->b;
1077 }]])],[ac_cv_c_alignment=$ac_status],[ac_cv_c_alignment=$ac_status],[])
1078 AC_MSG_RESULT($ac_cv_c_alignment)
1079 AC_DEFINE_UNQUOTED(FB_ALIGNMENT, $ac_cv_c_alignment, [Alignment of long])
1080@@ -1044,7 +1037,7 @@ AC_RUN_IFELSE([AC_LANG_SOURCE([[main () {
1081 char a;
1082 double b;
1083 };
1084- exit((int)&((struct s*)0)->b);
1085+ return (int)&((struct s*)0)->b;
1086 }]])],[ac_cv_c_double_align=$ac_status],[ac_cv_c_double_align=$ac_status],[])
1087 AC_MSG_RESULT($ac_cv_c_double_align)
1088 AC_DEFINE_UNQUOTED(FB_DOUBLE_ALIGN, $ac_cv_c_double_align, [Alignment of double])
1089diff --git a/debian/changelog b/debian/changelog
1090index 0fe809d..3f1ab74 100644
1091--- a/debian/changelog
1092+++ b/debian/changelog
1093@@ -1,3 +1,69 @@
1094+firebird3.0 (3.0.11.33637.ds4-2ubuntu1) mantic; urgency=medium
1095+
1096+ * Merge with Debian unstable (LP: #2025754). Remaining changes:
1097+ - Switch architecture to i686 on Ubuntu instead of i486
1098+
1099+ -- Danilo Egea Gondolfo <danilo.egea.gondolfo@canonical.com> Tue, 04 Jul 2023 11:46:03 +0100
1100+
1101+firebird3.0 (3.0.11.33637.ds4-2) unstable; urgency=medium
1102+
1103+ * fix arch-all-only build by overriding only dh_lintian-arch for libib-util
1104+ override mangling.
1105+ Thanks to Ondřej Surý (Closes: #1022579)
1106+
1107+ -- Damyan Ivanov <dmn@debian.org> Mon, 24 Oct 2022 19:36:38 +0000
1108+
1109+firebird3.0 (3.0.11.33637.ds4-1) unstable; urgency=medium
1110+
1111+ * add gbp.conf for DEP-14 git repository layout
1112+ * switch debian/watch to releases published on firebirdsql.org
1113+ the ones on github aren't always accessible (JavaScript)
1114+ * pack-upstream-snapshot: use mk-origtargz for cleaning upstream sources
1115+ single source of truth about what needs to be removed
1116+ * add files to source repackaging exclusion list to match official releases
1117+ when using git snapshots
1118+ * New upstream snapshot 3.0.11.33637.ds4
1119+ Closes: #1021817 -- undistributable source files
1120+ * drop two files from d/copyright that are not present in the source
1121+ * adapt lintian overrides to version 2.115.3
1122+ * bump Standards-Version from 4.6.0 to 4.6.1 (no changes needed)
1123+ * review debian/copyright, move files under right licensing stanza, update
1124+ copyright years, drop additional files with missing/unclear licenses when
1125+ repackaging
1126+
1127+ -- Damyan Ivanov <dmn@debian.org> Sun, 23 Oct 2022 18:48:29 +0000
1128+
1129+firebird3.0 (3.0.10.33601.ds4-1) unstable; urgency=medium
1130+
1131+ * New upstream version 3.0.10.33601.ds4
1132+ * update debian/copyright (one new file)
1133+ * rebase no-binary-gbaks.patch to apply to slightly changed upstream
1134+
1135+ -- Damyan Ivanov <dmn@debian.org> Thu, 09 Jun 2022 14:33:54 +0000
1136+
1137+firebird3.0 (3.0.9.33560.ds4-3) unstable; urgency=medium
1138+
1139+ * add missing trailing slash from debian/firebird-image/ entry of
1140+ debian/clean (Closes: #1010876)
1141+ Thanks to John Paul Adrian Glaubitz
1142+
1143+ -- Damyan Ivanov <dmn@debian.org> Thu, 12 May 2022 09:51:55 +0000
1144+
1145+firebird3.0 (3.0.9.33560.ds4-2) unstable; urgency=medium
1146+
1147+ * rules: stop overriding -O3 with -O2 during build
1148+ * apply upstream commit adding Documentation to the systemd service
1149+ * apply upstream commit dropping StdErr=syslog from the service
1150+
1151+ -- Damyan Ivanov <dmn@debian.org> Fri, 15 Apr 2022 06:05:22 +0000
1152+
1153+firebird3.0 (3.0.9.33560.ds4-1) unstable; urgency=medium
1154+
1155+ * New upstream version 3.0.9.33560.ds4
1156+ + refresh/update several patches
1157+
1158+ -- Damyan Ivanov <dmn@debian.org> Mon, 14 Feb 2022 21:09:03 +0000
1159+
1160 firebird3.0 (3.0.8.33535.ds4-1ubuntu4) lunar; urgency=medium
1161
1162 * Rebuild against latest icu
1163diff --git a/debian/clean b/debian/clean
1164index 60cba92..5d8014d 100644
1165--- a/debian/clean
1166+++ b/debian/clean
1167@@ -14,7 +14,7 @@ config.status
1168 config.status
1169 configure
1170 configure
1171-debian/firebird-image
1172+debian/firebird-image/
1173 debian/man/*.1
1174 debian/man/*.8
1175 extern/btyacc/btyacc
1176diff --git a/debian/control b/debian/control
1177index b02323d..e32bb2f 100644
1178--- a/debian/control
1179+++ b/debian/control
1180@@ -19,7 +19,7 @@ Build-Depends:
1181 rename,
1182 zlib1g-dev,
1183 Build-Conflicts: autoconf2.13, automake1.4
1184-Standards-Version: 4.6.0
1185+Standards-Version: 4.6.1
1186 Vcs-Git: https://salsa.debian.org/firebird-team/firebird3.0.git
1187 Vcs-Browser: https://salsa.debian.org/firebird-team/firebird3.0
1188 Homepage: https://firebirdsql.org/
1189diff --git a/debian/copyright b/debian/copyright
1190index 180c4b0..ec89ecd 100644
1191--- a/debian/copyright
1192+++ b/debian/copyright
1193@@ -2,6 +2,12 @@ Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
1194 Upstream-Name: Firebird
1195 Upstream-Contact: https://www.firebirdsql.org/
1196 Files-Excluded:
1197+ .editorconfig
1198+ .gitignore
1199+ */.gitignore
1200+ .github
1201+ .vscode
1202+ appveyor.yml
1203 builds/install/arch-specific/linux/firebird.init.d.suse.in
1204 builds/install/arch-specific/solaris
1205 builds/install/arch-specific/solx86gcc/CS/postinstall.in
1206@@ -20,6 +26,7 @@ Files-Excluded:
1207 doc/README.build.mingw.html
1208 doc/README.build.msvc.html
1209 doc/README.build.posix.html
1210+ doc/README.makefiles
1211 doc/README.plugins.html
1212 doc/README.providers.html
1213 doc/README.SecureRemotePassword.html
1214@@ -39,6 +46,8 @@ Files-Excluded:
1215 src/include/gen/ids.h
1216 src/include/gen/parse.h
1217 src/msgs/templates.sql
1218+ src/utilities/fbcpl
1219+ src/utilities/install/registry.h
1220 Comment:
1221 What is removed from upstream source and why
1222 ============================================
1223@@ -65,8 +74,10 @@ Comment:
1224 they are not needed when building on Debiian.
1225 .
1226 - builds/install/arch-specific/solaris/
1227+ - doc/README.makefiles
1228 - src/msgs/templates.sql
1229 - extern/SfIO/
1230+ - src/utilities/install/registry.h
1231 .
1232 * Generated files without source
1233 .
1234@@ -76,6 +87,11 @@ Comment:
1235 - doc/ReleaseNotes.pdf
1236 - doc/README.SecureRemotePassword.html
1237 .
1238+ * Other generated files and files with possible missing licensing that are
1239+ needed only on Windows
1240+ .
1241+ - src/utilities/fbcpl/*
1242+ .
1243 * Generated files and other cruft.
1244 .
1245 Repackaging is a good opportunity to also remove the following files, which
1246@@ -91,8 +107,17 @@ Comment:
1247 Also, the following files are just cruft and are present in the upstream
1248 tarball by mistake:
1249 - .cvsignore (in several directories)
1250+ .
1251+ These aren't tipicaly present in released tarballs, but are in upstream Git
1252+ and therefore in snapshot tarballs made from the release branch
1253+ .editorconfig
1254+ .gitignore (in several directories)
1255+ .github
1256+ .vscode
1257+ appveyor.yml
1258
1259-Files: debian/*
1260+Files:
1261+ debian/*
1262 Copyright: © 2006, 2007, 2008, 2009, 2010, 2014, 2017, 2018
1263 Damyan Ivanov <dmn@debian.org>
1264 License: other
1265@@ -278,8 +303,6 @@ Files:
1266 src/misc/pascal/Pascal.implementation.pas
1267 src/misc/pascal/Pascal.interface.pas
1268 src/misc/upgrade/recovering_build.txt
1269- src/misc/upgrade/v2.1/metadata_charset_create.sql
1270- src/misc/upgrade/v2.1/metadata_charset_drop.sql
1271 src/misc/upgrade/v2/ib_udf2_params.txt
1272 src/misc/upgrade/v2/ib_udf_params.txt
1273 src/misc/upgrade/v2/security_database.txt
1274@@ -302,23 +325,8 @@ Files:
1275 src/remote/server/os/win32/window_proto.h
1276 src/utilities/CMakeLists.txt
1277 src/utilities/create_db.cpp
1278- src/utilities/fbcpl/ctrlpan.cpp
1279- src/utilities/fbcpl/ctrlpan.h
1280- src/utilities/fbcpl/fbcontrol.clw
1281- src/utilities/fbcpl/fbcontrol.cpp
1282- src/utilities/fbcpl/fbcontrol.def
1283- src/utilities/fbcpl/fbcontrol.h
1284- src/utilities/fbcpl/FBControl.rc
1285- src/utilities/fbcpl/res/fbcontrol.rc2
1286- src/utilities/fbcpl/resource.h
1287- src/utilities/fbcpl/res/server.ico
1288- src/utilities/fbcpl/res/server_stop.ico
1289- src/utilities/fbcpl/stdafx.cpp
1290- src/utilities/fbcpl/stdafx.h
1291 src/utilities/gsec/gsec_proto.h
1292 src/utilities/ntrace/fbtrace.conf
1293- travis.sh
1294- .travis.yml
1295 Copyright: none
1296 License: public-domain
1297 (assumed)
1298@@ -331,7 +339,8 @@ License: public-domain
1299 contains no header, it means that this code is freeware and nobody owns the
1300 appropriate copyrights.
1301
1302-Files: src/common/sha.cpp
1303+Files:
1304+ src/common/sha.cpp
1305 Copyright: none
1306 License: public-domain
1307 NIST Secure Hash Algorithm
1308@@ -340,8 +349,9 @@ License: public-domain
1309 Applied Cryptography by Bruce Schneier
1310 This code is in the public domain
1311
1312-Files: src/common/sha2/sha2.cpp
1313- src/common/sha2/sha2.h
1314+Files:
1315+ src/common/sha2/sha2.cpp
1316+ src/common/sha2/sha2.h
1317 Copyright: 2005, 2007, Olivier Gay <olivier.gay@a3.epfl.ch>
1318 License: BSD-3-clause
1319 Redistribution and use in source and binary forms, with or without
1320@@ -479,6 +489,8 @@ Files:
1321 src/alice/exe_proto.h
1322 src/alice/tdr.cpp
1323 src/alice/tdr_proto.h
1324+ src/auth/SecDbCache.cpp
1325+ src/auth/SecDbCache.h
1326 src/auth/SecurityDatabase/LegacyHash.h
1327 src/auth/SecurityDatabase/LegacyManagement.epp
1328 src/auth/SecurityDatabase/LegacyServer.cpp
1329@@ -511,6 +523,8 @@ Files:
1330 src/common/classes/NoThrowTimeStamp.cpp
1331 src/common/classes/timestamp.cpp
1332 src/common/common.h
1333+ src/common/config/dir_list.cpp
1334+ src/common/config/dir_list.h
1335 src/common/cvt.cpp
1336 src/common/dsc.cpp
1337 src/common/dsc.h
1338@@ -1135,7 +1149,6 @@ Files:
1339 src/utilities/install/install_svc.cpp
1340 src/utilities/install/regis_proto.h
1341 src/utilities/install/registry.cpp
1342- src/utilities/install/registry.h
1343 src/utilities/install/services.cpp
1344 src/utilities/install/servi_proto.h
1345 src/utilities/print_event.cpp
1346@@ -1175,53 +1188,82 @@ Files:
1347 src/yvalve/why_proto.h
1348 src/yvalve/YObjects.h
1349 Copyright:
1350- Inprise Corporation and its predecessors
1351 Adriano dos Santos Fernandes
1352- Alan Barclay
1353+ 2006, Adriano dos Santos Fernandes
1354+ 2008, Alan Barclay <alan@escribe.co.uk>
1355 Alex Peshkoff
1356+ 2003, 2004, Alex Peshkoff
1357+ Alex Peshkov
1358 Alex Peshkov <peshkoff@mail.ru>
1359+ 2009, 2013, 2020, Alex Peshkov
1360+ 2011-2020, Alexander Peshkov
1361 Ann Harrison
1362- Ann W. Harrison
1363- Arno Brinkman
1364+ 2001, Ann Harrison
1365+ 2001, Ann W. Harrison
1366+ 2002, 2003, Arno Brinkman
1367 Bill Oliver
1368 Blas Rodriguez Somoza
1369+ 2003 Blas Rodriguez Somoza
1370+ 2003 BRS
1371+ 1992-1994, 1996, Borland International
1372+ Clare Taylor
1373 Claudio Valderrama
1374 Claudio Valderrama C.
1375+ 2001, Claudio Valderrama
1376 Damyan Ivanov
1377 Dimitry Sibiryakov <aafemt@users.sourceforge.net>
1378 Dmitry Yemanov
1379+ Dmitry Yemanov <yemanov@yandex.ru>
1380+ 2002, 2003, Dmitry Yemanov
1381 Fikret Hasovic
1382 Frank Schlottmann-Gödde
1383- Fred Polizo, Jr.
1384- FSG (Frank Schlottmann-Gödde)
1385+ 2003, Fred Polizo, Jr.
1386+ 2002, FSG (Frank Schlottmann-Gödde)
1387 Gabor Boros
1388+ 1986, Groton Database Systems, Inc.
1389+ Inprise Corporation and its predecessors
1390+ 2000, Inprise Corporation
1391 Ivan Prenosil
1392 Jaroslaw Glowacki <glowacki@plocman.pl>
1393 Jerry Adair
1394 John Bellardo
1395+ 2001, John Bellardo
1396+ John H. Jenkins <John_Jenkins@taligent.com>
1397 Jonas Jasas
1398+ K.D.Chang <a-kchang@microsoft.com>
1399 Karel Brichnac <brichna@atlas.cz>
1400 Konstantin Kuznetsov
1401+ 2002, Leyne
1402 Manuel A. Fernandez Montecelo
1403- Mark O'Donohue skywalker@users.sourceforge.net
1404+ 2018, Manuel A. Fernandez Montecelo <manuel.montezelo@gmail.com>
1405+ Mark O'Donohue <skywalker@users.sourceforge.net>
1406 Michal Bukovjan
1407 Mike Nordell
1408+ 2001, Mike Nordell
1409 Neil McCalden
1410+ 2001, Neil McCalden
1411 Nickolay Samofatov
1412 Nikolay Samofatov
1413+ 2002, 2003, Nickolay Samofatov
1414 patrickgriffin
1415 Patrick J. P. Griffin
1416 Paul Beach
1417+ 2001, 2002, Paul Beach
1418 Paul Reeves
1419 Roman Simakov
1420 Sandor Szollosi <ssani@freemail.hu>
1421 Sean Leyne
1422+ 2001, 2002, Sean Leyne
1423+ 2001, SJL
1424 Slavomir Skopalik
1425 Stephen W. Boyd
1426+ 2006, 2007, Stephen W. Boyd
1427 Steve Boyd
1428 TMN (Mike Nordell)
1429+ 2001, TMN (Mike Nordell)
1430 Toni Martir
1431 Victor Seryodkin
1432+ 2003, Victor Seryodkin
1433 Vlad Horsun
1434 License: IPL-1.0
1435 Comment:
1436@@ -1250,12 +1292,10 @@ Files:
1437 builds/install/posix-common/FirebirdUninstall.sh.in
1438 builds/install/posix-common/install.sh.in
1439 builds/install/posix-common/posixLibrary.sh.in
1440- builds/install/posix-common/registerDatabase.sh.in
1441 builds/posix/empty.vers
1442 builds/posix/fbintl.vers
1443 builds/posix/fbplugin.vers
1444 builds/posix/ib_util.vers
1445- builds/posix/make.rules
1446 builds/posix/udr_plugin.vers
1447 builds/posix/vers.sh.in
1448 builds/win32/defs/plugin.def
1449@@ -1297,8 +1337,6 @@ Files:
1450 src/alice/main/aliceMain.cpp
1451 src/auth/AuthDbg.cpp
1452 src/auth/AuthDbg.h
1453- src/auth/SecDbCache.cpp
1454- src/auth/SecDbCache.h
1455 src/auth/SecureRemotePassword/client/SrpClient.cpp
1456 src/auth/SecureRemotePassword/client/SrpClient.h
1457 src/auth/SecureRemotePassword/manage/SrpManagement.cpp
1458@@ -1401,8 +1439,6 @@ Files:
1459 src/common/config/config_file.cpp
1460 src/common/config/config_file.h
1461 src/common/config/config.h
1462- src/common/config/dir_list.cpp
1463- src/common/config/dir_list.h
1464 src/common/CRC32C.cpp
1465 src/common/CsConvert.h
1466 src/common/cvt.h
1467@@ -1581,6 +1617,7 @@ Files:
1468 src/jrd/SysFunction.h
1469 src/jrd/TempSpace.cpp
1470 src/jrd/TempSpace.h
1471+ src/jrd/ThreadCollect.h
1472 src/jrd/trace/TraceCmdLine.cpp
1473 src/jrd/trace/TraceConfigStorage.cpp
1474 src/jrd/trace/TraceConfigStorage.h
1475@@ -1605,6 +1642,8 @@ Files:
1476 src/misc/smallog.cpp
1477 src/misc/src_bundle.sh
1478 src/misc/upgrade/v2.1/metadata_charset.txt
1479+ src/misc/upgrade/v2.1/metadata_charset_create.sql
1480+ src/misc/upgrade/v2.1/metadata_charset_drop.sql
1481 src/misc/upgrade/v2/ib_udf_upgrade.sql
1482 src/misc/upgrade/v2/security_database.sql
1483 src/misc/upgrade/v3.0/security_database.sql
1484@@ -1616,10 +1655,6 @@ Files:
1485 src/remote/client/BlrFromMessage.h
1486 src/remote/client/interface.h
1487 src/remote/SockAddr.h
1488- src/utilities/fbcpl/fbdialog.cpp
1489- src/utilities/fbcpl/fbdialog.h
1490- src/utilities/fbcpl/fbpanel.cpp
1491- src/utilities/fbcpl/fbpanel.h
1492 src/utilities/fbsvcmgr/fbsvcmgr.cpp
1493 src/utilities/fbtracemgr/traceMgrMain.cpp
1494 src/utilities/gsec/main/gsecMain.cpp
1495@@ -1673,7 +1708,7 @@ Copyright:
1496 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2015, 2017
1497 Alex Peshkov <peshkoff@mail.ru>
1498 2007, 2008, 2009, 2013, 2014, 2016 Alexander Peshkoff <peshkoff@mail.ru>
1499- 2018, 2020 Alexander Peshkoff <peshkoff@mail.ru>
1500+ 2018, 2020, 2022 Alexander Peshkoff <peshkoff@mail.ru>
1501 Bill Oliver <Bill.Oliver@sas.com>
1502 2009 Nikolay Samofatov <skidder@users.sourceforge.net>
1503 2003, 2004 Arno Brinkman
1504@@ -1755,6 +1790,7 @@ Files:
1505 builds/install/arch-specific/netbsd/install.sh.in
1506 builds/install/arch-specific/netbsd/Makefile.in
1507 builds/install/arch-specific/solx86gcc/Makefile.in
1508+ builds/install/posix-common/registerDatabase.sh.in
1509 builds/posix/Makefile.in
1510 builds/posix/Makefile.in.examples
1511 builds/posix/Makefile.in.extern.editline
1512@@ -1813,10 +1849,11 @@ Comment:
1513
1514 Files:
1515 builds/posix/make.defaults
1516+ builds/posix/make.rules
1517 examples/build_unix/Makefile.in.example5
1518 Copyright:
1519 Mark O'Donohue <mark.odonohue@ludwig.edu.au>
1520-License: MPL-1.1-or-GPL-2+
1521+License: MPL-1.1 or GPL-2+
1522 The contents of this file are subject to the Mozilla Public License Version
1523 1.1 (the "License"); you may not use this file except in compliance with the
1524 License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
1525@@ -1872,7 +1909,8 @@ License: bsd-like
1526 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
1527 SUCH DAMAGE.
1528
1529-Files: acx_pthread.m4
1530+Files:
1531+ acx_pthread.m4
1532 Copyright: © 2007 Steven G. Johnson <stevenj@alum.mit.edu>
1533 License: GPL-3+ with autoconf exception
1534 Available from the GNU Autoconf Macro Archive
1535@@ -1909,7 +1947,8 @@ License: GPL-3+ with autoconf exception
1536 The full text of GNU General Public License version 3 can be found at
1537 /usr/share/common-licenses/GPL-3 on every Debian system.
1538
1539-Files: extern/btyacc/*
1540+Files:
1541+ extern/btyacc/*
1542 Copyright: Chris Dodd <chrisd@collins.com>, Siber Systems <vadik@siber.com>
1543 License: public-domain
1544 BTYACC was created by Chris Dodd using ideas from many places and lots of
1545diff --git a/debian/firebird3.0-server.lintian-overrides b/debian/firebird3.0-server.lintian-overrides
1546index 3ff59cb..b5510e7 100644
1547--- a/debian/firebird3.0-server.lintian-overrides
1548+++ b/debian/firebird3.0-server.lintian-overrides
1549@@ -1,6 +1,6 @@
1550 # These templates are used, but via shell variables and therefore lintian can't
1551 # detect the usage
1552-firebird3.0-server: unused-debconf-template shared/firebird/sysdba_password/first_install
1553-firebird3.0-server: unused-debconf-template shared/firebird/sysdba_password/upgrade_reconfigure
1554-firebird3.0-server: unused-debconf-template shared/firebird/server_in_use
1555+firebird3.0-server: unused-debconf-template shared/firebird/sysdba_password/first_install [templates:1]
1556+firebird3.0-server: unused-debconf-template shared/firebird/sysdba_password/upgrade_reconfigure [templates:178]
1557+firebird3.0-server: unused-debconf-template shared/firebird/server_in_use [templates:360]
1558
1559diff --git a/debian/gbp.conf b/debian/gbp.conf
1560new file mode 100644
1561index 0000000..47f4e0f
1562--- /dev/null
1563+++ b/debian/gbp.conf
1564@@ -0,0 +1,3 @@
1565+[DEFAULT]
1566+upstream-branch=upstream/latest
1567+debian-branch=debian/unstable
1568diff --git a/debian/libib-util.lintian-overrides b/debian/libib-util.lintian-overrides
1569index b862d50..739c62a 100644
1570--- a/debian/libib-util.lintian-overrides
1571+++ b/debian/libib-util.lintian-overrides
1572@@ -14,4 +14,4 @@
1573 libib-util: shlib-without-versioned-soname usr/lib/*/libib_util.so libib_util.so
1574
1575 # this is not a dev package
1576-libib-util: dev-pkg-without-shlib-symlink usr/lib/*/libib_util.so usr/lib/*/libib_util.so
1577+libib-util: lacks-unversioned-link-to-shared-library example: usr/lib/TRIPLET/libib_util.so [usr/lib/TRIPLET/libib_util.so]
1578diff --git a/debian/pack-upstream-snapshot.sh b/debian/pack-upstream-snapshot.sh
1579index e256284..5a17636 100644
1580--- a/debian/pack-upstream-snapshot.sh
1581+++ b/debian/pack-upstream-snapshot.sh
1582@@ -34,7 +34,8 @@ VER=$(upstream_ver PRODUCT_VER_STRING)
1583 echo "Version is $VER"
1584
1585 TAR="firebird3.0-$VER"
1586+DS=$(perl -F, -anwE'for (@F) { say($_), exit if s/^repacksuffix=([^"]+).*/$1/ }' debian/watch)
1587
1588-git archive --format=tar "--prefix=$TAR/" "$HEAD" | gzip -9 -n > "../$TAR.tar.gz"
1589+git archive --format=tar "--prefix=$TAR/" "$HEAD" | pigz -9 -n > "../$TAR.tar.gz"
1590
1591-sh debian/repack.sh --upstream-version "$VER" "../$TAR.tar.gz"
1592+mk-origtargz --force-repack --repack-suffix="$DS" --compression=xz --version "$VER" "../$TAR.tar.gz"
1593diff --git a/debian/patches/deb/no-suse.init.patch b/debian/patches/deb/no-suse.init.patch
1594index e7c9738..2793ab9 100644
1595--- a/debian/patches/deb/no-suse.init.patch
1596+++ b/debian/patches/deb/no-suse.init.patch
1597@@ -6,7 +6,7 @@ Forwarded: no
1598
1599 --- a/configure.ac
1600 +++ b/configure.ac
1601-@@ -1251,7 +1251,6 @@ case "$PLATFORM" in
1602+@@ -1244,7 +1244,6 @@ case "$PLATFORM" in
1603 gen/install/misc/firebird.xinetd:builds/install/arch-specific/linux/firebird.xinetd.in
1604 gen/install/misc/firebird.init.d.generic:builds/install/arch-specific/linux/firebird.init.d.generic.in
1605 gen/install/misc/firebird.init.d.mandrake:builds/install/arch-specific/linux/firebird.init.d.mandrake.in
1606diff --git a/debian/patches/no-binary-gbaks.patch b/debian/patches/no-binary-gbaks.patch
1607index accc033..adbe858 100644
1608--- a/debian/patches/no-binary-gbaks.patch
1609+++ b/debian/patches/no-binary-gbaks.patch
1610@@ -26,7 +26,7 @@
1611 - $(CHMOD) 0444 $@
1612 -
1613 -help.fdb: $(BLD_ROOT)/misc/help.gbak
1614-- $(RUN_GBAK) -MODE read_only -R $< $@
1615+- $(RUN_GBAK) -MODE read_only -replace $< $@
1616 - $(CHMOD) 0444 $@
1617 -
1618 $(SECURITY_FDB): security.fdb
1619@@ -52,7 +52,7 @@
1620 -qli: $(QLI)
1621 -
1622 -$(QLI): $(QLI_Objects) $(COMMON_LIB)
1623-- $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS) $(call LINK_DARWIN_RPATH,..)
1624+- $(EXE_LINK) $(EXE_LINK_OPTIONS) $^ -o $@ $(FIREBIRD_LIBRARY_LINK) $(LINK_LIBS)
1625 -
1626 examples: include_generic
1627 $(MAKE) -f Makefile.examples -C $(GEN_ROOT)/examples/
1628diff --git a/debian/patches/out/cross-configure.patch b/debian/patches/out/cross-configure.patch
1629index 9910802..12f862a 100644
1630--- a/debian/patches/out/cross-configure.patch
1631+++ b/debian/patches/out/cross-configure.patch
1632@@ -45,7 +45,7 @@ Subject: improve cross buildability
1633 ;;
1634 esac
1635
1636-@@ -975,7 +979,8 @@ AC_RUN_IFELSE([AC_LANG_SOURCE([[#include
1637+@@ -968,7 +972,8 @@ AC_RUN_IFELSE([AC_LANG_SOURCE([[#include
1638 }
1639 ]])],[AC_DEFINE(WORKING_SEM_INIT,1,[Define this if sem_init() works on the platform])
1640 AC_MSG_RESULT(yes)],[AC_MSG_RESULT(no)
1641@@ -55,14 +55,14 @@ Subject: improve cross buildability
1642 fi
1643 fi
1644
1645-@@ -1000,12 +1005,10 @@ AC_TYPE_SIZE_T
1646+@@ -993,12 +998,10 @@ AC_TYPE_SIZE_T
1647 AC_TYPE_UID_T
1648 AC_SYS_LARGEFILE
1649 if test "$ac_cv_sys_file_offset_bits" = "no"; then
1650 - AC_MSG_CHECKING(for native large file support)
1651 - AC_RUN_IFELSE([AC_LANG_SOURCE([[#include <unistd.h>
1652 - main () {
1653-- exit(!(sizeof(off_t) == 8));
1654+- return !(sizeof(off_t) == 8);
1655 - }]])],[ac_cv_sys_file_offset_bits=64; AC_DEFINE(_FILE_OFFSET_BITS,64)
1656 - AC_MSG_RESULT(yes)],[AC_MSG_RESULT(no)],[])
1657 + AC_CHECK_SIZEOF([off_t],[],[#include <unistd.h>])
1658@@ -72,7 +72,7 @@ Subject: improve cross buildability
1659 fi
1660
1661 AC_CHECK_SIZEOF(void *)
1662-@@ -1038,27 +1041,17 @@ AC_CHECK_MEMBER([struct dirent.d_type],
1663+@@ -1031,27 +1034,17 @@ AC_CHECK_MEMBER([struct dirent.d_type],
1664
1665 dnl EKU: try to determine the alignment of long and double
1666 dnl replaces FB_ALIGNMENT and FB_DOUBLE_ALIGN in src/jrd/common.h
1667@@ -83,7 +83,7 @@ Subject: improve cross buildability
1668 - char a;
1669 - union { long long x; sem_t y; } b;
1670 - };
1671-- exit((int)&((struct s*)0)->b);
1672+- return (int)&((struct s*)0)->b;
1673 -}]])],[ac_cv_c_alignment=$ac_status],[ac_cv_c_alignment=$ac_status],[])
1674 -AC_MSG_RESULT($ac_cv_c_alignment)
1675 +AC_CHECK_ALIGNOF([long long])
1676@@ -101,7 +101,7 @@ Subject: improve cross buildability
1677 - char a;
1678 - double b;
1679 - };
1680-- exit((int)&((struct s*)0)->b);
1681+- return (int)&((struct s*)0)->b;
1682 -}]])],[ac_cv_c_double_align=$ac_status],[ac_cv_c_double_align=$ac_status],[])
1683 -AC_MSG_RESULT($ac_cv_c_double_align)
1684 +AC_CHECK_ALIGNOF([double])
1685diff --git a/debian/patches/out/hurd-maxpathlen.patch b/debian/patches/out/hurd-maxpathlen.patch
1686index 01ac8db..e9520aa 100644
1687--- a/debian/patches/out/hurd-maxpathlen.patch
1688+++ b/debian/patches/out/hurd-maxpathlen.patch
1689@@ -18,7 +18,7 @@ Author: Damyan Ivanov
1690 #if defined AIX || defined AIX_PPC || defined __sun
1691 --- a/src/common/common.h
1692 +++ b/src/common/common.h
1693-@@ -539,14 +539,6 @@ extern "C" int remove(const char* path);
1694+@@ -537,14 +537,6 @@ extern "C" int remove(const char* path);
1695 #define API_ROUTINE_VARARG __cdecl
1696 #define CLIB_ROUTINE __cdecl
1697
1698@@ -33,7 +33,7 @@ Author: Damyan Ivanov
1699 #define ERRNO GetLastError()
1700 #define INET_ERRNO WSAGetLastError()
1701 #define H_ERRNO WSAGetLastError()
1702-@@ -559,6 +551,15 @@ extern "C" int remove(const char* path);
1703+@@ -557,6 +549,15 @@ extern "C" int remove(const char* path);
1704 #endif /* WIN_NT */
1705
1706
1707diff --git a/debian/patches/out/obsolete-syslogd.target.patch b/debian/patches/out/obsolete-syslogd.target.patch
1708index a08276c..606526f 100644
1709--- a/debian/patches/out/obsolete-syslogd.target.patch
1710+++ b/debian/patches/out/obsolete-syslogd.target.patch
1711@@ -10,5 +10,5 @@ Author: Damyan Ivanov <dmn@debian.org>
1712 -After=syslog.target network.target
1713 +After=network.target
1714 Conflicts=firebird-classic.socket
1715+ Documentation=https://firebirdsql.org/en/firebird-rdbms/
1716
1717- [Service]
1718diff --git a/debian/patches/series b/debian/patches/series
1719index bb7b879..6821e85 100644
1720--- a/debian/patches/series
1721+++ b/debian/patches/series
1722@@ -1,6 +1,8 @@
1723 upstream/riscv64-support.patch
1724+upstream/systemd-service-documentation.patch
1725 out/riscv64-prefix.patch
1726 out/obsolete-syslogd.target.patch
1727+upstream/systemd-service-stderr.patch
1728 out/honour-buildflags.patch
1729 out/c++-std.patch
1730 out/kfreebsd-sse4.patch
1731diff --git a/debian/patches/upstream/riscv64-support.patch b/debian/patches/upstream/riscv64-support.patch
1732index 0da07dc..a93bb99 100644
1733--- a/debian/patches/upstream/riscv64-support.patch
1734+++ b/debian/patches/upstream/riscv64-support.patch
1735@@ -22,7 +22,7 @@ Bug: http://tracker.firebirdsql.org/browse/CORE-5779
1736 + libdir=/usr/lib64
1737 + ;;
1738 +
1739- powerpc64le-*-linux*)
1740+ powerpc64le-*-linux*)
1741 MAKEFILE_PREFIX=linux_powerpc64el
1742 INSTALL_PREFIX=linux
1743 --- a/src/common/classes/DbImplementation.cpp
1744diff --git a/debian/patches/upstream/systemd-service-documentation.patch b/debian/patches/upstream/systemd-service-documentation.patch
1745new file mode 100644
1746index 0000000..b7d9041
1747--- /dev/null
1748+++ b/debian/patches/upstream/systemd-service-documentation.patch
1749@@ -0,0 +1,15 @@
1750+Description: add Documentation key to the systemd service
1751+ Adapted from upstream commit 70bbc0e7a54c796d60164e85664c4d26f547dfb4
1752+Author: Damyan Ivanov <dmn@debian.org>
1753+Forwarded: yes
1754+
1755+--- a/builds/install/arch-specific/linux/firebird-superserver.service.in
1756++++ b/builds/install/arch-specific/linux/firebird-superserver.service.in
1757+@@ -2,6 +2,7 @@
1758+ Description=Firebird Database Server ( SuperServer )
1759+ After=syslog.target network.target
1760+ Conflicts=firebird-classic.socket
1761++Documentation=https://firebirdsql.org/en/firebird-rdbms/
1762+
1763+ [Service]
1764+ User=firebird
1765diff --git a/debian/patches/upstream/systemd-service-stderr.patch b/debian/patches/upstream/systemd-service-stderr.patch
1766new file mode 100644
1767index 0000000..b14a560
1768--- /dev/null
1769+++ b/debian/patches/upstream/systemd-service-stderr.patch
1770@@ -0,0 +1,15 @@
1771+Description: drop StandardError=syslog setting
1772+ Taken from upstream commit cdf8410db5b8bd264f6621867d0f319053b489a0
1773+Author: Damyan Ivanov <dmn@debian.org>
1774+Forwarded: yes
1775+
1776+--- a/builds/install/arch-specific/linux/firebird-superserver.service.in
1777++++ b/builds/install/arch-specific/linux/firebird-superserver.service.in
1778+@@ -9,7 +9,6 @@ User=firebird
1779+ Group=firebird
1780+ Type=forking
1781+ ExecStart=@FB_SBINDIR@/fbguard -daemon -forever
1782+-StandardError=syslog
1783+
1784+ [Install]
1785+ WantedBy=multi-user.target
1786diff --git a/debian/prune-upstream-dfsg.lst b/debian/prune-upstream-dfsg.lst
1787deleted file mode 100644
1788index 00f79af..0000000
1789--- a/debian/prune-upstream-dfsg.lst
1790+++ /dev/null
1791@@ -1,19 +0,0 @@
1792-builds/install/arch-specific/linux/firebird.init.d.suse.in
1793-builds/install/arch-specific/solaris
1794-builds/install/arch-specific/solx86gcc/CS/postinstall.in
1795-builds/install/arch-specific/solx86gcc/CS/postremove.in
1796-builds/install/arch-specific/solx86gcc/CS/preinstall.in
1797-doc/README.build.mingw.html
1798-doc/README.build.msvc.html
1799-doc/README.build.posix.html
1800-doc/README.plugins.html
1801-doc/README.providers.html
1802-doc/README.SecureRemotePassword.html
1803-doc/README.wire.compression.html
1804-doc/Using_OO_API.html
1805-doc/sql.extensions/README.mapping.html
1806-extern/SfIO
1807-extern/zlib
1808-src/include/firebird/IdlFbInterfaces.h
1809-src/include/gen/autoconfig.h.in
1810-src/msgs/templates.sql
1811diff --git a/debian/repack.sh b/debian/repack.sh
1812deleted file mode 100644
1813index 7e9a136..0000000
1814--- a/debian/repack.sh
1815+++ /dev/null
1816@@ -1,128 +0,0 @@
1817-#!/bin/sh
1818-#
1819-# Repack upstream source converting from bz2 to gz and
1820-# removing some debian-supplied libraries and generated
1821-# files in the process
1822-#
1823-# To be called via debian/watch (uscan or uscan --force)
1824-# or
1825-# sh debian/repack.sh --upstream-version VER FILE
1826-
1827-set -e
1828-set -u
1829-
1830-usage() {
1831- cat <<EOF >& 2
1832-Usage: $0 --upstream-version VER FILE
1833-
1834- or
1835-
1836- uscan [--force]
1837-EOF
1838-}
1839-
1840-[ "${1:-}" = "--upstream-version" ] \
1841- && [ -n "${2:-}" ] \
1842- && [ -n "${3:-}" ] \
1843- && [ -z "${4:-}" ] \
1844- || usage
1845-
1846-TMPDIR=`mktemp -d -p .`
1847-
1848-trap "rm -rf $TMPDIR" INT QUIT 0
1849-
1850-VER="$2"
1851-DEB_VER="${VER}.ds4"
1852-UP_VER="${VER}"
1853-UPSTREAM_TAR="$3"
1854-UPSTREAM_DIR=Firebird-${UP_VER}
1855-ORIG="../firebird3.0_${DEB_VER}.orig.tar.xz"
1856-ORIG_DIR="firebird3.0-${DEB_VER}.orig"
1857-
1858-if [ -e "$ORIG" ]; then
1859- echo "$ORIG already exists. Aborting."
1860- exit 1
1861-fi
1862-
1863-echo -n "Expanding upstream source tree..."
1864-if [ "$UPSTREAM_TAR" != "${UPSTREAM_TAR%.bz2}" ]; then
1865- tar xjf $UPSTREAM_TAR -C $TMPDIR
1866-elif [ "$UPSTREAM_TAR" != "${UPSTREAM_TAR%.gz}" ]; then
1867- tar xzf $UPSTREAM_TAR -C $TMPDIR
1868-elif [ "$UPSTREAM_TAR" != "${UPSTREAM_TAR%.xz}" ]; then
1869- tar xJf $UPSTREAM_TAR -C $TMPDIR
1870-else
1871- echo "Don't know how to expand $UPSTREAM_TAR" >&2
1872- exit 1
1873-fi
1874-echo " done."
1875-
1876-UPSTREAM_DIR=`ls -1 $TMPDIR`
1877-
1878-# clean sources, needlessly supplied by upstream.
1879-# Debian has packages for them already
1880-# and generated files
1881-echo -n "Cleaning upstream sources from unneeded things..."
1882-for d in icu editline btyacc/test/ftp.y libtommath;
1883-do
1884- echo -n " $d"
1885- rm -r $TMPDIR/$UPSTREAM_DIR/extern/$d
1886-done
1887-echo " done."
1888-
1889-echo -n "Removing bundled boost..."
1890-rm -r $TMPDIR/$UPSTREAM_DIR/src/include/firebird/impl/boost
1891-echo " done."
1892-
1893-echo -n "Removing source-less database backups..."
1894-for f in msg metadata help; do
1895- rm -vf $TMPDIR/$UPSTREAM_DIR/builds/misc/$f.gbak
1896-done
1897-echo " done."
1898-
1899-echo Removing files with no license...
1900-cat debian/prune-upstream-dfsg.lst \
1901-| while read f; do
1902- rm -rv $TMPDIR/$UPSTREAM_DIR/$f
1903-done
1904-
1905-echo -n "Removing generated files..."
1906-for f in \
1907- configure \
1908- builds/make.new/config/config.guess \
1909- builds/make.new/config/config.h.in \
1910- builds/make.new/config/config.sub \
1911- builds/make.new/config/install-sh \
1912- builds/make.new/config/ltmain.sh \
1913- src/include/gen/parse.h \
1914- src/include/gen/autoconfig.auto \
1915- src/include/gen/ids.h \
1916- ;
1917-do
1918- if [ -e $TMPDIR/$UPSTREAM_DIR/$f ]; then
1919- rm $TMPDIR/$UPSTREAM_DIR/$f
1920- echo " $f"
1921- fi
1922-done
1923-echo " done."
1924-
1925-echo -n "Removing source-less generated files..."
1926-for f in doc/Firebird-3-QuickStart.pdf doc/ReleaseNotes.pdf; do
1927- if [ -e $TMPDIR/$UPSTREAM_DIR/$f ]; then
1928- rm $TMPDIR/$UPSTREAM_DIR/$f
1929- echo -n " $f"
1930- fi
1931-done
1932-echo " done."
1933-
1934-echo -n "Removing .gitignore files..."
1935-find $TMPDIR/$UPSTREAM_DIR -name .gitignore -delete
1936-echo " done."
1937-
1938-find "$TMPDIR/$UPSTREAM_DIR" -type d -empty -delete
1939-
1940-mv $TMPDIR/$UPSTREAM_DIR $TMPDIR/$ORIG_DIR
1941-
1942-echo -n Repackaging into ${ORIG} ...
1943-tar c -C $TMPDIR $ORIG_DIR | xz > "$ORIG"
1944-echo " done."
1945diff --git a/debian/rules b/debian/rules
1946index 241962a..9a38ccd 100755
1947--- a/debian/rules
1948+++ b/debian/rules
1949@@ -70,11 +70,12 @@ USFB := /usr/share/firebird/${FB_VER}
1950 VAR := /var/lib/firebird/${FB_VER}
1951 RUN := /run/firebird${FB_VER}
1952
1953-export DEB_BUILD_MAINT_OPTIONS := hardening=+bindnow
1954-export DEB_CXXFLAGS_MAINT_APPEND := -DUCHAR_TYPE=uint16_t -fno-lifetime-dse -fno-strict-aliasing
1955-export DEB_CFLAGS_MAINT_APPEND := -fno-strict-aliasing
1956+DEB_BUILD_MAINT_OPTIONS := hardening=+bindnow
1957+DEB_CXXFLAGS_MAINT_STRIP := -O2
1958+DEB_CXXFLAGS_MAINT_APPEND := -DUCHAR_TYPE=uint16_t -fno-lifetime-dse -fno-strict-aliasing -O3
1959+DEB_CFLAGS_MAINT_STRIP := -O2
1960+DEB_CFLAGS_MAINT_APPEND := -fno-strict-aliasing -O3
1961
1962-DPKG_EXPORT_BUILDFLAGS := 1
1963 include /usr/share/dpkg/buildflags.mk
1964
1965 confflags += --disable-rpath --with-gpre-cobol \
1966@@ -171,6 +172,10 @@ ifeq ($(ICU_VER),)
1967 $(error Unable to determine ICU version)
1968 endif
1969
1970+override_dh_lintian-arch:
1971+ dh_lintian
1972+ sed -i -e "s/TRIPLET/$(shell dpkg-architecture -q DEB_TARGET_MULTIARCH)/g" \
1973+ debian/libib-util/usr/share/lintian/overrides/libib-util
1974 override_dh_installchangelogs:
1975 dh_installchangelogs ChangeLog -p firebird$(FB_VER)-common-doc
1976 override_dh_installdocs:
1977diff --git a/debian/watch b/debian/watch
1978index bc93997..a6e45b0 100644
1979--- a/debian/watch
1980+++ b/debian/watch
1981@@ -4,9 +4,7 @@
1982 # Full-site-with-pattern [Version [Action]]
1983
1984 version=4
1985-#opts="dversionmangle=s/(?:\.ds\d+)$//,uversionmangle=s/-\d+//;s/-(?=\D)/~/g,repacksuffix=.ds4" \
1986-# http://sf.net/firebird/[Ff]irebird-(3\.0\..*).tar.bz2
1987-#opts="dversionmangle=s/(?:\.ds\d+)$//,uversionmangle=s/-\d+//;s/-(?=\D)/~/g,repacksuffix=.ds4" \
1988-# https://firebirdsql.org/en/firebird-3-0/ .*/[Ff]irebird-(3\.0\.\d+(?:\.\d+)?)(?:-0)?@ARCHIVE_EXT@
1989 opts="dversionmangle=s/(?:\.ds\d+)$//,uversionmangle=s/-\d+//;s/-(?=\D)/~/g,repacksuffix=.ds4" \
1990- https://github.com/FirebirdSQL/firebird/releases .*/[Ff]irebird-(3\.0\.\d+(?:\.\d+)?)(?:-0)?@ARCHIVE_EXT@
1991+ https://firebirdsql.org/en/firebird-3-0/ .*/[Ff]irebird-(3\.0\.\d+(?:\.\d+)?)(?:-0)?@ARCHIVE_EXT@
1992+#opts="dversionmangle=s/(?:\.ds\d+)$//,uversionmangle=s/-\d+//;s/-(?=\D)/~/g,repacksuffix=.ds4" \
1993+# https://github.com/FirebirdSQL/firebird/releases .*/[Ff]irebird-(3\.0\.\d+(?:\.\d+)?)(?:-0)?@ARCHIVE_EXT@
1994diff --git a/doc/README.makefiles b/doc/README.makefiles
1995deleted file mode 100644
1996index 2b11836..0000000
1997--- a/doc/README.makefiles
1998+++ /dev/null
1999@@ -1,136 +0,0 @@
2000-PURPOSE : To explain the makefile system in firebird2.
2001-
2002-STATUS: Still a work in progress (both the makefiles, and this document)
2003-
2004-AUTHORS: Mark O'Donohue mark.odonohue@luduwg.edu.au
2005-
2006-COPYRIGHT: All rights retained by authors.
2007- For distribution with Firebird source
2008- (Someone who knows this legal stuff will update it later)
2009-
2010-OVERVIEW
2011-
2012-The new makefiles were created to fit in with autoconf, to place the object
2013-files in seperate directories to the source files and to simplify the build
2014-process.
2015-
2016-It really does rely on using gnu make so that is the best version to use.
2017-
2018-
2019-THE REALLY QUICK INTRO
2020-
2021-For linux this is how I do a compile (classic is only one currently)
2022-
2023-autoconf
2024-./configure
2025-$cd src
2026-$make > make.log 2>&1 ; cat make.log | grep -v warning > make2.log ; vi make2.log
2027-
2028-For an install checkout
2029-
2030-$make install
2031-
2032-it will list your options - but also needs some work.
2033-
2034-
2035-MAKEFILE
2036-
2037-Makefiles are found in builds/posix
2038-
2039-make.rules
2040-make.defaults
2041-make.shared.variables
2042-
2043-prefix.xxx (where xxx = platform)
2044-
2045-In src/make.new there are a number of Makefile.in.xxx files and some make.xxx
2046-
2047-
2048-STRUCTURE OF MAKEFILE.IN.XXX
2049-
2050-
2051-Each Makefile.in.xxx has the following somewhere near the top:
2052-
2053-include make.defaults
2054-include make.platform
2055-include make.rules
2056-include make.shared.variables
2057-
2058-...
2059-...
2060-
2061-
2062-These are:
2063-
2064-make.defaults
2065-
2066-This contains default values for macros that it is likely that the user may
2067-want to override.
2068-
2069-
2070-make.platform
2071-
2072-This file is created from the prefix.xxx where xxx=linux/darwin/freebsd etc.
2073-It provides a spot for the user to override or repalce macros that have been
2074-defined in make.defaults. In addition extra dependancies can be added to
2075-build extra targets.
2076-
2077-
2078-make.rules
2079-
2080-This contains the default rules for compiling the system components. Such as
2081-directory macros CXX etc.
2082-
2083-
2084-make.shared.variables
2085-
2086-This file contains the defintion of macros that are shared across all of the
2087-modules. The only set that are needed are those files that are contained in
2088-the libgds.a/so library since files from many modules contribute to the library.
2089-
2090-
2091-
2092-CREATING OBJECT FILES
2093-
2094-
2095-In the makefiles the object files are of two sorts .o static and .lo
2096-which are suitable for shared libraries. On most systems the source
2097-files need to be compiled twice to create both .o and .lo files. F
2098-Fortunately the program libtool can help work with this.
2099-
2100-The general format of .o file dependancies is:
2101-
2102-SERVER_Sources = server.cpp
2103-SERVER_Objects = $(SERVER_Sources:%.cpp=$(OBJ)/%.o)
2104-
2105-
2106-So the .o files live in $(OBJ) where:
2107-OBJ = $(ROOT)/gen/$ModuleName
2108-
2109-
2110-Each Makefile also specifies an AllObjects and Dependancies macro which
2111-identified all the objects that this Makefile is to create and the name
2112-of the dependency files generated for those objects.
2113-
2114-AllObjects = $(Alice_Objects)
2115-
2116-
2117-FILE DEPENDANCIES
2118-
2119-Include file dependancy information is automatically generated by the gcc
2120-compiler.
2121-
2122-The gcc compiler has a flag -MMD which will generate in addition to the
2123-.o file a .d file which contains the dependancy chain of #includes required
2124-for the program. These are then edited and stored in the $(OBJ) directory and
2125-are included in the bottom line of the makefile with
2126-
2127-Dependencies = $(All_Objects:.o=.d)
2128-
2129-include $(Dependancies)
2130-
2131-PLATFORM SUBDIRS OF JRD
2132-
2133-Please, forget about jrd/os/* in makefiles! Pretend that all files from
2134-there are placed in jrd/ itself. A little trick in make.rules will find
2135-files for your platform automatically.
2136diff --git a/doc/WhatsNew b/doc/WhatsNew
2137index 454f2f1..f50c6f7 100644
2138--- a/doc/WhatsNew
2139+++ b/doc/WhatsNew
2140@@ -1,4 +1,189 @@
2141 **************************
2142+ * v3.0.10
2143+ **************************
2144+
2145+ * Improvement #7194
2146+ Make it possible to avoid fbclient dependency in Pascal programs using firebird.pas
2147+ Contributor(s):
2148+ Alex Peshkov <peshkoff at mail.ru>
2149+
2150+ * Improvement #7161
2151+ Update zlib to 1.2.12
2152+ Contributor(s):
2153+ Vlad Khorsun <hvlad at users.sourceforge.net>
2154+
2155+ * Improvement #7093
2156+ Improve indexed lookup speed of strings when the last keys characters are part of collated contractions
2157+ Contributor(s):
2158+ Adriano dos Santos Fernandes <adrianosf at gmail.com>
2159+
2160+ * Improvement #6872
2161+ Faster execution of indexed STARTING WITH with UNICODE collation
2162+ Contributor(s):
2163+ Adriano dos Santos Fernandes <adrianosf at gmail.com>
2164+
2165+ * Bugfix #7197
2166+ Segfault in Linux CS after successful detach from a database
2167+ Contributor(s):
2168+ Alex Peshkov <peshkoff at mail.ru>
2169+
2170+ * Bugfix #7191
2171+ gstat fails, but return 0 error code with incorrect databases.conf
2172+ Contributor(s):
2173+ Alexey Mochalov <aleksey.mochalov at red-soft.ru>
2174+
2175+ * Bugfix #7184
2176+ gbak output is not being flushed to disk
2177+ Contributor(s):
2178+ Alex Peshkov <peshkoff at mail.ru>
2179+
2180+ * Bugfix #7176
2181+ Incorrect error "Invalid token. Malformed string." with union + blob + non-UTF8 varchar
2182+ Contributor(s):
2183+ Adriano dos Santos Fernandes <adrianosf at gmail.com>
2184+
2185+ * Bugfix #7160
2186+ Missing checkout in trace manager when performing user mapping may cause server hang
2187+ Contributor(s):
2188+ Alex Peshkov <peshkoff at mail.ru>
2189+
2190+ * Bugfix #7158
2191+ Serious issue with SYSDBA user after a Windows install with EnableLegacyClientAuth
2192+ Contributor(s):
2193+ Paul Reeves <preeves at ibphoenix.com>
2194+
2195+ * Bugfix #7147
2196+ Problems with use of big timeout (or no timeout at all) in trace service
2197+ Contributor(s):
2198+ Alex Peshkov <peshkoff at mail.ru>
2199+
2200+ * Bugfix #7141
2201+ Services manager breaks long lines into 1023 bytes portions when using isc_info_svc_line in Service::query()
2202+ Contributor(s):
2203+ Alex Peshkov <peshkoff at mail.ru>
2204+
2205+ * Bugfix #7140
2206+ Wrong select result in case of special sort character
2207+ Contributor(s):
2208+ Adriano dos Santos Fernandes <adrianosf at gmail.com>
2209+
2210+ * Bugfix #7138
2211+ Problems accessing FB4 database, copied from another host
2212+ Contributor(s):
2213+ Alex Peshkov <peshkoff at mail.ru>
2214+
2215+ * Bugfix #7137
2216+ Optimizer regression: bad plan (HASH instead of JOIN) is chosen for some inner joins
2217+ Contributor(s):
2218+ Dmitry Yemanov <dimitr at firebirdsql.org>
2219+
2220+ * Bugfix #7135
2221+ Firebird engine randomly fails when delivering mapping clear to other processes
2222+ Contributor(s):
2223+ Alex Peshkov <peshkoff at mail.ru>
2224+
2225+ * Bugfix #7128
2226+ Incorrect error message with isc_sql_interprete()
2227+ Contributor(s):
2228+ Vlad Khorsun <hvlad at users.sourceforge.net>
2229+
2230+ * Bugfix #7122
2231+ Invalid state of mapping cache after replacement of database
2232+ Contributor(s):
2233+ Alex Peshkov <peshkoff at mail.ru>
2234+
2235+ * Bugfix #7121
2236+ Mapping error when server tries to use mapping rules from database in full shutdown state
2237+ Contributor(s):
2238+ Alex Peshkov <peshkoff at mail.ru>
2239+
2240+ * Bugfix #7106
2241+ Wrong detection of must-be-delimited user names
2242+ Contributor(s):
2243+ Alex Peshkov <peshkoff at mail.ru>
2244+
2245+ * Bugfix #7094
2246+ Incorrect indexed lookup of strings when the last keys characters are part of collated contractions and there is multi-segment insensitive descending index
2247+ Contributor(s):
2248+ Adriano dos Santos Fernandes <adrianosf at gmail.com>
2249+
2250+
2251+ **************************
2252+ * v3.0.9
2253+ **************************
2254+
2255+ * Bugfix #7119
2256+ Database statistics service could not find existing table(s)
2257+ Contributor(s):
2258+ Vlad Khorsun <hvlad at users.sourceforge.net>
2259+
2260+ * Bugfix #7118
2261+ Chained JOIN .. USING across the same column names may be optimized badly
2262+ Contributor(s):
2263+ Dmitry Yemanov <dimitr at firebirdsql.org>
2264+
2265+ * Bugfix #7115
2266+ Server hangs in trace code when it tries to update mapping cache
2267+ Contributor(s):
2268+ Alex Peshkov <peshkoff at mail.ru>
2269+
2270+ * Bugfix #7112
2271+ Avoid unload of plugins in MacOS due to problematic reload of them
2272+ Contributor(s):
2273+ Adriano dos Santos Fernandes <adrianosf at gmail.com>
2274+
2275+ * Bugfix #7109
2276+ Content of DB file can be overwritten with zero characters in some (rare) cases
2277+ Contributor(s):
2278+ Vlad Khorsun <hvlad at users.sourceforge.net>
2279+
2280+ * Bugfix #7103
2281+ FB service hangs and cannot be stopped after several 'DELETE FROM MON$STATEMENTS' being issued in order to stop ES/EDS which waits record for updating
2282+ Contributor(s):
2283+ Vlad Khorsun <hvlad at users.sourceforge.net>
2284+
2285+ * Bugfix #7084
2286+ Creating unique constraints on MacOS fails on larger tables
2287+ Contributor(s):
2288+ Adriano dos Santos Fernandes <adrianosf at gmail.com>
2289+
2290+ * Bugfix #7067
2291+ Deadlock when using not initialized security database
2292+ Contributor(s):
2293+ Alex Peshkov <peshkoff at mail.ru>
2294+
2295+ * Bugfix #7060
2296+ Deadlock when execute test for CORE-4337
2297+ Contributor(s):
2298+ Alex Peshkov <peshkoff at mail.ru>
2299+
2300+ * Bugfix #7057
2301+ Client-side positioned updates work wrongly with scrollable cursors
2302+ Contributor(s):
2303+ Dmitry Yemanov <dimitr at firebirdsql.org>
2304+
2305+ * Bugfix #7056
2306+ Fetching from a scrollable cursor may overwrite user-specified buffer and corrupt memory
2307+ Contributor(s):
2308+ Dmitry Yemanov <dimitr at firebirdsql.org>
2309+
2310+ * Bugfix #7043
2311+ Wrong message when user has no access to /tmp/firebird
2312+ Contributor(s):
2313+ Alex Peshkov <peshkoff at mail.ru>
2314+
2315+ * Bugfix #6966
2316+ Status vector for ES(<EMPTY_STRING>) is unstable if another execute block with correct statement was executed before
2317+ Contributor(s):
2318+ Alex Peshkov <peshkoff at mail.ru>
2319+
2320+ * Bugfix #3357
2321+ Bad execution plan if some stream depends on multiple streams via a function
2322+ Contributor(s):
2323+ Dmitry Yemanov <dimitr at firebirdsql.org>
2324+
2325+
2326+ **************************
2327 * v3.0.8
2328 **************************
2329
2330diff --git a/examples/dbcrypt/CryptKeyHolder.cpp b/examples/dbcrypt/CryptKeyHolder.cpp
2331index 1e92481..f69d2a3 100644
2332--- a/examples/dbcrypt/CryptKeyHolder.cpp
2333+++ b/examples/dbcrypt/CryptKeyHolder.cpp
2334@@ -281,7 +281,7 @@ Factory factory;
2335
2336 } // anonymous namespace
2337
2338-extern "C" void FB_DLL_EXPORT FB_PLUGIN_ENTRY_POINT(IMaster* master)
2339+extern "C" FB_DLL_EXPORT void FB_PLUGIN_ENTRY_POINT(IMaster* master)
2340 {
2341 IPluginManager* pluginManager = master->getPluginManager();
2342
2343diff --git a/examples/dbcrypt/DbCrypt.cpp b/examples/dbcrypt/DbCrypt.cpp
2344index 3a60e0d..2348528 100644
2345--- a/examples/dbcrypt/DbCrypt.cpp
2346+++ b/examples/dbcrypt/DbCrypt.cpp
2347@@ -268,7 +268,7 @@ Factory factory;
2348
2349 } // anonymous namespace
2350
2351-extern "C" void FB_DLL_EXPORT FB_PLUGIN_ENTRY_POINT(IMaster* master)
2352+extern "C" FB_DLL_EXPORT void FB_PLUGIN_ENTRY_POINT(IMaster* master)
2353 {
2354 IPluginManager* pluginManager = master->getPluginManager();
2355
2356diff --git a/examples/interfaces/ifaceExamples.h b/examples/interfaces/ifaceExamples.h
2357index 40b5478..1b55e1e 100644
2358--- a/examples/interfaces/ifaceExamples.h
2359+++ b/examples/interfaces/ifaceExamples.h
2360@@ -38,14 +38,6 @@ typedef int FbSampleAtomic;
2361 #include <ibase.h>
2362 #include <firebird/Interface.h>
2363
2364-#if defined(_WIN32)
2365-#define FB_DLL_EXPORT __declspec(dllexport)
2366-#elif defined(__APPLE__)
2367-#define FB_DLL_EXPORT __attribute__((visibility("default")))
2368-#else
2369-#define FB_DLL_EXPORT
2370-#endif
2371-
2372 using namespace Firebird;
2373
2374 #define SAMPLES_DIALECT SQL_DIALECT_V6
2375diff --git a/src/alice/tdr.cpp b/src/alice/tdr.cpp
2376index 48677ec..80e45df 100644
2377--- a/src/alice/tdr.cpp
2378+++ b/src/alice/tdr.cpp
2379@@ -288,22 +288,22 @@ void TDR_list_limbo(FB_API_HANDLE handle, const TEXT* name, const SINT64 switche
2380
2381 TraNumber id;
2382 tdr* trans;
2383- UCHAR* ptr = buffer;
2384- bool flag = true;
2385
2386- while (flag)
2387+ for (Firebird::ClumpletReader p(Firebird::ClumpletReader::InfoResponse, buffer, sizeof(buffer));
2388+ !p.isEof(); p.moveNext())
2389 {
2390- const USHORT item = *ptr++;
2391- const USHORT length = (USHORT) gds__vax_integer(ptr, 2);
2392- ptr += 2;
2393+ UCHAR item = p.getClumpTag();
2394+ if (item == isc_info_end)
2395+ break;
2396+
2397+ const USHORT length = (USHORT) p.getClumpLength();
2398 switch (item)
2399 {
2400 case isc_info_limbo:
2401- id = isc_portable_integer(ptr, length);
2402+ id = p.getBigInt();
2403 if (switches & (sw_commit | sw_rollback | sw_two_phase | sw_prompt))
2404 {
2405 TDR_reconnect_multiple(handle, id, name, switches);
2406- ptr += length;
2407 break;
2408 }
2409 if (!tdgbl->uSvc->isService())
2410@@ -326,7 +326,6 @@ void TDR_list_limbo(FB_API_HANDLE handle, const TEXT* name, const SINT64 switche
2411 tdgbl->uSvc->putSInt64(isc_spb_single_tra_id_64, id);
2412 else
2413 tdgbl->uSvc->putSLong(isc_spb_single_tra_id, (SLONG) id);
2414- ptr += length;
2415 break;
2416
2417 case isc_info_truncated:
2418@@ -336,10 +335,6 @@ void TDR_list_limbo(FB_API_HANDLE handle, const TEXT* name, const SINT64 switche
2419 // msg 72: More limbo transactions than fit. Try again
2420 // And how it's going to retry with a bigger buffer if the buffer is fixed size?
2421 }
2422- // fall through
2423-
2424- case isc_info_end:
2425- flag = false;
2426 break;
2427
2428 default:
2429diff --git a/src/auth/AuthDbg.cpp b/src/auth/AuthDbg.cpp
2430index 377c9df..e66ad2c 100644
2431--- a/src/auth/AuthDbg.cpp
2432+++ b/src/auth/AuthDbg.cpp
2433@@ -38,7 +38,7 @@
2434 static Firebird::SimpleFactory<Auth::DebugClient> clientFactory;
2435 static Firebird::SimpleFactory<Auth::DebugServer> serverFactory;
2436
2437-extern "C" void FB_PLUGIN_ENTRY_POINT(Firebird::IMaster* master)
2438+extern "C" FB_DLL_EXPORT void FB_PLUGIN_ENTRY_POINT(Firebird::IMaster* master)
2439 {
2440 Firebird::CachedMasterInterface::set(master);
2441
2442diff --git a/src/auth/SecDbCache.h b/src/auth/SecDbCache.h
2443index de500ac..d5d0ff2 100644
2444--- a/src/auth/SecDbCache.h
2445+++ b/src/auth/SecDbCache.h
2446@@ -104,6 +104,16 @@ public:
2447 (*this)->mutex.enter(FB_FUNCTION);
2448 }
2449
2450+ void reset()
2451+ {
2452+ if (hasData())
2453+ {
2454+ (*this)->mutex.leave();
2455+ (*this)->close();
2456+ assign(NULL);
2457+ }
2458+ }
2459+
2460 ~Instance()
2461 {
2462 if (hasData())
2463diff --git a/src/auth/SecureRemotePassword/manage/SrpManagement.cpp b/src/auth/SecureRemotePassword/manage/SrpManagement.cpp
2464index 2d84776..33de81d 100644
2465--- a/src/auth/SecureRemotePassword/manage/SrpManagement.cpp
2466+++ b/src/auth/SecureRemotePassword/manage/SrpManagement.cpp
2467@@ -37,14 +37,6 @@
2468 #include "../auth/SecureRemotePassword/Message.h"
2469 #include "../common/classes/auto.h"
2470
2471-#ifndef FB_EXPORTED
2472-#if defined(DARWIN)
2473-#define FB_EXPORTED __attribute__((visibility("default")))
2474-#else
2475-#define FB_EXPORTED
2476-#endif // OS choice (DARWIN)
2477-#endif // FB_EXPORTED
2478-
2479 namespace {
2480
2481 const unsigned int INIT_KEY = ((~0) - 1);
2482@@ -987,7 +979,7 @@ static Firebird::SimpleFactory<Auth::SrpManagement> factory;
2483
2484 } // namespace Auth
2485
2486-extern "C" void FB_EXPORTED FB_PLUGIN_ENTRY_POINT(Firebird::IMaster* master)
2487+extern "C" FB_DLL_EXPORT void FB_PLUGIN_ENTRY_POINT(Firebird::IMaster* master)
2488 {
2489 Firebird::CachedMasterInterface::set(master);
2490 Firebird::PluginManagerInterfacePtr()->registerPluginFactory(Firebird::IPluginManager::TYPE_AUTH_USER_MANAGEMENT, Auth::RemotePassword::plugName, &Auth::factory);
2491diff --git a/src/auth/SecureRemotePassword/server/SrpServer.cpp b/src/auth/SecureRemotePassword/server/SrpServer.cpp
2492index c572957..fcb86c2 100644
2493--- a/src/auth/SecureRemotePassword/server/SrpServer.cpp
2494+++ b/src/auth/SecureRemotePassword/server/SrpServer.cpp
2495@@ -138,8 +138,11 @@ public:
2496 instances->shutdown();
2497 }
2498
2499- static void forceClean(IProvider* p, const char* secDbName)
2500+ static void forceClean(IProvider* p, CachedSecurityDatabase::Instance& instance)
2501 {
2502+ Firebird::PathName secDbName(instance->secureDbName);
2503+
2504+ instance.reset();
2505 cleanup();
2506
2507 ClumpletWriter dpb(ClumpletReader::dpbList, MAX_DPB_SIZE);
2508@@ -150,13 +153,14 @@ public:
2509 dpb.insertString(isc_dpb_config, ParsedList::getNonLoopbackProviders(secDbName));
2510
2511 Jrd::FbLocalStatus status;
2512- RefPtr<IAttachment> att(REF_NO_INCR, p->attachDatabase(&status, secDbName, dpb.getBufferLength(), dpb.getBuffer()));
2513+ RefPtr<IAttachment> att(REF_NO_INCR,
2514+ p->attachDatabase(&status, secDbName.c_str(), dpb.getBufferLength(), dpb.getBuffer()));
2515 check(&status);
2516
2517 HANDSHAKE_DEBUG(fprintf(stderr, "Srv SRP: gfix-like attach to sec db %s\n", secDbName));
2518 }
2519
2520- SecurityDatabase(const char* secDbName, ICryptKeyCallback* cryptCallback)
2521+ SecurityDatabase(CachedSecurityDatabase::Instance& instance, ICryptKeyCallback* cryptCallback)
2522 : att(NULL), tra(NULL), stmt(NULL)
2523 {
2524 Jrd::FbLocalStatus status;
2525@@ -173,10 +177,10 @@ public:
2526 ClumpletWriter dpb(ClumpletReader::dpbList, MAX_DPB_SIZE);
2527 dpb.insertByte(isc_dpb_sec_attach, TRUE);
2528 dpb.insertString(isc_dpb_user_name, SYSDBA_USER_NAME, fb_strlen(SYSDBA_USER_NAME));
2529- dpb.insertString(isc_dpb_config, ParsedList::getNonLoopbackProviders(secDbName));
2530- att = p->attachDatabase(&status, secDbName, dpb.getBufferLength(), dpb.getBuffer());
2531+ dpb.insertString(isc_dpb_config, ParsedList::getNonLoopbackProviders(instance->secureDbName));
2532+ att = p->attachDatabase(&status, instance->secureDbName, dpb.getBufferLength(), dpb.getBuffer());
2533 check(&status);
2534- HANDSHAKE_DEBUG(fprintf(stderr, "Srv SRP: attached sec db %s\n", secDbName));
2535+ HANDSHAKE_DEBUG(fprintf(stderr, "Srv SRP: attached sec db %s\n", instance->secureDbName));
2536
2537 const UCHAR tpb[] =
2538 {
2539@@ -198,20 +202,20 @@ public:
2540 class Cleanup : public SrvCleanup
2541 {
2542 public:
2543- Cleanup(IProvider* p_p, const char* p_secDbName)
2544- : p(p_p), secDbName(p_secDbName)
2545+ Cleanup(IProvider* p_p, CachedSecurityDatabase::Instance& p_instance)
2546+ : p(p_p), instance(p_instance)
2547 { }
2548
2549 void cleanup()
2550 {
2551- forceClean(p, secDbName);
2552+ forceClean(p, instance);
2553 }
2554
2555 private:
2556 IProvider* p;
2557- const char* secDbName;
2558+ CachedSecurityDatabase::Instance& instance;
2559 };
2560- Cleanup c(p, secDbName);
2561+ Cleanup c(p, instance);
2562
2563 checkStatusVectorForMissingTable(status->getErrors(), &c);
2564 status_exception::raise(&status);
2565@@ -310,7 +314,7 @@ int SrpServer::authenticate(CheckStatusWrapper* status, IServerBlock* sb, IWrite
2566
2567 // Create SecurityDatabase if needed
2568 if (!instance->secDb)
2569- instance->secDb = FB_NEW SecurityDatabase(instance->secureDbName, cryptCallback);
2570+ instance->secDb = FB_NEW SecurityDatabase(instance, cryptCallback);
2571
2572 // Lookup
2573 instance->secDb->lookup(messages.param.getData(), messages.data.getData());
2574diff --git a/src/auth/SecurityDatabase/LegacyManagement.epp b/src/auth/SecurityDatabase/LegacyManagement.epp
2575index 2157bbc..aebddad 100644
2576--- a/src/auth/SecurityDatabase/LegacyManagement.epp
2577+++ b/src/auth/SecurityDatabase/LegacyManagement.epp
2578@@ -763,7 +763,7 @@ int SecurityDatabaseManagement::execute(Firebird::CheckStatusWrapper* st, Firebi
2579 // register plugin
2580 static Firebird::SimpleFactory<Auth::SecurityDatabaseManagement> factory;
2581
2582-extern "C" void FB_PLUGIN_ENTRY_POINT(Firebird::IMaster* master)
2583+extern "C" FB_DLL_EXPORT void FB_PLUGIN_ENTRY_POINT(Firebird::IMaster* master)
2584 {
2585 Firebird::CachedMasterInterface::set(master);
2586 Firebird::PluginManagerInterfacePtr()->registerPluginFactory(
2587diff --git a/src/auth/SecurityDatabase/LegacyServer.cpp b/src/auth/SecurityDatabase/LegacyServer.cpp
2588index d051b33..ff588f6 100644
2589--- a/src/auth/SecurityDatabase/LegacyServer.cpp
2590+++ b/src/auth/SecurityDatabase/LegacyServer.cpp
2591@@ -423,7 +423,7 @@ void registerLegacyServer(IPluginManager* iPlugin)
2592
2593 #ifdef PLUG_MODULE
2594
2595-extern "C" void FB_EXPORTED FB_PLUGIN_ENTRY_POINT(IMaster* master)
2596+extern "C" FB_DLL_EXPORT void FB_PLUGIN_ENTRY_POINT(IMaster* master)
2597 {
2598 CachedMasterInterface::set(master);
2599
2600diff --git a/src/burp/backup.epp b/src/burp/backup.epp
2601index 081987e..06e2730 100644
2602--- a/src/burp/backup.epp
2603+++ b/src/burp/backup.epp
2604@@ -1225,7 +1225,7 @@ void put_asciz( const att_type attribute, const TEXT* string)
2605 // We can't honor operating systems that allow longer file names.
2606 if (len >= MAX_FILE_NAME_SIZE)
2607 {
2608- BURP_print(true, 343, SafeArg() << int(attribute) << "put_asciz()" << (MAX_FILE_NAME_SIZE - 1));
2609+ BURP_print(false, 343, SafeArg() << int(attribute) << "put_asciz()" << (MAX_FILE_NAME_SIZE - 1));
2610 // msg 343: text for attribute @1 is too large in @2, truncating to @3 bytes
2611 len = MAX_FILE_NAME_SIZE - 1;
2612 }
2613diff --git a/src/common/ThreadStart.cpp b/src/common/ThreadStart.cpp
2614index 7580564..18c8615 100644
2615--- a/src/common/ThreadStart.cpp
2616+++ b/src/common/ThreadStart.cpp
2617@@ -118,16 +118,17 @@ Thread Thread::start(ThreadEntryPoint* routine, void* arg, int priority_arg, Han
2618 *
2619 **************************************/
2620 pthread_t thread;
2621+ pthread_t* p_thread = p_handle ? p_handle : &thread;
2622 pthread_attr_t pattr;
2623 int state;
2624
2625 #if defined (LINUX) || defined (FREEBSD)
2626- if (state = pthread_create(&thread, NULL, THREAD_ENTRYPOINT, THREAD_ARG))
2627+ if ((state = pthread_create(p_thread, NULL, THREAD_ENTRYPOINT, THREAD_ARG)))
2628 Firebird::system_call_failed::raise("pthread_create", state);
2629
2630 if (!p_handle)
2631 {
2632- if (state = pthread_detach(thread))
2633+ if ((state = pthread_detach(*p_thread)))
2634 Firebird::system_call_failed::raise("pthread_detach", state);
2635 }
2636 #else
2637@@ -167,7 +168,7 @@ Thread Thread::start(ThreadEntryPoint* routine, void* arg, int priority_arg, Han
2638 if (state)
2639 Firebird::system_call_failed::raise("pthread_attr_setdetachstate", state);
2640 }
2641- state = pthread_create(&thread, &pattr, THREAD_ENTRYPOINT, THREAD_ARG);
2642+ state = pthread_create(p_thread, &pattr, THREAD_ENTRYPOINT, THREAD_ARG);
2643 int state2 = pthread_attr_destroy(&pattr);
2644 if (state)
2645 Firebird::system_call_failed::raise("pthread_create", state);
2646@@ -184,10 +185,9 @@ Thread Thread::start(ThreadEntryPoint* routine, void* arg, int priority_arg, Han
2647 if (state)
2648 Firebird::system_call_failed::raise("pthread_setcanceltype", state);
2649 #endif
2650- *p_handle = thread;
2651 }
2652
2653- return Thread(thread);
2654+ return Thread(*p_thread);
2655 }
2656
2657 void Thread::waitForCompletion(Handle& thread)
2658@@ -210,7 +210,10 @@ void Thread::kill(Handle& thread)
2659 ThreadId Thread::getId()
2660 {
2661 #ifdef USE_LWP_AS_THREAD_ID
2662- return syscall(SYS_gettid);
2663+ static __thread int tid = 0;
2664+ if (!tid)
2665+ tid = syscall(SYS_gettid);
2666+ return tid;
2667 #else
2668 return pthread_self();
2669 #endif
2670@@ -322,14 +325,14 @@ Thread Thread::start(ThreadEntryPoint* routine, void* arg, int priority_arg, Han
2671
2672 SetThreadPriority(handle, priority);
2673
2674- ResumeThread(handle);
2675-
2676 if (p_handle)
2677 {
2678 *p_handle = handle;
2679+ ResumeThread(handle);
2680 }
2681 else
2682 {
2683+ ResumeThread(handle);
2684 CloseHandle(handle);
2685 }
2686
2687diff --git a/src/common/UtilSvc.cpp b/src/common/UtilSvc.cpp
2688index 53fdf26..e5f07e3 100644
2689--- a/src/common/UtilSvc.cpp
2690+++ b/src/common/UtilSvc.cpp
2691@@ -56,6 +56,7 @@ namespace {
2692 void outputFile(FILE* std, const char* text)
2693 {
2694 outputFile(std, text, strlen(text));
2695+ fflush(std);
2696 }
2697 }
2698
2699diff --git a/src/common/classes/ClumpletReader.cpp b/src/common/classes/ClumpletReader.cpp
2700index c00511e..9ba0f89 100644
2701--- a/src/common/classes/ClumpletReader.cpp
2702+++ b/src/common/classes/ClumpletReader.cpp
2703@@ -666,6 +666,20 @@ void ClumpletReader::moveNext()
2704 if (isEof())
2705 return; // no need to raise useless exceptions
2706 FB_SIZE_T cs = getClumpletSize(true, true, true);
2707+
2708+ switch (kind)
2709+ {
2710+ case InfoResponse:
2711+ switch (getClumpTag())
2712+ {
2713+ case isc_info_end:
2714+ case isc_info_truncated:
2715+ // terminating clumplet
2716+ cur_offset = getBufferLength();
2717+ return;
2718+ }
2719+ }
2720+
2721 adjustSpbState();
2722 cur_offset += cs;
2723 }
2724diff --git a/src/common/classes/RefMutex.h b/src/common/classes/RefMutex.h
2725index 6c9c919..1d50ae2 100644
2726--- a/src/common/classes/RefMutex.h
2727+++ b/src/common/classes/RefMutex.h
2728@@ -101,7 +101,7 @@ namespace Firebird
2729 }
2730 };
2731
2732- template <typename Mtx, typename RefCounted = DefaultRefCounted<Mtx> >
2733+ template <typename Mtx, template <typename T> class RefCounted = DefaultRefCounted >
2734 class EnsureUnlock
2735 {
2736 public:
2737@@ -114,14 +114,14 @@ namespace Firebird
2738 #define FB_LOCKED_FROM NULL
2739 #endif
2740 {
2741- RefCounted::addRef(m_mutex);
2742+ RefCounted<Mtx>::addRef(m_mutex);
2743 }
2744
2745 ~EnsureUnlock()
2746 {
2747 while (m_locked)
2748 leave();
2749- RefCounted::release(m_mutex);
2750+ RefCounted<Mtx>::release(m_mutex);
2751 }
2752
2753 void enter()
2754@@ -155,7 +155,7 @@ namespace Firebird
2755 };
2756 #undef FB_LOCKED_FROM
2757
2758- typedef EnsureUnlock<Mutex, NotRefCounted<Mutex> > MutexEnsureUnlock;
2759+ typedef EnsureUnlock<Mutex, NotRefCounted> MutexEnsureUnlock;
2760 typedef EnsureUnlock<RefMutex> RefMutexEnsureUnlock;
2761
2762 } // namespace
2763diff --git a/src/common/classes/XThreadMutex.h b/src/common/classes/XThreadMutex.h
2764index 464b483..b3329c3 100644
2765--- a/src/common/classes/XThreadMutex.h
2766+++ b/src/common/classes/XThreadMutex.h
2767@@ -89,7 +89,7 @@ private:
2768 };
2769
2770 typedef RaiiLockGuard<XThreadMutex> XThreadLockGuard;
2771-typedef EnsureUnlock<XThreadMutex, NotRefCounted<XThreadMutex> > XThreadEnsureUnlock;
2772+typedef EnsureUnlock<XThreadMutex, NotRefCounted> XThreadEnsureUnlock;
2773
2774 }
2775
2776diff --git a/src/common/classes/array.h b/src/common/classes/array.h
2777index b5b036c..dba6f62 100644
2778--- a/src/common/classes/array.h
2779+++ b/src/common/classes/array.h
2780@@ -109,6 +109,12 @@ public:
2781 ensureCapacity(InitialCapacity);
2782 }
2783
2784+ Array(const T* items, const size_type itemsCount)
2785+ : Storage(), count(0), capacity(this->getStorageSize()), data(this->getStorage())
2786+ {
2787+ add(items, itemsCount);
2788+ }
2789+
2790 Array(const Array<T, Storage>& source)
2791 : Storage(), count(0), capacity(this->getStorageSize()), data(this->getStorage())
2792 {
2793diff --git a/src/common/classes/auto.h b/src/common/classes/auto.h
2794index 0244829..2bdb7b8 100644
2795--- a/src/common/classes/auto.h
2796+++ b/src/common/classes/auto.h
2797@@ -257,30 +257,33 @@ private:
2798
2799
2800 template <typename T, typename T2>
2801-class AutoSetRestore2
2802+class AutoRestore2
2803 {
2804-private:
2805+protected:
2806 typedef T (T2::*Getter)();
2807 typedef void (T2::*Setter)(T);
2808
2809 public:
2810- AutoSetRestore2(T2* aPointer, Getter aGetter, Setter aSetter, T newValue)
2811+ AutoRestore2(T2* aPointer, Getter aGetter, Setter aSetter)
2812 : pointer(aPointer),
2813 setter(aSetter),
2814 oldValue((aPointer->*aGetter)())
2815+ { }
2816+
2817+ void set(T newValue)
2818 {
2819- (aPointer->*aSetter)(newValue);
2820+ (pointer->*setter)(newValue);
2821 }
2822
2823- ~AutoSetRestore2()
2824+ ~AutoRestore2()
2825 {
2826 (pointer->*setter)(oldValue);
2827 }
2828
2829 private:
2830 // copying is prohibited
2831- AutoSetRestore2(const AutoSetRestore2&);
2832- AutoSetRestore2& operator =(const AutoSetRestore2&);
2833+ AutoRestore2(const AutoRestore2&);
2834+ AutoRestore2& operator =(const AutoRestore2&);
2835
2836 private:
2837 T2* pointer;
2838@@ -289,6 +292,20 @@ private:
2839 };
2840
2841
2842+template <typename T, typename T2>
2843+class AutoSetRestore2 : public AutoRestore2<T, T2>
2844+{
2845+ typedef typename AutoRestore2<T, T2>::Getter Getter;
2846+ typedef typename AutoRestore2<T, T2>::Setter Setter;
2847+public:
2848+ AutoSetRestore2(T2* aPointer, Getter aGetter, Setter aSetter, T newValue)
2849+ : AutoRestore2<T, T2>(aPointer, aGetter, aSetter)
2850+ {
2851+ this->set(newValue);
2852+ }
2853+};
2854+
2855+
2856 // One more typical class for AutoPtr cleanup
2857 class FileClose
2858 {
2859diff --git a/src/common/classes/locks.h b/src/common/classes/locks.h
2860index 2bbe713..2c79f54 100644
2861--- a/src/common/classes/locks.h
2862+++ b/src/common/classes/locks.h
2863@@ -336,7 +336,7 @@ typedef Mutex Spinlock;
2864 #endif //WIN_NT
2865
2866
2867-// RAII holder
2868+// RAII holders
2869 template <typename M>
2870 class RaiiLockGuard
2871 {
2872@@ -369,10 +369,12 @@ private:
2873
2874 typedef RaiiLockGuard<Mutex> MutexLockGuard;
2875
2876-class MutexUnlockGuard
2877+
2878+template <typename M>
2879+class RaiiUnlockGuard
2880 {
2881 public:
2882- explicit MutexUnlockGuard(Mutex& aLock, const char* aReason)
2883+ explicit RaiiUnlockGuard(M& aLock, const char* aReason)
2884 : lock(&aLock)
2885 #ifdef DEV_BUILD
2886 , saveReason(aReason)
2887@@ -381,7 +383,7 @@ public:
2888 lock->leave();
2889 }
2890
2891- ~MutexUnlockGuard()
2892+ ~RaiiUnlockGuard()
2893 {
2894 try
2895 {
2896@@ -399,15 +401,17 @@ public:
2897
2898 private:
2899 // Forbid copying
2900- MutexUnlockGuard(const MutexUnlockGuard&);
2901- MutexUnlockGuard& operator=(const MutexUnlockGuard&);
2902+ RaiiUnlockGuard(const RaiiUnlockGuard&);
2903+ RaiiUnlockGuard& operator=(const RaiiUnlockGuard&);
2904
2905- Mutex* lock;
2906+ M* lock;
2907 #ifdef DEV_BUILD
2908 const char* saveReason;
2909 #endif
2910 };
2911
2912+typedef RaiiUnlockGuard<Mutex> MutexUnlockGuard;
2913+
2914
2915 class MutexCheckoutGuard
2916 {
2917diff --git a/src/common/common.h b/src/common/common.h
2918index 58abaaf..af1ec6b 100644
2919--- a/src/common/common.h
2920+++ b/src/common/common.h
2921@@ -244,8 +244,6 @@
2922
2923 #define API_ROUTINE __attribute__((visibility("default")))
2924 #define API_ROUTINE_VARARG API_ROUTINE
2925-#define INTERNAL_API_ROUTINE API_ROUTINE
2926-#define FB_EXPORTED __attribute__((visibility("default")))
2927
2928 #define O_DIRECT F_NOCACHE
2929 #endif /* Darwin Platforms */
2930@@ -600,10 +598,6 @@ extern "C" int remove(const char* path);
2931 #define CLIB_ROUTINE
2932 #endif
2933
2934-#ifndef FB_EXPORTED
2935-#define FB_EXPORTED
2936-#endif
2937-
2938
2939 /* alignment macros */
2940
2941diff --git a/src/common/config/config.cpp b/src/common/config/config.cpp
2942index ed96a0d..b34d324 100644
2943--- a/src/common/config/config.cpp
2944+++ b/src/common/config/config.cpp
2945@@ -136,7 +136,7 @@ const Config::ConfigEntry Config::entries[MAX_CONFIG_KEY] =
2946 {TYPE_INTEGER, "CpuAffinityMask", (ConfigValue) 0},
2947 {TYPE_INTEGER, "TcpRemoteBufferSize", (ConfigValue) 8192}, // bytes
2948 {TYPE_BOOLEAN, "TcpNoNagle", (ConfigValue) true},
2949- {TYPE_BOOLEAN, "TcpLoopbackFastPath", (ConfigValue) true},
2950+ {TYPE_BOOLEAN, "TcpLoopbackFastPath", (ConfigValue) false},
2951 {TYPE_INTEGER, "DefaultDbCachePages", (ConfigValue) -1}, // pages
2952 {TYPE_INTEGER, "ConnectionTimeout", (ConfigValue) 180}, // seconds
2953 {TYPE_INTEGER, "DummyPacketInterval", (ConfigValue) 0}, // seconds
2954diff --git a/src/common/fb_exception.cpp b/src/common/fb_exception.cpp
2955index bb55413..a280414 100644
2956--- a/src/common/fb_exception.cpp
2957+++ b/src/common/fb_exception.cpp
2958@@ -202,23 +202,25 @@ const char* LongJump::what() const throw()
2959
2960 // ********************************* system_error ***************************
2961
2962-system_error::system_error(const char* syscall, int error_code) :
2963+system_error::system_error(const char* syscall, const char* arg, int error_code) :
2964 status_exception(), errorCode(error_code)
2965 {
2966 Arg::Gds temp(isc_sys_request);
2967 temp << Arg::Str(syscall);
2968 temp << SYS_ERR(errorCode);
2969+ if (arg)
2970+ temp << Arg::Gds(isc_random) << arg;
2971 set_status(temp.value());
2972 }
2973
2974 void system_error::raise(const char* syscall, int error_code)
2975 {
2976- throw system_error(syscall, error_code);
2977+ throw system_error(syscall, NULL, error_code);
2978 }
2979
2980 void system_error::raise(const char* syscall)
2981 {
2982- throw system_error(syscall, getSystemError());
2983+ throw system_error(syscall, NULL, getSystemError());
2984 }
2985
2986 int system_error::getSystemError()
2987@@ -232,8 +234,8 @@ int system_error::getSystemError()
2988
2989 // ********************************* system_call_failed ***************************
2990
2991-system_call_failed::system_call_failed(const char* syscall, int error_code) :
2992- system_error(syscall, error_code)
2993+system_call_failed::system_call_failed(const char* syscall, const char* arg, int error_code) :
2994+ system_error(syscall, arg, error_code)
2995 {
2996 // NS: something unexpected has happened. Log the error to log file
2997 // In the future we may consider terminating the process even in PROD_BUILD
2998@@ -247,12 +249,23 @@ system_call_failed::system_call_failed(const char* syscall, int error_code) :
2999
3000 void system_call_failed::raise(const char* syscall, int error_code)
3001 {
3002- throw system_call_failed(syscall, error_code);
3003+ throw system_call_failed(syscall, NULL, error_code);
3004 }
3005
3006 void system_call_failed::raise(const char* syscall)
3007 {
3008- throw system_call_failed(syscall, getSystemError());
3009+ throw system_call_failed(syscall, NULL, getSystemError());
3010+}
3011+
3012+
3013+void system_call_failed::raise(const char* syscall, const char* arg, int error_code)
3014+{
3015+ throw system_call_failed(syscall, arg, error_code);
3016+}
3017+
3018+void system_call_failed::raise(const char* syscall, const char* arg)
3019+{
3020+ raise(syscall, arg, getSystemError());
3021 }
3022
3023 // ********************************* fatal_exception *******************************
3024diff --git a/src/common/intlobj_new.h b/src/common/intlobj_new.h
3025index 395d725..fb43cf7 100644
3026--- a/src/common/intlobj_new.h
3027+++ b/src/common/intlobj_new.h
3028@@ -57,9 +57,15 @@ typedef USHORT (*pfn_INTL_keylength) (texttype* tt, USHORT len);
3029
3030 /* Types of the keys which may be returned by str2key routine */
3031
3032-#define INTL_KEY_SORT 0 /* Full sort key */
3033-#define INTL_KEY_PARTIAL 1 /* Starting portion of sort key for equality class */
3034-#define INTL_KEY_UNIQUE 2 /* Full key for the equality class of the string */
3035+#define INTL_KEY_SORT 0 /* Full sort key */
3036+#define INTL_KEY_PARTIAL 1 /* Starting portion of sort key for equality class */
3037+#define INTL_KEY_UNIQUE 2 /* Full key for the equality class of the string */
3038+#define INTL_KEY_MULTI_STARTING 3 /* Multiple starting keys */
3039+
3040+/* INTL_KEY_MULTI_STARTING format:
3041+ key ::= { <key_length> <key_bytes> }...
3042+ key_length ::= <key length least significant byte> <key length most significant byte>
3043+*/
3044
3045 /* Returned value of INTL_BAD_KEY_LENGTH means that key error happened during
3046 key construction. When partial key is requested returned string should
3047@@ -128,6 +134,8 @@ typedef void (*pfn_INTL_tt_destroy) (texttype* tt);
3048 (char, case, accent) which is case-insensitive,
3049 but accent-sensitive */
3050
3051+#define TEXTTYPE_MULTI_STARTING_KEY 8 /* Supports INTL_KEY_MULTI_STARTING */
3052+
3053
3054 struct texttype
3055 {
3056diff --git a/src/common/isc_sync.cpp b/src/common/isc_sync.cpp
3057index a9c8e7a..98d222b 100644
3058--- a/src/common/isc_sync.cpp
3059+++ b/src/common/isc_sync.cpp
3060@@ -1633,7 +1633,6 @@ SharedMemoryBase::SharedMemoryBase(const TEXT* filename, ULONG length, IpcObject
3061 !SetEndOfFile(file_handle) || !FlushFileBuffers(file_handle))
3062 {
3063 err = GetLastError();
3064- CloseHandle(event_handle);
3065 CloseHandle(file_handle);
3066
3067 if (err == ERROR_USER_MAPPED_FILE)
3068@@ -1641,10 +1640,14 @@ SharedMemoryBase::SharedMemoryBase(const TEXT* filename, ULONG length, IpcObject
3069 if (retry_count < 50) // 0.5 sec
3070 goto retry;
3071
3072+ CloseHandle(event_handle);
3073 Arg::Gds(isc_instance_conflict).raise();
3074 }
3075 else
3076+ {
3077+ CloseHandle(event_handle);
3078 system_call_failed::raise("SetFilePointer", err);
3079+ }
3080 }
3081 }
3082
3083diff --git a/src/common/os/posix/guid.cpp b/src/common/os/posix/guid.cpp
3084index 0713f49..3e2978b 100644
3085--- a/src/common/os/posix/guid.cpp
3086+++ b/src/common/os/posix/guid.cpp
3087@@ -45,6 +45,9 @@ void GenerateRandomBytes(void* buffer, FB_SIZE_T size)
3088 {
3089 // do not use /dev/random because it may return lesser data than we need.
3090 int fd = os_utils::open("/dev/urandom", O_RDONLY);
3091+ if (fd < 0)
3092+ Firebird::system_call_failed::raise("open");
3093+
3094 for (FB_SIZE_T offset = 0; offset < size; )
3095 {
3096 int rc = read(fd, static_cast<char*>(buffer) + offset, size - offset);
3097diff --git a/src/common/os/posix/os_utils.cpp b/src/common/os/posix/os_utils.cpp
3098index 404c6d2..23c9cf0 100644
3099--- a/src/common/os/posix/os_utils.cpp
3100+++ b/src/common/os/posix/os_utils.cpp
3101@@ -148,18 +148,18 @@ void createLockDirectory(const char* pathname)
3102 if (access(pathname, R_OK | W_OK | X_OK) == 0)
3103 {
3104 if (stat(pathname, &st) != 0)
3105- system_call_failed::raise("stat");
3106+ system_call_failed::raise("stat", pathname);
3107 if (S_ISDIR(st.st_mode))
3108 return;
3109 // not exactly original meaning, but very close to it
3110- system_call_failed::raise("access", ENOTDIR);
3111+ system_call_failed::raise("mkdir", pathname, ENOTDIR);
3112 }
3113
3114 if (SYSCALL_INTERRUPTED(errno))
3115 continue;
3116 if (errno == ENOENT)
3117 break;
3118- system_call_failed::raise("access", ENOTDIR);
3119+ system_call_failed::raise("access", pathname);
3120 }
3121
3122 Firebird::PathName newname(pathname);
3123@@ -216,16 +216,16 @@ void createLockDirectory(const char* pathname)
3124 if (access(pathname, R_OK | W_OK | X_OK) == 0)
3125 {
3126 if (stat(pathname, &st) != 0)
3127- system_call_failed::raise("stat");
3128+ system_call_failed::raise("stat", pathname);
3129 if (S_ISDIR(st.st_mode))
3130 return;
3131 // not exactly original meaning, but very close to it
3132- system_call_failed::raise("access", ENOTDIR);
3133+ system_call_failed::raise("stat", pathname, ENOTDIR);
3134 }
3135
3136 if (SYSCALL_INTERRUPTED(errno))
3137 continue;
3138- system_call_failed::raise("access", ENOTDIR);
3139+ system_call_failed::raise("access", pathname);
3140 }
3141
3142 return;
3143diff --git a/src/common/unicode_util.cpp b/src/common/unicode_util.cpp
3144index eeda6b0..c158cf8 100644
3145--- a/src/common/unicode_util.cpp
3146+++ b/src/common/unicode_util.cpp
3147@@ -186,7 +186,9 @@ public:
3148 USet* (U_EXPORT2 *usetOpen)(UChar32 start, UChar32 end);
3149
3150 void (U_EXPORT2 *ucolClose)(UCollator* coll);
3151- int32_t (U_EXPORT2 *ucolGetContractions)(const UCollator* coll, USet* conts, UErrorCode* status);
3152+ int32_t (U_EXPORT2 *ucolGetContractionsAndExpansions)(const UCollator* coll, USet* contractions, USet* expansions,
3153+ UBool addPrefixes, UErrorCode* status);
3154+
3155 int32_t (U_EXPORT2 *ucolGetSortKey)(const UCollator* coll, const UChar* source,
3156 int32_t sourceLength, uint8_t* result, int32_t resultLength);
3157 UCollator* (U_EXPORT2 *ucolOpen)(const char* loc, UErrorCode* status);
3158@@ -1034,7 +1036,8 @@ UnicodeUtil::ICU* UnicodeUtil::loadICU(const string& icuVersion, const string& c
3159 icu->getEntryPoint("uset_open", icu->ucModule, icu->usetOpen);
3160
3161 icu->getEntryPoint("ucol_close", icu->inModule, icu->ucolClose);
3162- icu->getEntryPoint("ucol_getContractions", icu->inModule, icu->ucolGetContractions);
3163+ icu->getEntryPoint("ucol_getContractionsAndExpansions", icu->inModule,
3164+ icu->ucolGetContractionsAndExpansions);
3165 icu->getEntryPoint("ucol_getSortKey", icu->inModule, icu->ucolGetSortKey);
3166 icu->getEntryPoint("ucol_open", icu->inModule, icu->ucolOpen);
3167 icu->getEntryPoint("ucol_setAttribute", icu->inModule, icu->ucolSetAttribute);
3168@@ -1336,10 +1339,6 @@ UnicodeUtil::Utf16Collation* UnicodeUtil::Utf16Collation::create(
3169 icu->ucolSetAttribute(compareCollator, UCOL_STRENGTH, UCOL_SECONDARY, &status);
3170 }
3171
3172- USet* contractions = icu->usetOpen(0, 0);
3173- // status not verified here.
3174- icu->ucolGetContractions(partialCollator, contractions, &status);
3175-
3176 Utf16Collation* obj = FB_NEW Utf16Collation();
3177 obj->icu = icu;
3178 obj->tt = tt;
3179@@ -1347,9 +1346,150 @@ UnicodeUtil::Utf16Collation* UnicodeUtil::Utf16Collation::create(
3180 obj->compareCollator = compareCollator;
3181 obj->partialCollator = partialCollator;
3182 obj->sortCollator = sortCollator;
3183- obj->contractions = contractions;
3184- obj->contractionsCount = icu->usetGetItemCount(contractions);
3185 obj->numericSort = isNumericSort;
3186+ obj->maxContractionsPrefixLength = 0;
3187+
3188+ USet* contractions = icu->usetOpen(1, 0);
3189+ // status not verified here.
3190+ icu->ucolGetContractionsAndExpansions(partialCollator, contractions, NULL, false, &status);
3191+
3192+ int contractionsCount = icu->usetGetItemCount(contractions);
3193+
3194+ for (int contractionIndex = 0; contractionIndex < contractionsCount; ++contractionIndex)
3195+ {
3196+ UChar strChars[10];
3197+ UChar32 start, end;
3198+
3199+ status = U_ZERO_ERROR;
3200+ int len = icu->usetGetItem(contractions, contractionIndex, &start, &end, strChars, sizeof(strChars), &status);
3201+
3202+ if (len >= 2)
3203+ {
3204+ obj->maxContractionsPrefixLength = len - 1 > obj->maxContractionsPrefixLength ?
3205+ len - 1 : obj->maxContractionsPrefixLength;
3206+
3207+ UCHAR key[100];
3208+ int keyLen = icu->ucolGetSortKey(partialCollator, strChars, len, key, sizeof(key));
3209+
3210+ for (int prefixLen = 1; prefixLen < len; ++prefixLen)
3211+ {
3212+ const Array<USHORT> str(strChars, prefixLen);
3213+ SortKeyArray* keySet = obj->contractionsPrefix.get(str);
3214+
3215+ if (!keySet)
3216+ {
3217+ keySet = obj->contractionsPrefix.put(str);
3218+
3219+ UCHAR prefixKey[100];
3220+ int prefixKeyLen = icu->ucolGetSortKey(partialCollator,
3221+ strChars, prefixLen, prefixKey, sizeof(prefixKey));
3222+
3223+ keySet->add(Array<UCHAR>(prefixKey, prefixKeyLen));
3224+ }
3225+
3226+ keySet->add(Array<UCHAR>(key, keyLen));
3227+ }
3228+ }
3229+ }
3230+
3231+ icu->usetClose(contractions);
3232+
3233+ ContractionsPrefixMap::Accessor accessor(&obj->contractionsPrefix);
3234+
3235+ for (bool found = accessor.getFirst(); found; found = accessor.getNext())
3236+ {
3237+ SortKeyArray& keySet = accessor.current()->second;
3238+
3239+ if (keySet.getCount() <= 1)
3240+ continue;
3241+
3242+ fb_assert(accessor.current()->first.hasData());
3243+ USHORT firstCh = accessor.current()->first.front();
3244+ USHORT lastCh = accessor.current()->first.back();
3245+
3246+ if ((firstCh >= 0xFDD0 && firstCh <= 0xFDEF) || UTF_IS_SURROGATE(lastCh))
3247+ {
3248+ keySet.clear();
3249+ keySet.add(Array<UCHAR>());
3250+ continue;
3251+ }
3252+
3253+ SortKeyArray::iterator firstKeyIt = keySet.begin();
3254+ SortKeyArray::iterator lastKeyIt = --keySet.end();
3255+
3256+ const UCHAR* firstKeyDataIt = firstKeyIt->begin();
3257+ const UCHAR* lastKeyDataIt = lastKeyIt->begin();
3258+ const UCHAR* firstKeyDataEnd = firstKeyIt->end();
3259+ const UCHAR* lastKeyDataEnd = lastKeyIt->end();
3260+
3261+ if (*firstKeyDataIt == *lastKeyDataIt)
3262+ {
3263+ unsigned common = 0;
3264+
3265+ do
3266+ {
3267+ ++common;
3268+ } while (++firstKeyDataIt != firstKeyDataEnd && ++lastKeyDataIt != lastKeyDataEnd &&
3269+ *firstKeyDataIt == *lastKeyDataIt);
3270+
3271+ Array<UCHAR> commonKey(firstKeyIt->begin(), common);
3272+ keySet.clear();
3273+ keySet.add(commonKey);
3274+ }
3275+ else
3276+ {
3277+ SortKeyArray::iterator secondKeyIt = ++keySet.begin();
3278+ const UCHAR* secondKeyDataIt = secondKeyIt->begin();
3279+ const UCHAR* secondKeyDataEnd = secondKeyIt->end();
3280+
3281+ ObjectsArray<Array<UCHAR> > commonKeys;
3282+ commonKeys.add(*firstKeyIt);
3283+
3284+ while (secondKeyIt != keySet.end())
3285+ {
3286+ unsigned common = 0;
3287+
3288+ while (firstKeyDataIt != firstKeyDataEnd && secondKeyDataIt != secondKeyDataEnd &&
3289+ *firstKeyDataIt == *secondKeyDataIt)
3290+ {
3291+ ++common;
3292+ ++firstKeyDataIt;
3293+ ++secondKeyDataIt;
3294+ }
3295+
3296+ unsigned backSize = commonKeys.back()->getCount();
3297+
3298+ if (common > backSize)
3299+ commonKeys.back()->append(secondKeyIt->begin() + backSize, common - backSize);
3300+ else if (common < backSize)
3301+ {
3302+ if (common == 0)
3303+ commonKeys.push(*secondKeyIt);
3304+ else
3305+ commonKeys.back()->resize(common);
3306+ }
3307+
3308+ if (++secondKeyIt != keySet.end())
3309+ {
3310+ ++firstKeyIt;
3311+
3312+ firstKeyDataIt = firstKeyIt->begin();
3313+ secondKeyDataIt = secondKeyIt->begin();
3314+
3315+ firstKeyDataEnd = firstKeyIt->end();
3316+ secondKeyDataEnd = secondKeyIt->end();
3317+ }
3318+ }
3319+
3320+ keySet.clear();
3321+
3322+ for (ObjectsArray<Array<UCHAR> >::iterator ckIt = commonKeys.begin(); ckIt != commonKeys.end(); ++ckIt)
3323+ keySet.add(*ckIt);
3324+ }
3325+ }
3326+
3327+ if (obj->maxContractionsPrefixLength)
3328+ tt->texttype_flags |= TEXTTYPE_MULTI_STARTING_KEY;
3329
3330 return obj;
3331 }
3332@@ -1357,8 +1497,6 @@ UnicodeUtil::Utf16Collation* UnicodeUtil::Utf16Collation::create(
3333
3334 UnicodeUtil::Utf16Collation::~Utf16Collation()
3335 {
3336- icu->usetClose(contractions);
3337-
3338 icu->ucolClose(compareCollator);
3339 icu->ucolClose(partialCollator);
3340 icu->ucolClose(sortCollator);
3341@@ -1403,55 +1541,18 @@ USHORT UnicodeUtil::Utf16Collation::stringToKey(USHORT srcLen, const USHORT* src
3342 srcLenLong = pad - src + 1;
3343 }
3344
3345+ if (srcLenLong == 0)
3346+ return 0;
3347+
3348 HalfStaticArray<USHORT, BUFFER_SMALL / 2> buffer;
3349 const UCollator* coll = NULL;
3350
3351 switch (key_type)
3352 {
3353 case INTL_KEY_PARTIAL:
3354- {
3355+ case INTL_KEY_MULTI_STARTING:
3356 coll = partialCollator;
3357-
3358- // Remove last bytes of key if they are start of a contraction
3359- // to correctly find in the index.
3360- ConversionICU& cIcu(getConversionICU());
3361- for (int i = 0; i < contractionsCount; ++i)
3362- {
3363- UChar str[10];
3364- UErrorCode status = U_ZERO_ERROR;
3365- int len = icu->usetGetItem(contractions, i, NULL, NULL, str, sizeof(str), &status);
3366-
3367- if (len > SLONG(srcLenLong))
3368- len = srcLenLong;
3369- else
3370- --len;
3371-
3372- // safe cast - alignment not changed
3373- if (cIcu.u_strCompare(str, len,
3374- reinterpret_cast<const UChar*>(src) + srcLenLong - len, len, true) == 0)
3375- {
3376- srcLenLong -= len;
3377- break;
3378- }
3379- }
3380-
3381- if (numericSort)
3382- {
3383- // ASF: Wee need to remove trailing numbers to return sub key that
3384- // matches full key. Example: "abc1" becomes "abc" to match "abc10".
3385- const USHORT* p = src + srcLenLong - 1;
3386-
3387- for (; p >= src; --p)
3388- {
3389- if (!(*p >= '0' && *p <= '9'))
3390- break;
3391- }
3392-
3393- srcLenLong = p - src + 1;
3394- }
3395-
3396 break;
3397- }
3398
3399 case INTL_KEY_UNIQUE:
3400 coll = compareCollator;
3401@@ -1469,11 +1570,127 @@ USHORT UnicodeUtil::Utf16Collation::stringToKey(USHORT srcLen, const USHORT* src
3402 return INTL_BAD_KEY_LENGTH;
3403 }
3404
3405- if (srcLenLong == 0)
3406- return 0;
3407+ if (key_type == INTL_KEY_MULTI_STARTING)
3408+ {
3409+ bool trailingNumbersRemoved = false;
3410+
3411+ if (numericSort)
3412+ {
3413+ // ASF: Wee need to remove trailing numbers to return sub key that
3414+ // matches full key. Example: "abc1" becomes "abc" to match "abc10".
3415+ const USHORT* p = src + srcLenLong - 1;
3416
3417- return icu->ucolGetSortKey(coll,
3418+ for (; p >= src; --p)
3419+ {
3420+ if (!(*p >= '0' && *p <= '9'))
3421+ break;
3422+
3423+ trailingNumbersRemoved = true;
3424+ }
3425+
3426+ srcLenLong = p - src + 1;
3427+ }
3428+
3429+ UCHAR* originalDst = dst;
3430+ USHORT originalDstLen = dstLen;
3431+
3432+ if (!trailingNumbersRemoved)
3433+ {
3434+ for (int i = MIN(maxContractionsPrefixLength, srcLenLong); i > 0; --i)
3435+ {
3436+ SortKeyArray* keys = contractionsPrefix.get(Array<USHORT>(src + srcLenLong - i, i));
3437+
3438+ if (keys)
3439+ {
3440+ UCHAR lastCharKey[BUFFER_TINY]; // sort key for a single character
3441+ ULONG prefixLen, lastCharKeyLen;
3442+
3443+ srcLenLong -= i;
3444+
3445+ if (srcLenLong != 0)
3446+ {
3447+ prefixLen = icu->ucolGetSortKey(coll,
3448+ reinterpret_cast<const UChar*>(src), srcLenLong, dst + 2, dstLen - 2);
3449+
3450+ lastCharKeyLen = icu->ucolGetSortKey(coll,
3451+ reinterpret_cast<const UChar*>(src + srcLenLong), i, lastCharKey, sizeof(lastCharKey));
3452+
3453+ if (prefixLen == 0 || prefixLen > dstLen - 2 || prefixLen > MAX_USHORT ||
3454+ lastCharKeyLen == 0)
3455+ {
3456+ return INTL_BAD_KEY_LENGTH;
3457+ }
3458+
3459+ fb_assert(dst[2 + prefixLen - 1] == '\0');
3460+ --prefixLen;
3461+
3462+ fb_assert(lastCharKey[lastCharKeyLen - 1] == '\0');
3463+ --lastCharKeyLen;
3464+ }
3465+ else
3466+ prefixLen = 0;
3467+
3468+ bool fallbackToPrefixKey = false;
3469+
3470+ for (SortKeyArray::const_iterator keyIt = keys->begin();
3471+ keyIt != keys->end();
3472+ ++keyIt)
3473+ {
3474+ const UCHAR advance = prefixLen && lastCharKeyLen > 1 &&
3475+ keyIt->hasData() && lastCharKey[0] == keyIt->front() ? 1 : 0;
3476+
3477+ if (keyIt->getCount() - advance == 0)
3478+ {
3479+ fallbackToPrefixKey = true;
3480+ break;
3481+ }
3482+
3483+ const ULONG keyLen = prefixLen + keyIt->getCount() - advance;
3484+
3485+ if (keyLen > dstLen - 2 || keyLen > MAX_USHORT)
3486+ return INTL_BAD_KEY_LENGTH;
3487+
3488+ dst[0] = UCHAR(keyLen & 0xFF);
3489+ dst[1] = UCHAR(keyLen >> 8);
3490+
3491+ if (dst != originalDst)
3492+ memcpy(dst + 2, originalDst + 2, prefixLen);
3493+
3494+ memcpy(dst + 2 + prefixLen, keyIt->begin() + advance, keyIt->getCount() - advance);
3495+ dst += 2 + keyLen;
3496+ dstLen -= 2 + keyLen;
3497+ }
3498+
3499+ if (fallbackToPrefixKey)
3500+ break;
3501+
3502+ return dst - originalDst;
3503+ }
3504+ }
3505+ }
3506+
3507+ ULONG keyLen = icu->ucolGetSortKey(coll,
3508+ reinterpret_cast<const UChar*>(src), srcLenLong, originalDst + 2, originalDstLen - 3);
3509+
3510+ if (keyLen == 0 || keyLen > originalDstLen - 3 || keyLen > MAX_USHORT)
3511+ return INTL_BAD_KEY_LENGTH;
3512+
3513+ fb_assert(originalDst[2 + keyLen - 1] == '\0');
3514+ --keyLen;
3515+
3516+ originalDst[0] = UCHAR(keyLen & 0xFF);
3517+ originalDst[1] = UCHAR(keyLen >> 8);
3518+
3519+ return keyLen + 2;
3520+ }
3521+
3522+ const ULONG keyLen = icu->ucolGetSortKey(coll,
3523 reinterpret_cast<const UChar*>(src), srcLenLong, dst, dstLen);
3524+
3525+ if (keyLen == 0 || keyLen > dstLen || keyLen > MAX_USHORT)
3526+ return INTL_BAD_KEY_LENGTH;
3527+
3528+ return keyLen;
3529 }
3530
3531
3532diff --git a/src/common/unicode_util.h b/src/common/unicode_util.h
3533index 03d48f9..c3966d3 100644
3534--- a/src/common/unicode_util.h
3535+++ b/src/common/unicode_util.h
3536@@ -30,7 +30,10 @@
3537 #include "intlobj_new.h"
3538 #include "../common/IntlUtil.h"
3539 #include "../common/os/mod_loader.h"
3540+#include "../common/classes/array.h"
3541 #include "../common/classes/fb_string.h"
3542+#include "../common/classes/GenericMap.h"
3543+#include "../common/classes/objects_array.h"
3544
3545 #undef U_SHOW_CPLUSPLUS_API
3546 #define U_SHOW_CPLUSPLUS_API 0
3547@@ -168,6 +171,11 @@ public:
3548 Firebird::IntlUtil::SpecificAttributesMap& specificAttributes,
3549 const Firebird::string& configInfo);
3550
3551+ Utf16Collation()
3552+ : contractionsPrefix(*getDefaultMemoryPool())
3553+ {
3554+ }
3555+
3556 ~Utf16Collation();
3557
3558 USHORT keyLength(USHORT len) const;
3559@@ -178,6 +186,45 @@ public:
3560 ULONG canonical(ULONG srcLen, const USHORT* src, ULONG dstLen, ULONG* dst, const ULONG* exceptions);
3561
3562 private:
3563+ template <typename T>
3564+ class ArrayComparator
3565+ {
3566+ public:
3567+ static bool greaterThan(const Firebird::Array<T>& i1, const Firebird::Array<T>& i2)
3568+ {
3569+ FB_SIZE_T minCount = MIN(i1.getCount(), i2.getCount());
3570+ int cmp = memcmp(i1.begin(), i2.begin(), minCount * sizeof(T));
3571+
3572+ if (cmp != 0)
3573+ return cmp > 0;
3574+
3575+ return i1.getCount() > i2.getCount();
3576+ }
3577+
3578+ static bool greaterThan(const Firebird::Array<T>* i1, const Firebird::Array<T>* i2)
3579+ {
3580+ return greaterThan(*i1, *i2);
3581+ }
3582+ };
3583+
3584+ typedef Firebird::SortedObjectsArray<
3585+ Firebird::Array<UCHAR>,
3586+ Firebird::InlineStorage<Firebird::Array<UCHAR>*, 3>,
3587+ Firebird::Array<UCHAR>,
3588+ Firebird::DefaultKeyValue<const Firebird::Array<UCHAR>*>,
3589+ ArrayComparator<UCHAR>
3590+ > SortKeyArray;
3591+
3592+ typedef Firebird::GenericMap<
3593+ Firebird::Pair<
3594+ Firebird::Full<
3595+ Firebird::Array<USHORT>, // UTF-16 string
3596+ SortKeyArray // sort keys
3597+ >
3598+ >,
3599+ ArrayComparator<USHORT>
3600+ > ContractionsPrefixMap;
3601+
3602 static ICU* loadICU(const Firebird::string& collVersion, const Firebird::string& locale,
3603 const Firebird::string& configInfo);
3604
3605@@ -190,8 +237,8 @@ public:
3606 UCollator* compareCollator;
3607 UCollator* partialCollator;
3608 UCollator* sortCollator;
3609- USet* contractions;
3610- int contractionsCount;
3611+ ContractionsPrefixMap contractionsPrefix;
3612+ unsigned maxContractionsPrefixLength; // number of characters
3613 bool numericSort;
3614 };
3615
3616diff --git a/src/common/utils.cpp b/src/common/utils.cpp
3617index 303af3f..673188f 100644
3618--- a/src/common/utils.cpp
3619+++ b/src/common/utils.cpp
3620@@ -1600,6 +1600,13 @@ const ISC_STATUS* const origen = v;
3621 return false;
3622 }
3623
3624+inline bool sqlSymbolChar(char c, bool first)
3625+{
3626+ if (c & 0x80)
3627+ return false;
3628+ return (isdigit(c) && !first) || isalpha(c) || c == '_' || c == '$';
3629+}
3630+
3631 const char* dpbItemUpper(const char* s, FB_SIZE_T l, Firebird::string& buf)
3632 {
3633 if (l && (s[0] == '"' || s[0] == '\''))
3634@@ -1612,30 +1619,37 @@ const char* dpbItemUpper(const char* s, FB_SIZE_T l, Firebird::string& buf)
3635 {
3636 if (s[i] == end_quote)
3637 {
3638- if (++i >= l || s[i] != end_quote)
3639- break; // delimited quote, done processing
3640+ if (++i >= l)
3641+ {
3642+ if (ascii && s[0] == '\'')
3643+ buf.upper();
3644+
3645+ return buf.c_str();
3646+ }
3647+
3648+ if (s[i] != end_quote)
3649+ {
3650+ buf.assign(&s[i], l - i);
3651+ Firebird::fatal_exception::raiseFmt("Invalid text <%s> after quoted string", buf.c_str());
3652+ }
3653
3654 // skipped the escape quote, continue processing
3655 }
3656-
3657- if (s[i] & 0x80)
3658+ else if (!sqlSymbolChar(s[i], i == 1))
3659 ascii = false;
3660+
3661 buf += s[i];
3662 }
3663
3664- if (ascii && s[0] == '\'')
3665- buf.upper();
3666-
3667- return buf.c_str();
3668+ Firebird::fatal_exception::raiseFmt("Missing terminating quote <%c> in the end of quoted string", s[0]);
3669 }
3670
3671 // non-quoted string - try to uppercase
3672 for (FB_SIZE_T i = 0; i < l; ++i)
3673 {
3674- if (!(s[i] & 0x80))
3675- buf += toupper(s[i]);
3676- else
3677+ if (!sqlSymbolChar(s[i], i == 0))
3678 return NULL; // contains non-ascii data
3679+ buf += toupper(s[i]);
3680 }
3681
3682 return buf.c_str();
3683diff --git a/src/dsql/DsqlCursor.cpp b/src/dsql/DsqlCursor.cpp
3684index 4c3fef6..dcb040a 100644
3685--- a/src/dsql/DsqlCursor.cpp
3686+++ b/src/dsql/DsqlCursor.cpp
3687@@ -34,10 +34,10 @@ static const char* const SCRATCH = "fb_cursor_";
3688 static const ULONG PREFETCH_SIZE = 65536; // 64 KB
3689
3690 DsqlCursor::DsqlCursor(dsql_req* req, ULONG flags)
3691- : m_request(req), m_resultSet(NULL), m_flags(flags),
3692+ : m_request(req), m_message(req->getStatement()->getReceiveMsg()),
3693+ m_resultSet(NULL), m_flags(flags),
3694 m_space(req->getPool(), SCRATCH),
3695- m_state(BOS), m_eof(false), m_position(0), m_cachedCount(0),
3696- m_messageSize(req->getStatement()->getReceiveMsg()->msg_length)
3697+ m_state(BOS), m_eof(false), m_position(0), m_cachedCount(0)
3698 {
3699 TRA_link_cursor(m_request->req_transaction, this);
3700 }
3701@@ -232,9 +232,14 @@ int DsqlCursor::fetchFromCache(thread_db* tdbb, UCHAR* buffer, FB_UINT64 positio
3702
3703 fb_assert(position < m_cachedCount);
3704
3705- const FB_UINT64 offset = position * m_messageSize;
3706- const FB_UINT64 readBytes = m_space.read(offset, buffer, m_messageSize);
3707- fb_assert(readBytes == m_messageSize);
3708+ UCHAR* const msgBuffer = m_request->req_msg_buffers[m_message->msg_buffer_number];
3709+
3710+ const FB_UINT64 offset = position * m_message->msg_length;
3711+ const FB_UINT64 readBytes = m_space.read(offset, msgBuffer, m_message->msg_length);
3712+ fb_assert(readBytes == m_message->msg_length);
3713+
3714+ m_request->mapInOut(tdbb, true, m_message, NULL, buffer);
3715+
3716 m_position = position;
3717 m_state = POSITIONED;
3718 return 0;
3719@@ -244,34 +249,23 @@ bool DsqlCursor::cacheInput(thread_db* tdbb, FB_UINT64 position)
3720 {
3721 fb_assert(!m_eof);
3722
3723- const ULONG prefetchCount = MAX(PREFETCH_SIZE / m_messageSize, 1);
3724- const ULONG prefetchSize = prefetchCount * m_messageSize;
3725-
3726- UCharBuffer messageBuffer;
3727- UCHAR* const buffer = messageBuffer.getBuffer(prefetchSize);
3728+ const ULONG prefetchCount = MAX(PREFETCH_SIZE / m_message->msg_length, 1);
3729+ const UCHAR* const msgBuffer = m_request->req_msg_buffers[m_message->msg_buffer_number];
3730
3731 while (position >= m_cachedCount)
3732 {
3733- ULONG count = 0;
3734-
3735- for (; count < prefetchCount; count++)
3736+ for (ULONG count = 0; count < prefetchCount; count++)
3737 {
3738- UCHAR* const ptr = buffer + count * m_messageSize;
3739-
3740- if (!m_request->fetch(tdbb, ptr))
3741+ if (!m_request->fetch(tdbb, NULL))
3742 {
3743 m_eof = true;
3744 break;
3745 }
3746- }
3747
3748- if (count)
3749- {
3750- const FB_UINT64 offset = m_cachedCount * m_messageSize;
3751- const ULONG fetchedSize = count * m_messageSize;
3752- const FB_UINT64 writtenBytes = m_space.write(offset, buffer, fetchedSize);
3753- fb_assert(writtenBytes == fetchedSize);
3754- m_cachedCount += count;
3755+ const FB_UINT64 offset = m_cachedCount * m_message->msg_length;
3756+ const FB_UINT64 writtenBytes = m_space.write(offset, msgBuffer, m_message->msg_length);
3757+ fb_assert(writtenBytes == m_message->msg_length);
3758+ m_cachedCount++;
3759 }
3760
3761 if (m_eof)
3762diff --git a/src/dsql/DsqlCursor.h b/src/dsql/DsqlCursor.h
3763index 04824ff..864a8b3 100644
3764--- a/src/dsql/DsqlCursor.h
3765+++ b/src/dsql/DsqlCursor.h
3766@@ -66,6 +66,7 @@ private:
3767 bool cacheInput(thread_db* tdbb, FB_UINT64 position = MAX_UINT64);
3768
3769 dsql_req* const m_request;
3770+ const dsql_msg* const m_message;
3771 JResultSet* m_resultSet;
3772 const ULONG m_flags;
3773 TempSpace m_space;
3774@@ -73,7 +74,6 @@ private:
3775 bool m_eof;
3776 FB_UINT64 m_position;
3777 FB_UINT64 m_cachedCount;
3778- ULONG m_messageSize;
3779 };
3780
3781 } // namespace
3782diff --git a/src/dsql/dsql.cpp b/src/dsql/dsql.cpp
3783index 9254249..f13d146 100644
3784--- a/src/dsql/dsql.cpp
3785+++ b/src/dsql/dsql.cpp
3786@@ -80,9 +80,6 @@ using namespace Firebird;
3787
3788 static ULONG get_request_info(thread_db*, dsql_req*, ULONG, UCHAR*);
3789 static dsql_dbb* init(Jrd::thread_db*, Jrd::Attachment*);
3790-static void map_in_out(Jrd::thread_db*, dsql_req*, bool, const dsql_msg*, IMessageMetadata*, UCHAR*,
3791- const UCHAR* = NULL);
3792-static USHORT parse_metadata(dsql_req*, IMessageMetadata*, const Array<dsql_par*>&);
3793 static dsql_req* prepareRequest(thread_db*, dsql_dbb*, jrd_tra*, ULONG, const TEXT*, USHORT, bool);
3794 static dsql_req* prepareStatement(thread_db*, dsql_dbb*, jrd_tra*, ULONG, const TEXT*, USHORT, bool);
3795 static UCHAR* put_item(UCHAR, const USHORT, const UCHAR*, UCHAR*, const UCHAR* const);
3796@@ -272,6 +269,12 @@ bool DsqlDmlRequest::fetch(thread_db* tdbb, UCHAR* msgBuffer)
3797
3798 dsql_msg* message = (dsql_msg*) statement->getReceiveMsg();
3799
3800+ if (delayedFormat && message)
3801+ {
3802+ parseMetadata(delayedFormat, message->msg_parameters);
3803+ delayedFormat = NULL;
3804+ }
3805+
3806 // Set up things for tracing this call
3807 Jrd::Attachment* att = req_dbb->dbb_attachment;
3808 TraceDSQLFetch trace(att, this);
3809@@ -285,13 +288,12 @@ bool DsqlDmlRequest::fetch(thread_db* tdbb, UCHAR* msgBuffer)
3810
3811 if (eofReached)
3812 {
3813- delayedFormat = NULL;
3814 trace.fetch(true, ITracePlugin::RESULT_SUCCESS);
3815 return false;
3816 }
3817
3818- map_in_out(tdbb, this, true, message, delayedFormat, msgBuffer);
3819- delayedFormat = NULL;
3820+ if (msgBuffer)
3821+ mapInOut(tdbb, true, message, NULL, msgBuffer);
3822
3823 trace.fetch(false, ITracePlugin::RESULT_SUCCESS);
3824 return true;
3825@@ -679,9 +681,9 @@ void DsqlDmlRequest::execute(thread_db* tdbb, jrd_tra** traHandle,
3826
3827 const dsql_msg* message = statement->getSendMsg();
3828 if (message)
3829- map_in_out(tdbb, this, false, message, inMetadata, NULL, inMsg);
3830+ mapInOut(tdbb, false, message, inMetadata, NULL, inMsg);
3831
3832- // we need to map_in_out before tracing of execution start to let trace
3833+ // we need to mapInOut before tracing of execution start to let trace
3834 // manager know statement parameters values
3835 TraceDSQLExecute trace(req_dbb->dbb_attachment, this);
3836
3837@@ -713,7 +715,7 @@ void DsqlDmlRequest::execute(thread_db* tdbb, jrd_tra** traHandle,
3838 }
3839
3840 if (outMetadata && message)
3841- parse_metadata(this, outMetadata, message->msg_parameters);
3842+ parseMetadata(outMetadata, message->msg_parameters);
3843
3844 if ((outMsg && message) || isBlock)
3845 {
3846@@ -736,7 +738,7 @@ void DsqlDmlRequest::execute(thread_db* tdbb, jrd_tra** traHandle,
3847 JRD_receive(tdbb, req_request, message->msg_number, message->msg_length, msgBuffer);
3848
3849 if (outMsg)
3850- map_in_out(tdbb, this, true, message, NULL, outMsg);
3851+ mapInOut(tdbb, true, message, NULL, outMsg);
3852
3853 // if this is a singleton select, make sure there's in fact one record
3854
3855@@ -989,13 +991,12 @@ static dsql_dbb* init(thread_db* tdbb, Jrd::Attachment* attachment)
3856
3857 /**
3858
3859- map_in_out
3860+ mapInOut
3861
3862 @brief Map data from external world into message or
3863 from message to external world.
3864
3865
3866- @param request
3867 @param toExternal
3868 @param message
3869 @param meta
3870@@ -1003,10 +1004,10 @@ static dsql_dbb* init(thread_db* tdbb, Jrd::Attachment* attachment)
3871 @param in_dsql_msg_buf
3872
3873 **/
3874-static void map_in_out(thread_db* tdbb, dsql_req* request, bool toExternal, const dsql_msg* message,
3875+void dsql_req::mapInOut(thread_db* tdbb, bool toExternal, const dsql_msg* message,
3876 IMessageMetadata* meta, UCHAR* dsql_msg_buf, const UCHAR* in_dsql_msg_buf)
3877 {
3878- USHORT count = parse_metadata(request, meta, message->msg_parameters);
3879+ USHORT count = parseMetadata(meta, message->msg_parameters);
3880
3881 // Sanity check
3882
3883@@ -1041,7 +1042,7 @@ static void map_in_out(thread_db* tdbb, dsql_req* request, bool toExternal, cons
3884 // Make sure the message given to us is long enough
3885
3886 dsc desc;
3887- if (!request->req_user_descs.get(parameter, desc))
3888+ if (!req_user_descs.get(parameter, desc))
3889 desc.clear();
3890
3891 /***
3892@@ -1059,14 +1060,14 @@ static void map_in_out(thread_db* tdbb, dsql_req* request, bool toExternal, cons
3893 Arg::Gds(isc_dsql_sqlvar_index) << Arg::Num(parameter->par_index-1));
3894 }
3895
3896- UCHAR* msgBuffer = request->req_msg_buffers[parameter->par_message->msg_buffer_number];
3897+ UCHAR* msgBuffer = req_msg_buffers[parameter->par_message->msg_buffer_number];
3898
3899 SSHORT* flag = NULL;
3900 dsql_par* const null_ind = parameter->par_null;
3901 if (null_ind != NULL)
3902 {
3903 dsc userNullDesc;
3904- if (!request->req_user_descs.get(null_ind, userNullDesc))
3905+ if (!req_user_descs.get(null_ind, userNullDesc))
3906 userNullDesc.clear();
3907
3908 const ULONG null_offset = (IPTR) userNullDesc.dsc_address;
3909@@ -1129,7 +1130,7 @@ static void map_in_out(thread_db* tdbb, dsql_req* request, bool toExternal, cons
3910 Arg::Gds(isc_dsql_wrong_param_num) << Arg::Num(count) <<Arg::Num(count2));
3911 }
3912
3913- const DsqlCompiledStatement* statement = request->getStatement();
3914+ const DsqlCompiledStatement* statement = getStatement();
3915 const dsql_par* parameter;
3916
3917 const dsql_par* dbkey;
3918@@ -1138,7 +1139,7 @@ static void map_in_out(thread_db* tdbb, dsql_req* request, bool toExternal, cons
3919 {
3920 UCHAR* parentMsgBuffer = statement->getParentRequest() ?
3921 statement->getParentRequest()->req_msg_buffers[dbkey->par_message->msg_buffer_number] : NULL;
3922- UCHAR* msgBuffer = request->req_msg_buffers[parameter->par_message->msg_buffer_number];
3923+ UCHAR* msgBuffer = req_msg_buffers[parameter->par_message->msg_buffer_number];
3924
3925 fb_assert(parentMsgBuffer);
3926
3927@@ -1168,7 +1169,7 @@ static void map_in_out(thread_db* tdbb, dsql_req* request, bool toExternal, cons
3928 UCHAR* parentMsgBuffer = statement->getParentRequest() ?
3929 statement->getParentRequest()->req_msg_buffers[rec_version->par_message->msg_buffer_number] :
3930 NULL;
3931- UCHAR* msgBuffer = request->req_msg_buffers[parameter->par_message->msg_buffer_number];
3932+ UCHAR* msgBuffer = req_msg_buffers[parameter->par_message->msg_buffer_number];
3933
3934 fb_assert(parentMsgBuffer);
3935
3936@@ -1195,18 +1196,16 @@ static void map_in_out(thread_db* tdbb, dsql_req* request, bool toExternal, cons
3937
3938 /**
3939
3940- parse_metadata
3941+ parseMetadata
3942
3943 @brief Parse the message of a request.
3944
3945
3946- @param request
3947 @param meta
3948 @param parameters_list
3949
3950 **/
3951-static USHORT parse_metadata(dsql_req* request, IMessageMetadata* meta,
3952- const Array<dsql_par*>& parameters_list)
3953+USHORT dsql_req::parseMetadata(IMessageMetadata* meta, const Array<dsql_par*>& parameters_list)
3954 {
3955 HalfStaticArray<const dsql_par*, 16> parameters;
3956
3957@@ -1280,7 +1279,7 @@ static USHORT parse_metadata(dsql_req* request, IMessageMetadata* meta,
3958 if (desc.isText() && desc.getTextType() == ttype_dynamic)
3959 desc.setTextType(ttype_none);
3960
3961- request->req_user_descs.put(parameter, desc);
3962+ req_user_descs.put(parameter, desc);
3963
3964 dsql_par* null = parameter->par_null;
3965 if (null)
3966@@ -1291,7 +1290,7 @@ static USHORT parse_metadata(dsql_req* request, IMessageMetadata* meta,
3967 desc.dsc_length = sizeof(SSHORT);
3968 desc.dsc_address = (UCHAR*)(IPTR) nullOffset;
3969
3970- request->req_user_descs.put(null, desc);
3971+ req_user_descs.put(null, desc);
3972 }
3973 }
3974
3975diff --git a/src/dsql/dsql.h b/src/dsql/dsql.h
3976index a5f359f..401d891 100644
3977--- a/src/dsql/dsql.h
3978+++ b/src/dsql/dsql.h
3979@@ -573,6 +573,10 @@ public:
3980
3981 virtual void setDelayedFormat(thread_db* tdbb, Firebird::IMessageMetadata* metadata);
3982
3983+ USHORT parseMetadata(Firebird::IMessageMetadata* meta, const Firebird::Array<dsql_par*>& parameters_list);
3984+ void mapInOut(Jrd::thread_db* tdbb, bool toExternal, const dsql_msg* message, Firebird::IMessageMetadata* meta,
3985+ UCHAR* dsql_msg_buf, const UCHAR* in_dsql_msg_buf = NULL);
3986+
3987 static void destroy(thread_db* tdbb, dsql_req* request, bool drop);
3988
3989 private:
3990diff --git a/src/dsql/pass1.cpp b/src/dsql/pass1.cpp
3991index 384208e..fcb1cc8 100644
3992--- a/src/dsql/pass1.cpp
3993+++ b/src/dsql/pass1.cpp
3994@@ -2761,16 +2761,11 @@ static void pass1_union_auto_cast(DsqlCompilerScratch* dsqlScratch, ExprNode* in
3995 field->length = desc.dsc_length;
3996 field->flags = (desc.dsc_flags & DSC_nullable) ? FLD_nullable : 0;
3997
3998- if (desc.dsc_dtype <= dtype_any_text)
3999+ if (desc.isText() || desc.isBlob())
4000 {
4001- field->textType = desc.dsc_sub_type;
4002- field->charSetId = INTL_GET_CHARSET(&desc);
4003- field->collationId = INTL_GET_COLLATE(&desc);
4004- }
4005- else if (desc.dsc_dtype == dtype_blob)
4006- {
4007- field->charSetId = desc.dsc_scale;
4008- field->collationId = desc.dsc_flags >> 8;
4009+ field->textType = desc.getTextType();
4010+ field->charSetId = desc.getCharSet();
4011+ field->collationId = desc.getCollation();
4012 }
4013
4014 // Finally copy the descriptors to the root nodes and swap
4015diff --git a/src/extlib/ib_util.cpp b/src/extlib/ib_util.cpp
4016index 8f74f5e..ffefb10 100644
4017--- a/src/extlib/ib_util.cpp
4018+++ b/src/extlib/ib_util.cpp
4019@@ -21,19 +21,18 @@
4020 #include <stdlib.h>
4021 #include "ib_udf.h"
4022 #include "firebird.h"
4023-
4024-typedef void* VoidPtr;
4025+#include "ibase.h"
4026
4027
4028 // initialized by the engine
4029 static void* (*allocFunc)(long) = NULL;
4030
4031-extern "C" void FB_EXPORTED ib_util_init(void* (*aAllocFunc)(long))
4032+extern "C" FB_DLL_EXPORT void ib_util_init(void* (*aAllocFunc)(long))
4033 {
4034 allocFunc = aAllocFunc;
4035 }
4036
4037-extern "C" VoidPtr FB_EXPORTED ib_util_malloc(long size)
4038+extern "C" FB_DLL_EXPORT void* ib_util_malloc(long size)
4039 {
4040 return allocFunc ? allocFunc(size) : malloc(size);
4041 }
4042diff --git a/src/include/consts_pub.h b/src/include/consts_pub.h
4043index 6107e09..769a3e3 100644
4044--- a/src/include/consts_pub.h
4045+++ b/src/include/consts_pub.h
4046@@ -123,6 +123,7 @@
4047 #define isc_dpb_nolinger 88
4048 #define isc_dpb_reset_icu 89
4049 #define isc_dpb_map_attach 90
4050+#define isc_dpb_clear_map 96
4051
4052 /**************************************************/
4053 /* clumplet tags used inside isc_dpb_address_path */
4054diff --git a/src/include/fb_exception.h b/src/include/fb_exception.h
4055index 3551ac4..5847e31 100644
4056--- a/src/include/fb_exception.h
4057+++ b/src/include/fb_exception.h
4058@@ -132,9 +132,11 @@ class system_error : public status_exception
4059 {
4060 private:
4061 int errorCode;
4062-public:
4063- system_error(const char* syscall, int error_code);
4064
4065+protected:
4066+ system_error(const char* syscall, const char* arg, int error_code);
4067+
4068+public:
4069 static void raise(const char* syscall, int error_code);
4070 static void raise(const char* syscall);
4071
4072@@ -150,11 +152,14 @@ public:
4073 // it will call abort() in DEV_BUILD to create core dump
4074 class system_call_failed : public system_error
4075 {
4076-public:
4077- system_call_failed(const char* syscall, int error_code);
4078+protected:
4079+ system_call_failed(const char* syscall, const char* arg, int error_code);
4080
4081+public:
4082 static void raise(const char* syscall, int error_code);
4083 static void raise(const char* syscall);
4084+ static void raise(const char* syscall, const char* arg, int error_code);
4085+ static void raise(const char* syscall, const char* arg);
4086 };
4087
4088 class fatal_exception : public status_exception
4089diff --git a/src/include/firebird.h b/src/include/firebird.h
4090index 87f0a11..6b8cb18 100644
4091--- a/src/include/firebird.h
4092+++ b/src/include/firebird.h
4093@@ -43,13 +43,6 @@
4094 #define DEBUG_GDS_ALLOC
4095 #endif
4096
4097-#if defined(WIN_NT)
4098-#define FB_DLL_EXPORT __declspec(dllexport)
4099-#elif defined(DARWIN)
4100-#define FB_DLL_EXPORT API_ROUTINE
4101-#else
4102-#define FB_DLL_EXPORT
4103-#endif
4104 //#if defined(SOLX86)
4105 // this pragmas is used only with gcc 2.95!
4106 //#define __PRAGMA_REDEFINE_EXTNAME
4107diff --git a/src/include/firebird/UdrCppEngine.h b/src/include/firebird/UdrCppEngine.h
4108index 26ef5a0..d9aac7e 100644
4109--- a/src/include/firebird/UdrCppEngine.h
4110+++ b/src/include/firebird/UdrCppEngine.h
4111@@ -43,7 +43,7 @@
4112 } \
4113 } \
4114 \
4115- extern "C" FB_BOOLEAN* FB_UDR_PLUGIN_ENTRY_POINT(::Firebird::IStatus* status, \
4116+ extern "C" FB_DLL_EXPORT FB_BOOLEAN* FB_UDR_PLUGIN_ENTRY_POINT(::Firebird::IStatus* status, \
4117 FB_BOOLEAN* theirUnloadFlag, ::Firebird::IUdrPlugin* udrPlugin) \
4118 { \
4119 ::Firebird::Udr::FactoryRegistration::finish(status, udrPlugin); \
4120diff --git a/src/include/gen/Firebird.pas b/src/include/gen/Firebird.pas
4121index 1574458..a891103 100644
4122--- a/src/include/gen/Firebird.pas
4123+++ b/src/include/gen/Firebird.pas
4124@@ -3136,7 +3136,9 @@ type
4125 procedure registerTrigger(status: IStatus; name: PAnsiChar; factory: IUdrTriggerFactory); virtual; abstract;
4126 end;
4127
4128+{$IFNDEF NO_FBCLIENT}
4129 function fb_get_master_interface : IMaster; cdecl; external 'fbclient';
4130+{$ENDIF}
4131
4132 const
4133 isc_dpb_version1 = byte(1);
4134@@ -3231,6 +3233,7 @@ const
4135 isc_dpb_nolinger = byte(88);
4136 isc_dpb_reset_icu = byte(89);
4137 isc_dpb_map_attach = byte(90);
4138+ isc_dpb_clear_map = byte(96);
4139 isc_dpb_address = byte(1);
4140 isc_dpb_addr_protocol = byte(1);
4141 isc_dpb_addr_endpoint = byte(2);
4142diff --git a/src/include/gen/msgs.h b/src/include/gen/msgs.h
4143index ceddcaa..ed0ae35 100644
4144--- a/src/include/gen/msgs.h
4145+++ b/src/include/gen/msgs.h
4146@@ -688,7 +688,7 @@ Data source : @4"}, /* eds_statement */
4147 {335544981, "Floating point overflow in built-in function @1"}, /* sysf_fp_overflow */
4148 {335544982, "Floating point overflow in result from UDF @1"}, /* udf_fp_overflow */
4149 {335544983, "Invalid floating point value returned by UDF @1"}, /* udf_fp_nan */
4150- {335544984, "Database is probably already opened by another engine instance in another Windows session"}, /* instance_conflict */
4151+ {335544984, "Shared memory area is probably already created by another engine instance in another Windows session"}, /* instance_conflict */
4152 {335544985, "No free space found in temporary directories"}, /* out_of_temp_space */
4153 {335544986, "Explicit transaction control is not allowed"}, /* eds_expl_tran_ctrl */
4154 {335544987, "Use of TRUSTED switches in spb_command_line is prohibited"}, /* no_trusted_spb */
4155diff --git a/src/include/gen/sql_code.h b/src/include/gen/sql_code.h
4156index 1ba18ed..2d975f8 100644
4157--- a/src/include/gen/sql_code.h
4158+++ b/src/include/gen/sql_code.h
4159@@ -858,7 +858,7 @@ static const struct {
4160 {336003092, -502}, /* 20 dsql_cursor_exists */
4161 {336003093, -502}, /* 21 dsql_cursor_rel_ambiguous */
4162 {336003094, -502}, /* 22 dsql_cursor_rel_not_found */
4163- {336003095, -502}, /* 23 dsql_cursor_not_open */
4164+ {336003095, -504}, /* 23 dsql_cursor_not_open */
4165 {336003096, -607}, /* 24 dsql_type_not_supp_ext_tab */
4166 {336003097, -804}, /* 25 dsql_feature_not_supported_ods */
4167 {336003098, -660}, /* 26 primary_key_required */
4168diff --git a/src/intl/charsets/cs_437.h b/src/intl/charsets/cs_437.h
4169index 9c70b0f..b408d39 100644
4170--- a/src/intl/charsets/cs_437.h
4171+++ b/src/intl/charsets/cs_437.h
4172@@ -3,274 +3,8 @@
4173
4174 Unicode mapping table generated from java mapping and UnicodeData.txt
4175
4176-#
4177 # Name: Cp437 to Unicode table
4178 # Unicode version: Java 1.3
4179-#
4180-# Format: Three tab-separated columns
4181-# Column #1 is the Cp437 code (in hex)
4182-# Column #2 is the Unicode (in hex as 0xXXXX)
4183-# Column #3 is the Unicode name (follows a comment sign, '#')
4184-#
4185-# The entries are in Cp437 order
4186-#
4187-0x00 0x0000 #NULL
4188-0x01 0x0001 #START OF HEADING
4189-0x02 0x0002 #START OF TEXT
4190-0x03 0x0003 #END OF TEXT
4191-0x04 0x0004 #END OF TRANSMISSION
4192-0x05 0x0005 #ENQUIRY
4193-0x06 0x0006 #ACKNOWLEDGE
4194-0x07 0x0007 #BELL
4195-0x08 0x0008 #BACKSPACE
4196-0x09 0x0009 #CHARACTER TABULATION
4197-0x0a 0x000a #LINE FEED (LF)
4198-0x0b 0x000b #LINE TABULATION
4199-0x0c 0x000c #FORM FEED (FF)
4200-0x0d 0x000d #CARRIAGE RETURN (CR)
4201-0x0e 0x000e #SHIFT OUT
4202-0x0f 0x000f #SHIFT IN
4203-0x10 0x0010 #DATA LINK ESCAPE
4204-0x11 0x0011 #DEVICE CONTROL ONE
4205-0x12 0x0012 #DEVICE CONTROL TWO
4206-0x13 0x0013 #DEVICE CONTROL THREE
4207-0x14 0x0014 #DEVICE CONTROL FOUR
4208-0x15 0x0015 #NEGATIVE ACKNOWLEDGE
4209-0x16 0x0016 #SYNCHRONOUS IDLE
4210-0x17 0x0017 #END OF TRANSMISSION BLOCK
4211-0x18 0x0018 #CANCEL
4212-0x19 0x0019 #END OF MEDIUM
4213-0x1a 0x001a #SUBSTITUTE
4214-0x1b 0x001b #ESCAPE
4215-0x1c 0x001c #INFORMATION SEPARATOR FOUR
4216-0x1d 0x001d #INFORMATION SEPARATOR THREE
4217-0x1e 0x001e #INFORMATION SEPARATOR TWO
4218-0x1f 0x001f #INFORMATION SEPARATOR ONE
4219-0x20 0x0020 #SPACE
4220-0x21 0x0021 #EXCLAMATION MARK
4221-0x22 0x0022 #QUOTATION MARK
4222-0x23 0x0023 #NUMBER SIGN
4223-0x24 0x0024 #DOLLAR SIGN
4224-0x25 0x0025 #PERCENT SIGN
4225-0x26 0x0026 #AMPERSAND
4226-0x27 0x0027 #APOSTROPHE
4227-0x28 0x0028 #LEFT PARENTHESIS
4228-0x29 0x0029 #RIGHT PARENTHESIS
4229-0x2a 0x002a #ASTERISK
4230-0x2b 0x002b #PLUS SIGN
4231-0x2c 0x002c #COMMA
4232-0x2d 0x002d #HYPHEN-MINUS
4233-0x2e 0x002e #FULL STOP
4234-0x2f 0x002f #SOLIDUS
4235-0x30 0x0030 #DIGIT ZERO
4236-0x31 0x0031 #DIGIT ONE
4237-0x32 0x0032 #DIGIT TWO
4238-0x33 0x0033 #DIGIT THREE
4239-0x34 0x0034 #DIGIT FOUR
4240-0x35 0x0035 #DIGIT FIVE
4241-0x36 0x0036 #DIGIT SIX
4242-0x37 0x0037 #DIGIT SEVEN
4243-0x38 0x0038 #DIGIT EIGHT
4244-0x39 0x0039 #DIGIT NINE
4245-0x3a 0x003a #COLON
4246-0x3b 0x003b #SEMICOLON
4247-0x3c 0x003c #LESS-THAN SIGN
4248-0x3d 0x003d #EQUALS SIGN
4249-0x3e 0x003e #GREATER-THAN SIGN
4250-0x3f 0x003f #QUESTION MARK
4251-0x40 0x0040 #COMMERCIAL AT
4252-0x41 0x0041 #LATIN CAPITAL LETTER A
4253-0x42 0x0042 #LATIN CAPITAL LETTER B
4254-0x43 0x0043 #LATIN CAPITAL LETTER C
4255-0x44 0x0044 #LATIN CAPITAL LETTER D
4256-0x45 0x0045 #LATIN CAPITAL LETTER E
4257-0x46 0x0046 #LATIN CAPITAL LETTER F
4258-0x47 0x0047 #LATIN CAPITAL LETTER G
4259-0x48 0x0048 #LATIN CAPITAL LETTER H
4260-0x49 0x0049 #LATIN CAPITAL LETTER I
4261-0x4a 0x004a #LATIN CAPITAL LETTER J
4262-0x4b 0x004b #LATIN CAPITAL LETTER K
4263-0x4c 0x004c #LATIN CAPITAL LETTER L
4264-0x4d 0x004d #LATIN CAPITAL LETTER M
4265-0x4e 0x004e #LATIN CAPITAL LETTER N
4266-0x4f 0x004f #LATIN CAPITAL LETTER O
4267-0x50 0x0050 #LATIN CAPITAL LETTER P
4268-0x51 0x0051 #LATIN CAPITAL LETTER Q
4269-0x52 0x0052 #LATIN CAPITAL LETTER R
4270-0x53 0x0053 #LATIN CAPITAL LETTER S
4271-0x54 0x0054 #LATIN CAPITAL LETTER T
4272-0x55 0x0055 #LATIN CAPITAL LETTER U
4273-0x56 0x0056 #LATIN CAPITAL LETTER V
4274-0x57 0x0057 #LATIN CAPITAL LETTER W
4275-0x58 0x0058 #LATIN CAPITAL LETTER X
4276-0x59 0x0059 #LATIN CAPITAL LETTER Y
4277-0x5a 0x005a #LATIN CAPITAL LETTER Z
4278-0x5b 0x005b #LEFT SQUARE BRACKET
4279-0x5c 0x005c #REVERSE SOLIDUS
4280-0x5d 0x005d #RIGHT SQUARE BRACKET
4281-0x5e 0x005e #CIRCUMFLEX ACCENT
4282-0x5f 0x005f #LOW LINE
4283-0x60 0x0060 #GRAVE ACCENT
4284-0x61 0x0061 #LATIN SMALL LETTER A
4285-0x62 0x0062 #LATIN SMALL LETTER B
4286-0x63 0x0063 #LATIN SMALL LETTER C
4287-0x64 0x0064 #LATIN SMALL LETTER D
4288-0x65 0x0065 #LATIN SMALL LETTER E
4289-0x66 0x0066 #LATIN SMALL LETTER F
4290-0x67 0x0067 #LATIN SMALL LETTER G
4291-0x68 0x0068 #LATIN SMALL LETTER H
4292-0x69 0x0069 #LATIN SMALL LETTER I
4293-0x6a 0x006a #LATIN SMALL LETTER J
4294-0x6b 0x006b #LATIN SMALL LETTER K
4295-0x6c 0x006c #LATIN SMALL LETTER L
4296-0x6d 0x006d #LATIN SMALL LETTER M
4297-0x6e 0x006e #LATIN SMALL LETTER N
4298-0x6f 0x006f #LATIN SMALL LETTER O
4299-0x70 0x0070 #LATIN SMALL LETTER P
4300-0x71 0x0071 #LATIN SMALL LETTER Q
4301-0x72 0x0072 #LATIN SMALL LETTER R
4302-0x73 0x0073 #LATIN SMALL LETTER S
4303-0x74 0x0074 #LATIN SMALL LETTER T
4304-0x75 0x0075 #LATIN SMALL LETTER U
4305-0x76 0x0076 #LATIN SMALL LETTER V
4306-0x77 0x0077 #LATIN SMALL LETTER W
4307-0x78 0x0078 #LATIN SMALL LETTER X
4308-0x79 0x0079 #LATIN SMALL LETTER Y
4309-0x7a 0x007a #LATIN SMALL LETTER Z
4310-0x7b 0x007b #LEFT CURLY BRACKET
4311-0x7c 0x007c #VERTICAL LINE
4312-0x7d 0x007d #RIGHT CURLY BRACKET
4313-0x7e 0x007e #TILDE
4314-0x7f 0x007f #DELETE
4315-0x80 0x00c7 #LATIN CAPITAL LETTER C WITH CEDILLA
4316-0x81 0x00fc #LATIN SMALL LETTER U WITH DIAERESIS
4317-0x82 0x00e9 #LATIN SMALL LETTER E WITH ACUTE
4318-0x83 0x00e2 #LATIN SMALL LETTER A WITH CIRCUMFLEX
4319-0x84 0x00e4 #LATIN SMALL LETTER A WITH DIAERESIS
4320-0x85 0x00e0 #LATIN SMALL LETTER A WITH GRAVE
4321-0x86 0x00e5 #LATIN SMALL LETTER A WITH RING ABOVE
4322-0x87 0x00e7 #LATIN SMALL LETTER C WITH CEDILLA
4323-0x88 0x00ea #LATIN SMALL LETTER E WITH CIRCUMFLEX
4324-0x89 0x00eb #LATIN SMALL LETTER E WITH DIAERESIS
4325-0x8a 0x00e8 #LATIN SMALL LETTER E WITH GRAVE
4326-0x8b 0x00ef #LATIN SMALL LETTER I WITH DIAERESIS
4327-0x8c 0x00ee #LATIN SMALL LETTER I WITH CIRCUMFLEX
4328-0x8d 0x00ec #LATIN SMALL LETTER I WITH GRAVE
4329-0x8e 0x00c4 #LATIN CAPITAL LETTER A WITH DIAERESIS
4330-0x8f 0x00c5 #LATIN CAPITAL LETTER A WITH RING ABOVE
4331-0x90 0x00c9 #LATIN CAPITAL LETTER E WITH ACUTE
4332-0x91 0x00e6 #LATIN SMALL LETTER AE
4333-0x92 0x00c6 #LATIN CAPITAL LETTER AE
4334-0x93 0x00f4 #LATIN SMALL LETTER O WITH CIRCUMFLEX
4335-0x94 0x00f6 #LATIN SMALL LETTER O WITH DIAERESIS
4336-0x95 0x00f2 #LATIN SMALL LETTER O WITH GRAVE
4337-0x96 0x00fb #LATIN SMALL LETTER U WITH CIRCUMFLEX
4338-0x97 0x00f9 #LATIN SMALL LETTER U WITH GRAVE
4339-0x98 0x00ff #LATIN SMALL LETTER Y WITH DIAERESIS
4340-0x99 0x00d6 #LATIN CAPITAL LETTER O WITH DIAERESIS
4341-0x9a 0x00dc #LATIN CAPITAL LETTER U WITH DIAERESIS
4342-0x9b 0x00a2 #CENT SIGN
4343-0x9c 0x00a3 #POUND SIGN
4344-0x9d 0x00a5 #YEN SIGN
4345-0x9e 0x20a7 #PESETA SIGN
4346-0x9f 0x0192 #LATIN SMALL LETTER F WITH HOOK
4347-0xa0 0x00e1 #LATIN SMALL LETTER A WITH ACUTE
4348-0xa1 0x00ed #LATIN SMALL LETTER I WITH ACUTE
4349-0xa2 0x00f3 #LATIN SMALL LETTER O WITH ACUTE
4350-0xa3 0x00fa #LATIN SMALL LETTER U WITH ACUTE
4351-0xa4 0x00f1 #LATIN SMALL LETTER N WITH TILDE
4352-0xa5 0x00d1 #LATIN CAPITAL LETTER N WITH TILDE
4353-0xa6 0x00aa #FEMININE ORDINAL INDICATOR
4354-0xa7 0x00ba #MASCULINE ORDINAL INDICATOR
4355-0xa8 0x00bf #INVERTED QUESTION MARK
4356-0xa9 0x2310 #REVERSED NOT SIGN
4357-0xaa 0x00ac #NOT SIGN
4358-0xab 0x00bd #VULGAR FRACTION ONE HALF
4359-0xac 0x00bc #VULGAR FRACTION ONE QUARTER
4360-0xad 0x00a1 #INVERTED EXCLAMATION MARK
4361-0xae 0x00ab #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
4362-0xaf 0x00bb #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
4363-0xb0 0x2591 #LIGHT SHADE
4364-0xb1 0x2592 #MEDIUM SHADE
4365-0xb2 0x2593 #DARK SHADE
4366-0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL
4367-0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT
4368-0xb5 0x2561 #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
4369-0xb6 0x2562 #BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
4370-0xb7 0x2556 #BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
4371-0xb8 0x2555 #BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
4372-0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT
4373-0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL
4374-0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT
4375-0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT
4376-0xbd 0x255c #BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
4377-0xbe 0x255b #BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
4378-0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT
4379-0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT
4380-0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL
4381-0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
4382-0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT
4383-0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL
4384-0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
4385-0xc6 0x255e #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
4386-0xc7 0x255f #BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
4387-0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT
4388-0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT
4389-0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL
4390-0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
4391-0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
4392-0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL
4393-0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
4394-0xcf 0x2567 #BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
4395-0xd0 0x2568 #BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
4396-0xd1 0x2564 #BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
4397-0xd2 0x2565 #BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
4398-0xd3 0x2559 #BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
4399-0xd4 0x2558 #BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
4400-0xd5 0x2552 #BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
4401-0xd6 0x2553 #BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
4402-0xd7 0x256b #BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
4403-0xd8 0x256a #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
4404-0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT
4405-0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT
4406-0xdb 0x2588 #FULL BLOCK
4407-0xdc 0x2584 #LOWER HALF BLOCK
4408-0xdd 0x258c #LEFT HALF BLOCK
4409-0xde 0x2590 #RIGHT HALF BLOCK
4410-0xdf 0x2580 #UPPER HALF BLOCK
4411-0xe0 0x03b1 #GREEK SMALL LETTER ALPHA
4412-0xe1 0x00df #LATIN SMALL LETTER SHARP S
4413-0xe2 0x0393 #GREEK CAPITAL LETTER GAMMA
4414-0xe3 0x03c0 #GREEK SMALL LETTER PI
4415-0xe4 0x03a3 #GREEK CAPITAL LETTER SIGMA
4416-0xe5 0x03c3 #GREEK SMALL LETTER SIGMA
4417-0xe6 0x00b5 #MICRO SIGN
4418-0xe7 0x03c4 #GREEK SMALL LETTER TAU
4419-0xe8 0x03a6 #GREEK CAPITAL LETTER PHI
4420-0xe9 0x0398 #GREEK CAPITAL LETTER THETA
4421-0xea 0x03a9 #GREEK CAPITAL LETTER OMEGA
4422-0xeb 0x03b4 #GREEK SMALL LETTER DELTA
4423-0xec 0x221e #INFINITY
4424-0xed 0x03c6 #GREEK SMALL LETTER PHI
4425-0xee 0x03b5 #GREEK SMALL LETTER EPSILON
4426-0xef 0x2229 #INTERSECTION
4427-0xf0 0x2261 #IDENTICAL TO
4428-0xf1 0x00b1 #PLUS-MINUS SIGN
4429-0xf2 0x2265 #GREATER-THAN OR EQUAL TO
4430-0xf3 0x2264 #LESS-THAN OR EQUAL TO
4431-0xf4 0x2320 #TOP HALF INTEGRAL
4432-0xf5 0x2321 #BOTTOM HALF INTEGRAL
4433-0xf6 0x00f7 #DIVISION SIGN
4434-0xf7 0x2248 #ALMOST EQUAL TO
4435-0xf8 0x00b0 #DEGREE SIGN
4436-0xf9 0x2219 #BULLET OPERATOR
4437-0xfa 0x00b7 #MIDDLE DOT
4438-0xfb 0x221a #SQUARE ROOT
4439-0xfc 0x207f #SUPERSCRIPT LATIN SMALL LETTER N
4440-0xfd 0x00b2 #SUPERSCRIPT TWO
4441-0xfe 0x25a0 #BLACK SQUARE
4442-0xff 0x00a0 #NO-BREAK SPACE
4443-
4444
4445 * The contents of this file are subject to the Interbase Public
4446 * License Version 1.0 (the "License"); you may not use this file
4447diff --git a/src/intl/charsets/cs_737.h b/src/intl/charsets/cs_737.h
4448index 7f34bc7..d569532 100644
4449--- a/src/intl/charsets/cs_737.h
4450+++ b/src/intl/charsets/cs_737.h
4451@@ -3,274 +3,8 @@
4452
4453 Unicode mapping table generated from java mapping and UnicodeData.txt
4454
4455-#
4456 # Name: Cp737 to Unicode table
4457 # Unicode version: Java 1.3
4458-#
4459-# Format: Three tab-separated columns
4460-# Column #1 is the Cp737 code (in hex)
4461-# Column #2 is the Unicode (in hex as 0xXXXX)
4462-# Column #3 is the Unicode name (follows a comment sign, '#')
4463-#
4464-# The entries are in Cp737 order
4465-#
4466-0x00 0x0000 #NULL
4467-0x01 0x0001 #START OF HEADING
4468-0x02 0x0002 #START OF TEXT
4469-0x03 0x0003 #END OF TEXT
4470-0x04 0x0004 #END OF TRANSMISSION
4471-0x05 0x0005 #ENQUIRY
4472-0x06 0x0006 #ACKNOWLEDGE
4473-0x07 0x0007 #BELL
4474-0x08 0x0008 #BACKSPACE
4475-0x09 0x0009 #CHARACTER TABULATION
4476-0x0a 0x000a #LINE FEED (LF)
4477-0x0b 0x000b #LINE TABULATION
4478-0x0c 0x000c #FORM FEED (FF)
4479-0x0d 0x000d #CARRIAGE RETURN (CR)
4480-0x0e 0x000e #SHIFT OUT
4481-0x0f 0x000f #SHIFT IN
4482-0x10 0x0010 #DATA LINK ESCAPE
4483-0x11 0x0011 #DEVICE CONTROL ONE
4484-0x12 0x0012 #DEVICE CONTROL TWO
4485-0x13 0x0013 #DEVICE CONTROL THREE
4486-0x14 0x0014 #DEVICE CONTROL FOUR
4487-0x15 0x0015 #NEGATIVE ACKNOWLEDGE
4488-0x16 0x0016 #SYNCHRONOUS IDLE
4489-0x17 0x0017 #END OF TRANSMISSION BLOCK
4490-0x18 0x0018 #CANCEL
4491-0x19 0x0019 #END OF MEDIUM
4492-0x1a 0x001a #SUBSTITUTE
4493-0x1b 0x001b #ESCAPE
4494-0x1c 0x001c #INFORMATION SEPARATOR FOUR
4495-0x1d 0x001d #INFORMATION SEPARATOR THREE
4496-0x1e 0x001e #INFORMATION SEPARATOR TWO
4497-0x1f 0x001f #INFORMATION SEPARATOR ONE
4498-0x20 0x0020 #SPACE
4499-0x21 0x0021 #EXCLAMATION MARK
4500-0x22 0x0022 #QUOTATION MARK
4501-0x23 0x0023 #NUMBER SIGN
4502-0x24 0x0024 #DOLLAR SIGN
4503-0x25 0x0025 #PERCENT SIGN
4504-0x26 0x0026 #AMPERSAND
4505-0x27 0x0027 #APOSTROPHE
4506-0x28 0x0028 #LEFT PARENTHESIS
4507-0x29 0x0029 #RIGHT PARENTHESIS
4508-0x2a 0x002a #ASTERISK
4509-0x2b 0x002b #PLUS SIGN
4510-0x2c 0x002c #COMMA
4511-0x2d 0x002d #HYPHEN-MINUS
4512-0x2e 0x002e #FULL STOP
4513-0x2f 0x002f #SOLIDUS
4514-0x30 0x0030 #DIGIT ZERO
4515-0x31 0x0031 #DIGIT ONE
4516-0x32 0x0032 #DIGIT TWO
4517-0x33 0x0033 #DIGIT THREE
4518-0x34 0x0034 #DIGIT FOUR
4519-0x35 0x0035 #DIGIT FIVE
4520-0x36 0x0036 #DIGIT SIX
4521-0x37 0x0037 #DIGIT SEVEN
4522-0x38 0x0038 #DIGIT EIGHT
4523-0x39 0x0039 #DIGIT NINE
4524-0x3a 0x003a #COLON
4525-0x3b 0x003b #SEMICOLON
4526-0x3c 0x003c #LESS-THAN SIGN
4527-0x3d 0x003d #EQUALS SIGN
4528-0x3e 0x003e #GREATER-THAN SIGN
4529-0x3f 0x003f #QUESTION MARK
4530-0x40 0x0040 #COMMERCIAL AT
4531-0x41 0x0041 #LATIN CAPITAL LETTER A
4532-0x42 0x0042 #LATIN CAPITAL LETTER B
4533-0x43 0x0043 #LATIN CAPITAL LETTER C
4534-0x44 0x0044 #LATIN CAPITAL LETTER D
4535-0x45 0x0045 #LATIN CAPITAL LETTER E
4536-0x46 0x0046 #LATIN CAPITAL LETTER F
4537-0x47 0x0047 #LATIN CAPITAL LETTER G
4538-0x48 0x0048 #LATIN CAPITAL LETTER H
4539-0x49 0x0049 #LATIN CAPITAL LETTER I
4540-0x4a 0x004a #LATIN CAPITAL LETTER J
4541-0x4b 0x004b #LATIN CAPITAL LETTER K
4542-0x4c 0x004c #LATIN CAPITAL LETTER L
4543-0x4d 0x004d #LATIN CAPITAL LETTER M
4544-0x4e 0x004e #LATIN CAPITAL LETTER N
4545-0x4f 0x004f #LATIN CAPITAL LETTER O
4546-0x50 0x0050 #LATIN CAPITAL LETTER P
4547-0x51 0x0051 #LATIN CAPITAL LETTER Q
4548-0x52 0x0052 #LATIN CAPITAL LETTER R
4549-0x53 0x0053 #LATIN CAPITAL LETTER S
4550-0x54 0x0054 #LATIN CAPITAL LETTER T
4551-0x55 0x0055 #LATIN CAPITAL LETTER U
4552-0x56 0x0056 #LATIN CAPITAL LETTER V
4553-0x57 0x0057 #LATIN CAPITAL LETTER W
4554-0x58 0x0058 #LATIN CAPITAL LETTER X
4555-0x59 0x0059 #LATIN CAPITAL LETTER Y
4556-0x5a 0x005a #LATIN CAPITAL LETTER Z
4557-0x5b 0x005b #LEFT SQUARE BRACKET
4558-0x5c 0x005c #REVERSE SOLIDUS
4559-0x5d 0x005d #RIGHT SQUARE BRACKET
4560-0x5e 0x005e #CIRCUMFLEX ACCENT
4561-0x5f 0x005f #LOW LINE
4562-0x60 0x0060 #GRAVE ACCENT
4563-0x61 0x0061 #LATIN SMALL LETTER A
4564-0x62 0x0062 #LATIN SMALL LETTER B
4565-0x63 0x0063 #LATIN SMALL LETTER C
4566-0x64 0x0064 #LATIN SMALL LETTER D
4567-0x65 0x0065 #LATIN SMALL LETTER E
4568-0x66 0x0066 #LATIN SMALL LETTER F
4569-0x67 0x0067 #LATIN SMALL LETTER G
4570-0x68 0x0068 #LATIN SMALL LETTER H
4571-0x69 0x0069 #LATIN SMALL LETTER I
4572-0x6a 0x006a #LATIN SMALL LETTER J
4573-0x6b 0x006b #LATIN SMALL LETTER K
4574-0x6c 0x006c #LATIN SMALL LETTER L
4575-0x6d 0x006d #LATIN SMALL LETTER M
4576-0x6e 0x006e #LATIN SMALL LETTER N
4577-0x6f 0x006f #LATIN SMALL LETTER O
4578-0x70 0x0070 #LATIN SMALL LETTER P
4579-0x71 0x0071 #LATIN SMALL LETTER Q
4580-0x72 0x0072 #LATIN SMALL LETTER R
4581-0x73 0x0073 #LATIN SMALL LETTER S
4582-0x74 0x0074 #LATIN SMALL LETTER T
4583-0x75 0x0075 #LATIN SMALL LETTER U
4584-0x76 0x0076 #LATIN SMALL LETTER V
4585-0x77 0x0077 #LATIN SMALL LETTER W
4586-0x78 0x0078 #LATIN SMALL LETTER X
4587-0x79 0x0079 #LATIN SMALL LETTER Y
4588-0x7a 0x007a #LATIN SMALL LETTER Z
4589-0x7b 0x007b #LEFT CURLY BRACKET
4590-0x7c 0x007c #VERTICAL LINE
4591-0x7d 0x007d #RIGHT CURLY BRACKET
4592-0x7e 0x007e #TILDE
4593-0x7f 0x007f #DELETE
4594-0x80 0x0391 #GREEK CAPITAL LETTER ALPHA
4595-0x81 0x0392 #GREEK CAPITAL LETTER BETA
4596-0x82 0x0393 #GREEK CAPITAL LETTER GAMMA
4597-0x83 0x0394 #GREEK CAPITAL LETTER DELTA
4598-0x84 0x0395 #GREEK CAPITAL LETTER EPSILON
4599-0x85 0x0396 #GREEK CAPITAL LETTER ZETA
4600-0x86 0x0397 #GREEK CAPITAL LETTER ETA
4601-0x87 0x0398 #GREEK CAPITAL LETTER THETA
4602-0x88 0x0399 #GREEK CAPITAL LETTER IOTA
4603-0x89 0x039a #GREEK CAPITAL LETTER KAPPA
4604-0x8a 0x039b #GREEK CAPITAL LETTER LAMDA
4605-0x8b 0x039c #GREEK CAPITAL LETTER MU
4606-0x8c 0x039d #GREEK CAPITAL LETTER NU
4607-0x8d 0x039e #GREEK CAPITAL LETTER XI
4608-0x8e 0x039f #GREEK CAPITAL LETTER OMICRON
4609-0x8f 0x03a0 #GREEK CAPITAL LETTER PI
4610-0x90 0x03a1 #GREEK CAPITAL LETTER RHO
4611-0x91 0x03a3 #GREEK CAPITAL LETTER SIGMA
4612-0x92 0x03a4 #GREEK CAPITAL LETTER TAU
4613-0x93 0x03a5 #GREEK CAPITAL LETTER UPSILON
4614-0x94 0x03a6 #GREEK CAPITAL LETTER PHI
4615-0x95 0x03a7 #GREEK CAPITAL LETTER CHI
4616-0x96 0x03a8 #GREEK CAPITAL LETTER PSI
4617-0x97 0x03a9 #GREEK CAPITAL LETTER OMEGA
4618-0x98 0x03b1 #GREEK SMALL LETTER ALPHA
4619-0x99 0x03b2 #GREEK SMALL LETTER BETA
4620-0x9a 0x03b3 #GREEK SMALL LETTER GAMMA
4621-0x9b 0x03b4 #GREEK SMALL LETTER DELTA
4622-0x9c 0x03b5 #GREEK SMALL LETTER EPSILON
4623-0x9d 0x03b6 #GREEK SMALL LETTER ZETA
4624-0x9e 0x03b7 #GREEK SMALL LETTER ETA
4625-0x9f 0x03b8 #GREEK SMALL LETTER THETA
4626-0xa0 0x03b9 #GREEK SMALL LETTER IOTA
4627-0xa1 0x03ba #GREEK SMALL LETTER KAPPA
4628-0xa2 0x03bb #GREEK SMALL LETTER LAMDA
4629-0xa3 0x03bc #GREEK SMALL LETTER MU
4630-0xa4 0x03bd #GREEK SMALL LETTER NU
4631-0xa5 0x03be #GREEK SMALL LETTER XI
4632-0xa6 0x03bf #GREEK SMALL LETTER OMICRON
4633-0xa7 0x03c0 #GREEK SMALL LETTER PI
4634-0xa8 0x03c1 #GREEK SMALL LETTER RHO
4635-0xa9 0x03c3 #GREEK SMALL LETTER SIGMA
4636-0xaa 0x03c2 #GREEK SMALL LETTER FINAL SIGMA
4637-0xab 0x03c4 #GREEK SMALL LETTER TAU
4638-0xac 0x03c5 #GREEK SMALL LETTER UPSILON
4639-0xad 0x03c6 #GREEK SMALL LETTER PHI
4640-0xae 0x03c7 #GREEK SMALL LETTER CHI
4641-0xaf 0x03c8 #GREEK SMALL LETTER PSI
4642-0xb0 0x2591 #LIGHT SHADE
4643-0xb1 0x2592 #MEDIUM SHADE
4644-0xb2 0x2593 #DARK SHADE
4645-0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL
4646-0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT
4647-0xb5 0x2561 #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
4648-0xb6 0x2562 #BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
4649-0xb7 0x2556 #BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
4650-0xb8 0x2555 #BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
4651-0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT
4652-0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL
4653-0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT
4654-0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT
4655-0xbd 0x255c #BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
4656-0xbe 0x255b #BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
4657-0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT
4658-0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT
4659-0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL
4660-0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
4661-0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT
4662-0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL
4663-0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
4664-0xc6 0x255e #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
4665-0xc7 0x255f #BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
4666-0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT
4667-0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT
4668-0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL
4669-0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
4670-0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
4671-0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL
4672-0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
4673-0xcf 0x2567 #BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
4674-0xd0 0x2568 #BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
4675-0xd1 0x2564 #BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
4676-0xd2 0x2565 #BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
4677-0xd3 0x2559 #BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
4678-0xd4 0x2558 #BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
4679-0xd5 0x2552 #BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
4680-0xd6 0x2553 #BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
4681-0xd7 0x256b #BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
4682-0xd8 0x256a #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
4683-0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT
4684-0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT
4685-0xdb 0x2588 #FULL BLOCK
4686-0xdc 0x2584 #LOWER HALF BLOCK
4687-0xdd 0x258c #LEFT HALF BLOCK
4688-0xde 0x2590 #RIGHT HALF BLOCK
4689-0xdf 0x2580 #UPPER HALF BLOCK
4690-0xe0 0x03c9 #GREEK SMALL LETTER OMEGA
4691-0xe1 0x03ac #GREEK SMALL LETTER ALPHA WITH TONOS
4692-0xe2 0x03ad #GREEK SMALL LETTER EPSILON WITH TONOS
4693-0xe3 0x03ae #GREEK SMALL LETTER ETA WITH TONOS
4694-0xe4 0x03ca #GREEK SMALL LETTER IOTA WITH DIALYTIKA
4695-0xe5 0x03af #GREEK SMALL LETTER IOTA WITH TONOS
4696-0xe6 0x03cc #GREEK SMALL LETTER OMICRON WITH TONOS
4697-0xe7 0x03cd #GREEK SMALL LETTER UPSILON WITH TONOS
4698-0xe8 0x03cb #GREEK SMALL LETTER UPSILON WITH DIALYTIKA
4699-0xe9 0x03ce #GREEK SMALL LETTER OMEGA WITH TONOS
4700-0xea 0x0386 #GREEK CAPITAL LETTER ALPHA WITH TONOS
4701-0xeb 0x0388 #GREEK CAPITAL LETTER EPSILON WITH TONOS
4702-0xec 0x0389 #GREEK CAPITAL LETTER ETA WITH TONOS
4703-0xed 0x038a #GREEK CAPITAL LETTER IOTA WITH TONOS
4704-0xee 0x038c #GREEK CAPITAL LETTER OMICRON WITH TONOS
4705-0xef 0x038e #GREEK CAPITAL LETTER UPSILON WITH TONOS
4706-0xf0 0x038f #GREEK CAPITAL LETTER OMEGA WITH TONOS
4707-0xf1 0x00b1 #PLUS-MINUS SIGN
4708-0xf2 0x2265 #GREATER-THAN OR EQUAL TO
4709-0xf3 0x2264 #LESS-THAN OR EQUAL TO
4710-0xf4 0x03aa #GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
4711-0xf5 0x03ab #GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
4712-0xf6 0x00f7 #DIVISION SIGN
4713-0xf7 0x2248 #ALMOST EQUAL TO
4714-0xf8 0x00b0 #DEGREE SIGN
4715-0xf9 0x2219 #BULLET OPERATOR
4716-0xfa 0x00b7 #MIDDLE DOT
4717-0xfb 0x221a #SQUARE ROOT
4718-0xfc 0x207f #SUPERSCRIPT LATIN SMALL LETTER N
4719-0xfd 0x00b2 #SUPERSCRIPT TWO
4720-0xfe 0x25a0 #BLACK SQUARE
4721-0xff 0x00a0 #NO-BREAK SPACE
4722-
4723
4724 * The contents of this file are subject to the Interbase Public
4725 * License Version 1.0 (the "License"); you may not use this file
4726diff --git a/src/intl/charsets/cs_775.h b/src/intl/charsets/cs_775.h
4727index f0eb0bb..d387ff0 100644
4728--- a/src/intl/charsets/cs_775.h
4729+++ b/src/intl/charsets/cs_775.h
4730@@ -3,274 +3,8 @@
4731
4732 Unicode mapping table generated from java mapping and UnicodeData.txt
4733
4734-#
4735 # Name: Cp775 to Unicode table
4736 # Unicode version: Java 1.3
4737-#
4738-# Format: Three tab-separated columns
4739-# Column #1 is the Cp775 code (in hex)
4740-# Column #2 is the Unicode (in hex as 0xXXXX)
4741-# Column #3 is the Unicode name (follows a comment sign, '#')
4742-#
4743-# The entries are in Cp775 order
4744-#
4745-0x00 0x0000 #NULL
4746-0x01 0x0001 #START OF HEADING
4747-0x02 0x0002 #START OF TEXT
4748-0x03 0x0003 #END OF TEXT
4749-0x04 0x0004 #END OF TRANSMISSION
4750-0x05 0x0005 #ENQUIRY
4751-0x06 0x0006 #ACKNOWLEDGE
4752-0x07 0x0007 #BELL
4753-0x08 0x0008 #BACKSPACE
4754-0x09 0x0009 #CHARACTER TABULATION
4755-0x0a 0x000a #LINE FEED (LF)
4756-0x0b 0x000b #LINE TABULATION
4757-0x0c 0x000c #FORM FEED (FF)
4758-0x0d 0x000d #CARRIAGE RETURN (CR)
4759-0x0e 0x000e #SHIFT OUT
4760-0x0f 0x000f #SHIFT IN
4761-0x10 0x0010 #DATA LINK ESCAPE
4762-0x11 0x0011 #DEVICE CONTROL ONE
4763-0x12 0x0012 #DEVICE CONTROL TWO
4764-0x13 0x0013 #DEVICE CONTROL THREE
4765-0x14 0x0014 #DEVICE CONTROL FOUR
4766-0x15 0x0015 #NEGATIVE ACKNOWLEDGE
4767-0x16 0x0016 #SYNCHRONOUS IDLE
4768-0x17 0x0017 #END OF TRANSMISSION BLOCK
4769-0x18 0x0018 #CANCEL
4770-0x19 0x0019 #END OF MEDIUM
4771-0x1a 0x001a #SUBSTITUTE
4772-0x1b 0x001b #ESCAPE
4773-0x1c 0x001c #INFORMATION SEPARATOR FOUR
4774-0x1d 0x001d #INFORMATION SEPARATOR THREE
4775-0x1e 0x001e #INFORMATION SEPARATOR TWO
4776-0x1f 0x001f #INFORMATION SEPARATOR ONE
4777-0x20 0x0020 #SPACE
4778-0x21 0x0021 #EXCLAMATION MARK
4779-0x22 0x0022 #QUOTATION MARK
4780-0x23 0x0023 #NUMBER SIGN
4781-0x24 0x0024 #DOLLAR SIGN
4782-0x25 0x0025 #PERCENT SIGN
4783-0x26 0x0026 #AMPERSAND
4784-0x27 0x0027 #APOSTROPHE
4785-0x28 0x0028 #LEFT PARENTHESIS
4786-0x29 0x0029 #RIGHT PARENTHESIS
4787-0x2a 0x002a #ASTERISK
4788-0x2b 0x002b #PLUS SIGN
4789-0x2c 0x002c #COMMA
4790-0x2d 0x002d #HYPHEN-MINUS
4791-0x2e 0x002e #FULL STOP
4792-0x2f 0x002f #SOLIDUS
4793-0x30 0x0030 #DIGIT ZERO
4794-0x31 0x0031 #DIGIT ONE
4795-0x32 0x0032 #DIGIT TWO
4796-0x33 0x0033 #DIGIT THREE
4797-0x34 0x0034 #DIGIT FOUR
4798-0x35 0x0035 #DIGIT FIVE
4799-0x36 0x0036 #DIGIT SIX
4800-0x37 0x0037 #DIGIT SEVEN
4801-0x38 0x0038 #DIGIT EIGHT
4802-0x39 0x0039 #DIGIT NINE
4803-0x3a 0x003a #COLON
4804-0x3b 0x003b #SEMICOLON
4805-0x3c 0x003c #LESS-THAN SIGN
4806-0x3d 0x003d #EQUALS SIGN
4807-0x3e 0x003e #GREATER-THAN SIGN
4808-0x3f 0x003f #QUESTION MARK
4809-0x40 0x0040 #COMMERCIAL AT
4810-0x41 0x0041 #LATIN CAPITAL LETTER A
4811-0x42 0x0042 #LATIN CAPITAL LETTER B
4812-0x43 0x0043 #LATIN CAPITAL LETTER C
4813-0x44 0x0044 #LATIN CAPITAL LETTER D
4814-0x45 0x0045 #LATIN CAPITAL LETTER E
4815-0x46 0x0046 #LATIN CAPITAL LETTER F
4816-0x47 0x0047 #LATIN CAPITAL LETTER G
4817-0x48 0x0048 #LATIN CAPITAL LETTER H
4818-0x49 0x0049 #LATIN CAPITAL LETTER I
4819-0x4a 0x004a #LATIN CAPITAL LETTER J
4820-0x4b 0x004b #LATIN CAPITAL LETTER K
4821-0x4c 0x004c #LATIN CAPITAL LETTER L
4822-0x4d 0x004d #LATIN CAPITAL LETTER M
4823-0x4e 0x004e #LATIN CAPITAL LETTER N
4824-0x4f 0x004f #LATIN CAPITAL LETTER O
4825-0x50 0x0050 #LATIN CAPITAL LETTER P
4826-0x51 0x0051 #LATIN CAPITAL LETTER Q
4827-0x52 0x0052 #LATIN CAPITAL LETTER R
4828-0x53 0x0053 #LATIN CAPITAL LETTER S
4829-0x54 0x0054 #LATIN CAPITAL LETTER T
4830-0x55 0x0055 #LATIN CAPITAL LETTER U
4831-0x56 0x0056 #LATIN CAPITAL LETTER V
4832-0x57 0x0057 #LATIN CAPITAL LETTER W
4833-0x58 0x0058 #LATIN CAPITAL LETTER X
4834-0x59 0x0059 #LATIN CAPITAL LETTER Y
4835-0x5a 0x005a #LATIN CAPITAL LETTER Z
4836-0x5b 0x005b #LEFT SQUARE BRACKET
4837-0x5c 0x005c #REVERSE SOLIDUS
4838-0x5d 0x005d #RIGHT SQUARE BRACKET
4839-0x5e 0x005e #CIRCUMFLEX ACCENT
4840-0x5f 0x005f #LOW LINE
4841-0x60 0x0060 #GRAVE ACCENT
4842-0x61 0x0061 #LATIN SMALL LETTER A
4843-0x62 0x0062 #LATIN SMALL LETTER B
4844-0x63 0x0063 #LATIN SMALL LETTER C
4845-0x64 0x0064 #LATIN SMALL LETTER D
4846-0x65 0x0065 #LATIN SMALL LETTER E
4847-0x66 0x0066 #LATIN SMALL LETTER F
4848-0x67 0x0067 #LATIN SMALL LETTER G
4849-0x68 0x0068 #LATIN SMALL LETTER H
4850-0x69 0x0069 #LATIN SMALL LETTER I
4851-0x6a 0x006a #LATIN SMALL LETTER J
4852-0x6b 0x006b #LATIN SMALL LETTER K
4853-0x6c 0x006c #LATIN SMALL LETTER L
4854-0x6d 0x006d #LATIN SMALL LETTER M
4855-0x6e 0x006e #LATIN SMALL LETTER N
4856-0x6f 0x006f #LATIN SMALL LETTER O
4857-0x70 0x0070 #LATIN SMALL LETTER P
4858-0x71 0x0071 #LATIN SMALL LETTER Q
4859-0x72 0x0072 #LATIN SMALL LETTER R
4860-0x73 0x0073 #LATIN SMALL LETTER S
4861-0x74 0x0074 #LATIN SMALL LETTER T
4862-0x75 0x0075 #LATIN SMALL LETTER U
4863-0x76 0x0076 #LATIN SMALL LETTER V
4864-0x77 0x0077 #LATIN SMALL LETTER W
4865-0x78 0x0078 #LATIN SMALL LETTER X
4866-0x79 0x0079 #LATIN SMALL LETTER Y
4867-0x7a 0x007a #LATIN SMALL LETTER Z
4868-0x7b 0x007b #LEFT CURLY BRACKET
4869-0x7c 0x007c #VERTICAL LINE
4870-0x7d 0x007d #RIGHT CURLY BRACKET
4871-0x7e 0x007e #TILDE
4872-0x7f 0x007f #DELETE
4873-0x80 0x0106 #LATIN CAPITAL LETTER C WITH ACUTE
4874-0x81 0x00fc #LATIN SMALL LETTER U WITH DIAERESIS
4875-0x82 0x00e9 #LATIN SMALL LETTER E WITH ACUTE
4876-0x83 0x0101 #LATIN SMALL LETTER A WITH MACRON
4877-0x84 0x00e4 #LATIN SMALL LETTER A WITH DIAERESIS
4878-0x85 0x0123 #LATIN SMALL LETTER G WITH CEDILLA
4879-0x86 0x00e5 #LATIN SMALL LETTER A WITH RING ABOVE
4880-0x87 0x0107 #LATIN SMALL LETTER C WITH ACUTE
4881-0x88 0x0142 #LATIN SMALL LETTER L WITH STROKE
4882-0x89 0x0113 #LATIN SMALL LETTER E WITH MACRON
4883-0x8a 0x0156 #LATIN CAPITAL LETTER R WITH CEDILLA
4884-0x8b 0x0157 #LATIN SMALL LETTER R WITH CEDILLA
4885-0x8c 0x012b #LATIN SMALL LETTER I WITH MACRON
4886-0x8d 0x0179 #LATIN CAPITAL LETTER Z WITH ACUTE
4887-0x8e 0x00c4 #LATIN CAPITAL LETTER A WITH DIAERESIS
4888-0x8f 0x00c5 #LATIN CAPITAL LETTER A WITH RING ABOVE
4889-0x90 0x00c9 #LATIN CAPITAL LETTER E WITH ACUTE
4890-0x91 0x00e6 #LATIN SMALL LETTER AE
4891-0x92 0x00c6 #LATIN CAPITAL LETTER AE
4892-0x93 0x014d #LATIN SMALL LETTER O WITH MACRON
4893-0x94 0x00f6 #LATIN SMALL LETTER O WITH DIAERESIS
4894-0x95 0x0122 #LATIN CAPITAL LETTER G WITH CEDILLA
4895-0x96 0x00a2 #CENT SIGN
4896-0x97 0x015a #LATIN CAPITAL LETTER S WITH ACUTE
4897-0x98 0x015b #LATIN SMALL LETTER S WITH ACUTE
4898-0x99 0x00d6 #LATIN CAPITAL LETTER O WITH DIAERESIS
4899-0x9a 0x00dc #LATIN CAPITAL LETTER U WITH DIAERESIS
4900-0x9b 0x00f8 #LATIN SMALL LETTER O WITH STROKE
4901-0x9c 0x00a3 #POUND SIGN
4902-0x9d 0x00d8 #LATIN CAPITAL LETTER O WITH STROKE
4903-0x9e 0x00d7 #MULTIPLICATION SIGN
4904-0x9f 0x00a4 #CURRENCY SIGN
4905-0xa0 0x0100 #LATIN CAPITAL LETTER A WITH MACRON
4906-0xa1 0x012a #LATIN CAPITAL LETTER I WITH MACRON
4907-0xa2 0x00f3 #LATIN SMALL LETTER O WITH ACUTE
4908-0xa3 0x017b #LATIN CAPITAL LETTER Z WITH DOT ABOVE
4909-0xa4 0x017c #LATIN SMALL LETTER Z WITH DOT ABOVE
4910-0xa5 0x017a #LATIN SMALL LETTER Z WITH ACUTE
4911-0xa6 0x201d #RIGHT DOUBLE QUOTATION MARK
4912-0xa7 0x00a6 #BROKEN BAR
4913-0xa8 0x00a9 #COPYRIGHT SIGN
4914-0xa9 0x00ae #REGISTERED SIGN
4915-0xaa 0x00ac #NOT SIGN
4916-0xab 0x00bd #VULGAR FRACTION ONE HALF
4917-0xac 0x00bc #VULGAR FRACTION ONE QUARTER
4918-0xad 0x0141 #LATIN CAPITAL LETTER L WITH STROKE
4919-0xae 0x00ab #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
4920-0xaf 0x00bb #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
4921-0xb0 0x2591 #LIGHT SHADE
4922-0xb1 0x2592 #MEDIUM SHADE
4923-0xb2 0x2593 #DARK SHADE
4924-0xb3 0x2502 #BOX DRAWINGS LIGHT VERTICAL
4925-0xb4 0x2524 #BOX DRAWINGS LIGHT VERTICAL AND LEFT
4926-0xb5 0x0104 #LATIN CAPITAL LETTER A WITH OGONEK
4927-0xb6 0x010c #LATIN CAPITAL LETTER C WITH CARON
4928-0xb7 0x0118 #LATIN CAPITAL LETTER E WITH OGONEK
4929-0xb8 0x0116 #LATIN CAPITAL LETTER E WITH DOT ABOVE
4930-0xb9 0x2563 #BOX DRAWINGS DOUBLE VERTICAL AND LEFT
4931-0xba 0x2551 #BOX DRAWINGS DOUBLE VERTICAL
4932-0xbb 0x2557 #BOX DRAWINGS DOUBLE DOWN AND LEFT
4933-0xbc 0x255d #BOX DRAWINGS DOUBLE UP AND LEFT
4934-0xbd 0x012e #LATIN CAPITAL LETTER I WITH OGONEK
4935-0xbe 0x0160 #LATIN CAPITAL LETTER S WITH CARON
4936-0xbf 0x2510 #BOX DRAWINGS LIGHT DOWN AND LEFT
4937-0xc0 0x2514 #BOX DRAWINGS LIGHT UP AND RIGHT
4938-0xc1 0x2534 #BOX DRAWINGS LIGHT UP AND HORIZONTAL
4939-0xc2 0x252c #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
4940-0xc3 0x251c #BOX DRAWINGS LIGHT VERTICAL AND RIGHT
4941-0xc4 0x2500 #BOX DRAWINGS LIGHT HORIZONTAL
4942-0xc5 0x253c #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
4943-0xc6 0x0172 #LATIN CAPITAL LETTER U WITH OGONEK
4944-0xc7 0x016a #LATIN CAPITAL LETTER U WITH MACRON
4945-0xc8 0x255a #BOX DRAWINGS DOUBLE UP AND RIGHT
4946-0xc9 0x2554 #BOX DRAWINGS DOUBLE DOWN AND RIGHT
4947-0xca 0x2569 #BOX DRAWINGS DOUBLE UP AND HORIZONTAL
4948-0xcb 0x2566 #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
4949-0xcc 0x2560 #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
4950-0xcd 0x2550 #BOX DRAWINGS DOUBLE HORIZONTAL
4951-0xce 0x256c #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
4952-0xcf 0x017d #LATIN CAPITAL LETTER Z WITH CARON
4953-0xd0 0x0105 #LATIN SMALL LETTER A WITH OGONEK
4954-0xd1 0x010d #LATIN SMALL LETTER C WITH CARON
4955-0xd2 0x0119 #LATIN SMALL LETTER E WITH OGONEK
4956-0xd3 0x0117 #LATIN SMALL LETTER E WITH DOT ABOVE
4957-0xd4 0x012f #LATIN SMALL LETTER I WITH OGONEK
4958-0xd5 0x0161 #LATIN SMALL LETTER S WITH CARON
4959-0xd6 0x0173 #LATIN SMALL LETTER U WITH OGONEK
4960-0xd7 0x016b #LATIN SMALL LETTER U WITH MACRON
4961-0xd8 0x017e #LATIN SMALL LETTER Z WITH CARON
4962-0xd9 0x2518 #BOX DRAWINGS LIGHT UP AND LEFT
4963-0xda 0x250c #BOX DRAWINGS LIGHT DOWN AND RIGHT
4964-0xdb 0x2588 #FULL BLOCK
4965-0xdc 0x2584 #LOWER HALF BLOCK
4966-0xdd 0x258c #LEFT HALF BLOCK
4967-0xde 0x2590 #RIGHT HALF BLOCK
4968-0xdf 0x2580 #UPPER HALF BLOCK
4969-0xe0 0x00d3 #LATIN CAPITAL LETTER O WITH ACUTE
4970-0xe1 0x00df #LATIN SMALL LETTER SHARP S
4971-0xe2 0x014c #LATIN CAPITAL LETTER O WITH MACRON
4972-0xe3 0x0143 #LATIN CAPITAL LETTER N WITH ACUTE
4973-0xe4 0x00f5 #LATIN SMALL LETTER O WITH TILDE
4974-0xe5 0x00d5 #LATIN CAPITAL LETTER O WITH TILDE
4975-0xe6 0x00b5 #MICRO SIGN
4976-0xe7 0x0144 #LATIN SMALL LETTER N WITH ACUTE
4977-0xe8 0x0136 #LATIN CAPITAL LETTER K WITH CEDILLA
4978-0xe9 0x0137 #LATIN SMALL LETTER K WITH CEDILLA
4979-0xea 0x013b #LATIN CAPITAL LETTER L WITH CEDILLA
4980-0xeb 0x013c #LATIN SMALL LETTER L WITH CEDILLA
4981-0xec 0x0146 #LATIN SMALL LETTER N WITH CEDILLA
4982-0xed 0x0112 #LATIN CAPITAL LETTER E WITH MACRON
4983-0xee 0x0145 #LATIN CAPITAL LETTER N WITH CEDILLA
4984-0xef 0x2019 #RIGHT SINGLE QUOTATION MARK
4985-0xf0 0x00ad #SOFT HYPHEN
4986-0xf1 0x00b1 #PLUS-MINUS SIGN
4987-0xf2 0x201c #LEFT DOUBLE QUOTATION MARK
4988-0xf3 0x00be #VULGAR FRACTION THREE QUARTERS
4989-0xf4 0x00b6 #PILCROW SIGN
4990-0xf5 0x00a7 #SECTION SIGN
4991-0xf6 0x00f7 #DIVISION SIGN
4992-0xf7 0x201e #DOUBLE LOW-9 QUOTATION MARK
4993-0xf8 0x00b0 #DEGREE SIGN
4994-0xf9 0x2219 #BULLET OPERATOR
4995-0xfa 0x00b7 #MIDDLE DOT
4996-0xfb 0x00b9 #SUPERSCRIPT ONE
4997-0xfc 0x00b3 #SUPERSCRIPT THREE
4998-0xfd 0x00b2 #SUPERSCRIPT TWO
4999-0xfe 0x25a0 #BLACK SQUARE
5000-0xff 0x00a0 #NO-BREAK SPACE
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches