2016-07-18 17:04 GMT+03:00 Brad King <brad.k...@kitware.com>: > On 07/07/2016 05:54 PM, Dāvis Mosāns wrote: >> Typically Windows applications (eg. MSVC compiler) use current console's >> codepage for output to pipes so we need to encode that to internally used >> encoding (KWSYS_ENCODING_DEFAULT_CODEPAGE). > [snip] >> while ((p = cmsysProcess_WaitForData(cp, &data, &length, CM_NULLPTR), p)) >> { >> + cmsysProcess_DecodeTextOutput(cp, &data, &length); > [snip] >> while ((p = cmsysProcess_WaitForData(cp, &data, &length, CM_NULLPTR), p)) >> { >> + cmsysProcess_DecodeTextOutput(cp, &data, &length); > > Unfortunately I don't think that pattern will work reliably because > a multi-byte character could be split across a buffering boundary > and therefore not decoded correctly. We may need the consuming > contexts to collect the whole output before converting. >
That's true, but only for MBCS code pages, it will work fine for SBCS and DBCS (if buffer size is even). I think this issue would appear very rarely. Anyway I improved this in places where it was easy, but in some places it's more complicated... For example while ((p = cmsysProcess_WaitForData(cp, &data, &length, CM_NULLPTR), p)) { // Put the output in the right place. if (p == cmsysProcess_Pipe_STDOUT && !output_quiet) { if (output_variable.empty()) { cmSystemTools::Stdout(data, length); Here we output buffer immediately. while ((out || err) && (p = cmsysProcess_WaitForData(cp, &data, &length, CM_NULLPTR), p)) { if (out && p == cmsysProcess_Pipe_STDOUT) { if (!out->Process(data, length)) { and also here we process buffer immediately. -- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: http://public.kitware.com/mailman/listinfo/cmake-developers