On 10/03/2020 10:34, Dimitry Sibiryakov wrote:
10.03.2020 09:48, Alex Peshkoff via Firebird-devel wrote:
May be for old windows versions - yes, some problems. All the others upgrade ICU as a part of regular OS upgrade. I.e. if one already has local ICU extended format is definitely useless overhead.

  ICU appeared only in recent builds of Windows 10. Windows 7-8 and servers don't have it.   Some Linux distros package ICU in a very strange way with names that Firebird don't know how to use.


The definitive document from Microsoft is here:

https://docs.microsoft.com/en-us/windows/win32/intl/international-components-for-unicode--icu-

It looks like the icu dlls are only available from Version 1709 onwards. Interestingly, they are called:

icuuc.dll, and

icuin.dll

in true MS fashion, the filenames do not include a version number.

Looking at https://github.com/fyatao/firebird/blob/master/src/common/unicode_util.cpp

it looks like Firebird will try and load icu files with the version number in them i.e. using the template

#if defined(WIN_NT)
const char* const inTemplate = "icuin%s.dll";
const char* const ucTemplate = "icuuc%s.dll";

I may have missed it, but I can't see the code that also tries a missing version number for the dll file name. i.e. it won't try to load the MS supplied versions.

Firebird 4 Beta 1 was distributed with icuin63.dll and icuuc63.dll and I would expect the server to always load this version regardless of the ICU version provided with Windows 10.

On Windows, Firebird should really try and load the MS supplied ICU dlls first and then only try and load the Firebird distributed ones afterwards. If my reading of the code is correct then, Firebird will only ever load the Firebird distributed versions - and this looks like a bug. I apologise in advance if I mis-read the code.



Firebird-Devel mailing list, web interface at 
https://lists.sourceforge.net/lists/listinfo/firebird-devel

Reply via email to