Skip to content

Commit f3941ba

Browse files
committed
Merge pull request #8691 from FirebirdSQL/work/gh-8690
Fix for bug #8690 : On Windows 7 isql exits silently right after the start.
1 parent 3955b45 commit f3941ba

File tree

3 files changed

+46
-19
lines changed

3 files changed

+46
-19
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<!-- compatibility.manifest -->
2+
<!-- see https://learn.microsoft.com/en-us/windows/win32/sysinfo/targeting-your-application-at-windows-8-1 -->
3+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
4+
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
5+
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
6+
<application>
7+
<!-- Windows 10 and Windows 11 -->
8+
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
9+
<!-- Windows 8.1 -->
10+
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
11+
<!-- Windows 8 -->
12+
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
13+
<!-- Windows 7 -->
14+
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
15+
<!-- Windows Vista -->
16+
<!-- supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/ -->
17+
</application>
18+
</compatibility>
19+
</assembly>

builds/win32/msvc15/FirebirdCommon.props

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,8 @@
4141
<ResourceCompile>
4242
<PreprocessorDefinitions>RC_ARH_$(Platform);RC_TARGET_$(TargetName);RC_TARGET_NAME=$(TargetName);RC_TARGET_FILENAME=$(TargetFileName);%(PreprocessorDefinitions)</PreprocessorDefinitions>
4343
</ResourceCompile>
44+
<Manifest>
45+
<AdditionalManifestFiles>..\defs\compatibility.manifest %(AdditionalManifestFiles)</AdditionalManifestFiles>
46+
</Manifest>
4447
</ItemDefinitionGroup>
4548
</Project>

src/isql/isql.epp

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ enum literal_string_type
9999

100100
#if defined(WIN_NT)
101101
#include <windows.h>
102+
#include <VersionHelpers.h>
102103
#endif
103104
#include "ibase.h"
104105
#include "../isql/isql.h"
@@ -347,14 +348,21 @@ static int win32ReadConsole(FILE* file, CharBuffer& mbBuffer)
347348
SetConsoleMode(handle, oldMode);
348349
});
349350

350-
const size_t MAX_LINE_LENGTH = MAX_USHORT;
351-
WCHAR* wideBuf = wideBuffer->getBuffer(MAX_LINE_LENGTH, false);
351+
// Before Windows 10, ReadConsole() can't work with relatively large input
352+
// buffers and set ERROR_NOT_ENOUGH_MEMORY error. Thus, use initial buffer size
353+
// twice less than for Windows 10 and handle error by reducing the buffer size.
354+
355+
static size_t maxLineLength = IsWindows10OrGreater() ? MAX_USHORT : MAX_SSHORT;
356+
WCHAR* wideBuf = wideBuffer->getBuffer(maxLineLength, false);
352357

353358
DWORD charsRead;
354-
if (!ReadConsoleW(handle, wideBuf, MAX_LINE_LENGTH, &charsRead, NULL))
359+
while (!ReadConsoleW(handle, wideBuf, maxLineLength, &charsRead, NULL))
355360
{
356-
fb_assert(false);
357-
return -1;
361+
const DWORD error = GetLastError();
362+
if (error == ERROR_NOT_ENOUGH_MEMORY && maxLineLength > 256)
363+
maxLineLength -= 256;
364+
else
365+
Firebird::system_error::raise("ReadConsoleW", error);
358366
}
359367

360368
if (!charsRead)
@@ -690,20 +698,17 @@ static void atexit_fb_shutdown()
690698

691699
int CLIB_ROUTINE main(int argc, char* argv[])
692700
{
693-
/**************************************
694-
*
695-
* m a i n
696-
*
697-
**************************************
698-
*
699-
* Functional description
700-
* This calls ISQL_main, and exists to
701-
* isolate main which does not exist under
702-
* MS Windows.
703-
*
704-
**************************************/
705-
706-
return ISQL_main(argc, argv);
701+
try
702+
{
703+
return ISQL_main(argc, argv);
704+
}
705+
catch (const Firebird::Exception& ex)
706+
{
707+
Firebird::StaticStatusVector st;
708+
ex.stuffException(st);
709+
isc_print_status(st.begin());
710+
}
711+
return 1;
707712
}
708713

709714

0 commit comments

Comments
 (0)