From: larrybr Date: Thu, 26 Oct 2023 18:24:41 +0000 (+0000) Subject: Handle utf8 mode restore better for redirected input or output. Move utf8 mode setup... X-Git-Tag: version-3.44.0~24^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d7969e5274d6936f1fef2b817d35b66d2b47377d;p=thirdparty%2Fsqlite.git Handle utf8 mode restore better for redirected input or output. Move utf8 mode setup to before any invocation command processing. Sync w/trunk. FossilOrigin-Name: 59452e7c72de02c2b6d40974c91173d87fd5f6f2e28c0b1f6f53eb1a09693fb6 --- d7969e5274d6936f1fef2b817d35b66d2b47377d diff --cc manifest index e083c76ea0,009e49e106,b3d957fe16..01cc9e8e62 --- a/manifest +++ b/manifest @@@@ -1,5 -1,5 -1,5 +1,5 @@@@ - C Ready\sfor\smerge,\sbut\scould\suse\stesting\son\ssome\sdusty\sold\sWindows\smachines. - D 2023-10-26T15:12:41.667 - C Deal\swith\sthe\scase\sof\sa\sreentrant\sINSERT\son\sa\svirtual\stable\swhere\sthe\nouter\sINSERT\shas\sa\sRETURNING\sclause\sbut\sthe\sinner\sdoes\snot.\ndbsqlfuzz\s3ac9a1e33f676254e02c0f297263b0a7aeb0c1a5. - D 2023-10-26T12:59:41.136 -C Enhance\sthe\s"tool-zip"\smakefile\starget\son\sWindows\sso\sthat\sit\suses\smore\nuniversally\savailable\scommands\sto\sbuild\sthe\sZIP\sarchive.\s\sFix\sother\sminor\nissues\swith\sthat\smakefile\starget\sat\sthe\ssame\stime. -D 2023-10-26T17:30:54.554 +++C Handle\sutf8\smode\srestore\sbetter\sfor\sredirected\sinput\sor\soutput.\sMove\sutf8\smode\ssetup\sto\sbefore\sany\sinvocation\scommand\sprocessing.\sSync\sw/trunk. +++D 2023-10-26T18:24:41.798 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@@@ -722,11 -722,11 -722,11 +722,11 @@@@ F src/random.c 606b00941a1d7dd09c381d32 F src/resolve.c 31229276a8eb5b5de1428cd2d80f6f1cf8ffc5248be25e47cf575df12f1b8f23 F src/rowset.c 8432130e6c344b3401a8874c3cb49fefe6873fec593294de077afea2dce5ec97 F src/select.c 64c9bc7494f3d220a27498137551762c25458282388ea9ac0a710dd6d5dc1510 - F src/shell.c.in 14d70da4c678b2d9d8df105e113669ca956fad1d8538976e33fc8f878c17e84d - F src/sqlite.h.in 81c70644aeef9c974f72c9cadeb505ebb9441d2f6db594c018604ae935a12e6e --F src/shell.c.in acc452c414fddd10289d165be3c89a7a2c36c919def04c93fb7dd11ac022e6ed +++F src/shell.c.in 93f5591ea14e087860801d98c0404ffb5948ccf4cd9b2e98938cfd836f48a932 + F src/sqlite.h.in 428948ef39b3ef7b675ec12bd4853619bad77279b5fa38e3a51c5b9656ae16ff F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8 F src/sqlite3ext.h 2f30b2671f4c03cd27a43f039e11251391066c97d11385f5f963bb40b03038ac -- F src/sqliteInt.h cf6646e8694a63749096e1f086767a2c1920dca9848ec2dbe9f7bfb961d322ef ++ F src/sqliteInt.h 567e317f8631883897b7d3da43fce778b7c30dd0dd7f714558c9725fc1c1196c F src/sqliteLimit.h 33b1c9baba578d34efe7dfdb43193b366111cdf41476b1e82699e14c11ee1fb6 F src/status.c 160c445d7d28c984a0eae38c144f6419311ed3eace59b44ac6dafc20db4af749 F src/table.c 0f141b58a16de7e2fbe81c308379e7279f4c6b50eb08efeec5892794a0ba30d1 @@@@ -785,7 -785,7 -785,7 +785,7 @@@@ F src/test_wsd.c 41cadfd9d97fe8e3e4e44f F src/threads.c 4ae07fa022a3dc7c5beb373cf744a85d3c5c6c3c F src/tokenize.c 23d9f4539880b40226254ad9072f4ecf12eb1902e62aea47aac29928afafcfd5 F src/treeview.c 62fafcd31eea60b718f8daf448116b7b19f90134ebc6c20777ddbb07f56a3d28 - F src/trigger.c 5286019b152f622a38900284109e4aae1e5f566deb7ad9ba7e931f0660771f32 - F src/trigger.c e8c460233d28e1cb291b08ffe00749d313f3686be79ac50f1af15f3087053449 ++ F src/trigger.c 0905b96b04bb6658509f711a8207287f1315cdbc3df1a1b13ba6483c8e341c81 F src/update.c 6904814dd62a7a93bbb86d9f1419c7f134a9119582645854ab02b36b676d9f92 F src/upsert.c fa125a8d3410ce9a97b02cb50f7ae68a2476c405c76aa692d3acf6b8586e9242 F src/utf.c ee39565f0843775cc2c81135751ddd93eceb91a673ea2c57f61c76f288b041a0 @@@@ -2138,8 -2138,8 -2139,9 +2139,8 @@@@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a9 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 - P 02234ef85ed9349ddf6225f67b7e941b0b68cbd2e58c9d7d84a8324393349853 - R 89654e88f6715a69f16578b67cbc1c07 - P cc8efe0494b8fe0df18aa67b1675779bf704d1ac53647fe1f7f55d8048041680 - R 9ba44fb9dc03b38d8120c04401aaff8f -P d83405e870b071540b56e76291bdce1388db80b860afd68a34e4233f6ff2a3ab 166b775bb523362ffe17722ce175278726303c319fbe7e4a1e9291736db38a5d -R 5340f6bed15aada55435e2ba6769fc21 -T +closed 166b775bb523362ffe17722ce175278726303c319fbe7e4a1e9291736db38a5d --U drh - Z ab6f9f2ea52a3134056d677d31c255aa -Z a7dce5b30e42f24e886fdee0aa33be40 +++P 20220615621e01ff83fd26133840e2553a6087bcb56bbb8e9bf1408dd881cd9b 8aba78e4dbf5c196aa50a28579f4bcd7c96103661c5968d62b2fded075bc73e4 d2f2f9126562c24966b0e9bc3629b85950c20199c41250478ba1da68eb7a0046 +++R 1716e4fec6d2ad5fb1fb5737fb80f58b ++U larrybr - Z 1dcda7e82518a66f972beec27c9600f6 +++Z ece20fd86ff14ebb3957d5a5776db27e # Remove this line to create a well-formed Fossil manifest. diff --cc manifest.uuid index 7e50ecd289,15e01cccdb,6dcbf1f67b..af655e5795 --- a/manifest.uuid +++ b/manifest.uuid @@@@ -1,1 -1,1 -1,1 +1,1 @@@@ - 20220615621e01ff83fd26133840e2553a6087bcb56bbb8e9bf1408dd881cd9b - 8aba78e4dbf5c196aa50a28579f4bcd7c96103661c5968d62b2fded075bc73e4 -d2f2f9126562c24966b0e9bc3629b85950c20199c41250478ba1da68eb7a0046 +++59452e7c72de02c2b6d40974c91173d87fd5f6f2e28c0b1f6f53eb1a09693fb6 diff --cc src/shell.c.in index 53d3551279,b78759c002,b78759c002..395cbd035d --- a/src/shell.c.in +++ b/src/shell.c.in @@@@ -654,20 -637,19 -637,19 +654,22 @@@@ static void console_prepare_utf8(void) } /* --** Undo the effects of console_prepare(), if any. ++** Undo the effects of console_prepare_utf8(), if any. */ static void SQLITE_CDECL console_restore(void){ -- if( console_utf8 && conState.inCodePage!=0 -- && conState.hConsoleIn!=INVALID_HANDLE_VALUE ){ -- _setmode(_fileno(stdin), conState.infsMode); -- SetConsoleCP(conState.inCodePage); -- SetConsoleOutputCP(conState.outCodePage); -- SetConsoleMode(conState.hConsoleIn, conState.consoleMode); ++ if( (console_utf8_in||console_utf8_out) ++ && conState.hConsole!=INVALID_HANDLE_VALUE ){ - _setmode(_fileno(stdin), conState.infsMode); - SetConsoleCP(conState.inCodePage); - SetConsoleOutputCP(conState.outCodePage); +++ if( console_utf8_in ){ +++ SetConsoleCP(conState.inCodePage); +++ _setmode(_fileno(stdin), conState.infsMode); +++ } +++ if( console_utf8_out ) SetConsoleOutputCP(conState.outCodePage); ++ SetConsoleMode(conState.hConsole, conState.consoleMode); /* Avoid multiple calls. */ -- conState.hConsoleIn = INVALID_HANDLE_VALUE; ++ conState.hConsole = INVALID_HANDLE_VALUE; conState.consoleMode = 0; -- console_utf8 = 0; ++ console_utf8_in = 0; ++ console_utf8_out = 0; } } @@@@ -12245,12 -12227,12 -12227,12 +12247,25 @@@@ int SQLITE_CDECL wmain(int argc, wchar_ (void)cmdline_option_value(argc, argv, ++i); }else if( cli_strcmp(z,"-init")==0 ){ zInitFile = cmdline_option_value(argc, argv, ++i); +++ }else if( cli_strcmp(z,"-interactive")==0 ){ +++ /* Need to check for interactive override here to so that it can +++ ** affect console setup (for Windows only) and testing thereof. +++ */ +++ stdin_is_interactive = 1; }else if( cli_strcmp(z,"-batch")==0 ){ /* Need to check for batch mode here to so we can avoid printing ** informational messages (like from process_sqliterc) before ** we do the actual processing of arguments later in a second pass. */ stdin_is_interactive = 0; +++ }else if( cli_strcmp(z,"-utf8")==0 ){ +++#if SHELL_WIN_UTF8_OPT +++ mbcs_opted = 0; +++#endif /* SHELL_WIN_UTF8_OPT */ +++ }else if( cli_strcmp(z,"-no-utf8")==0 ){ +++#if SHELL_WIN_UTF8_OPT +++ mbcs_opted = 1; +++#endif /* SHELL_WIN_UTF8_OPT */ }else if( cli_strcmp(z,"-heap")==0 ){ #if defined(SQLITE_ENABLE_MEMSYS3) || defined(SQLITE_ENABLE_MEMSYS5) const char *zSize; @@@@ -12390,6 -12372,6 -12372,6 +12405,16 @@@@ } } +++#if SHELL_WIN_UTF8_OPT +++ /* Get indicated Windows console setup done before running invocation commands. */ +++ if( stdin_is_interactive || stdout_is_console ){ +++ console_prepare_utf8(); +++ } +++ if( !stdin_is_interactive ){ +++ setBinaryMode(stdin, 0); +++ } +++#endif +++ if( data.pAuxDb->zDbFilename==0 ){ #ifndef SQLITE_OMIT_MEMORYDB data.pAuxDb->zDbFilename = ":memory:"; @@@@ -12516,17 -12498,17 -12498,17 +12541,13 @@@@ 8*(int)sizeof(char*)); return 0; }else if( cli_strcmp(z,"-interactive")==0 ){ --- stdin_is_interactive = 1; +++ /* already handled */ }else if( cli_strcmp(z,"-batch")==0 ){ --- stdin_is_interactive = 0; +++ /* already handled */ }else if( cli_strcmp(z,"-utf8")==0 ){ ---#if SHELL_WIN_UTF8_OPT - mbcs_opted = 0; -- console_utf8 = 1; ---#endif /* SHELL_WIN_UTF8_OPT */ +++ /* already handled */ }else if( cli_strcmp(z,"-no-utf8")==0 ){ ---#if SHELL_WIN_UTF8_OPT - mbcs_opted = 1; -- console_utf8 = 0; ---#endif /* SHELL_WIN_UTF8_OPT */ +++ /* already handled */ }else if( cli_strcmp(z,"-heap")==0 ){ i++; }else if( cli_strcmp(z,"-pagecache")==0 ){ @@@@ -12608,13 -12590,14 -12590,14 +12629,6 @@@@ } data.cMode = data.mode; } ---#if SHELL_WIN_UTF8_OPT - if( stdin_is_interactive ){ - console_prepare_utf8(); -- if( console_utf8 && stdin_is_interactive ){ -- console_prepare(); --- }else{ --- setBinaryMode(stdin, 0); -- console_utf8 = 0; --- } ---#endif if( !readStdin ){ /* Run all arguments that do not begin with '-' as if they were separate