diff options
Diffstat (limited to 'src/dutil/conutil.cpp')
| -rw-r--r-- | src/dutil/conutil.cpp | 77 |
1 files changed, 47 insertions, 30 deletions
diff --git a/src/dutil/conutil.cpp b/src/dutil/conutil.cpp index 4c820a1c..33e1b59a 100644 --- a/src/dutil/conutil.cpp +++ b/src/dutil/conutil.cpp | |||
| @@ -3,6 +3,21 @@ | |||
| 3 | #include "precomp.h" | 3 | #include "precomp.h" |
| 4 | 4 | ||
| 5 | 5 | ||
| 6 | // Exit macros | ||
| 7 | #define ConExitOnLastError(x, s, ...) ExitOnLastErrorSource(DUTIL_SOURCE_CONUTIL, x, s, __VA_ARGS__) | ||
| 8 | #define ConExitOnLastErrorDebugTrace(x, s, ...) ExitOnLastErrorDebugTraceSource(DUTIL_SOURCE_CONUTIL, x, s, __VA_ARGS__) | ||
| 9 | #define ConExitWithLastError(x, s, ...) ExitWithLastErrorSource(DUTIL_SOURCE_CONUTIL, x, s, __VA_ARGS__) | ||
| 10 | #define ConExitOnFailure(x, s, ...) ExitOnFailureSource(DUTIL_SOURCE_CONUTIL, x, s, __VA_ARGS__) | ||
| 11 | #define ConExitOnRootFailure(x, s, ...) ExitOnRootFailureSource(DUTIL_SOURCE_CONUTIL, x, s, __VA_ARGS__) | ||
| 12 | #define ConExitOnFailureDebugTrace(x, s, ...) ExitOnFailureDebugTraceSource(DUTIL_SOURCE_CONUTIL, x, s, __VA_ARGS__) | ||
| 13 | #define ConExitOnNull(p, x, e, s, ...) ExitOnNullSource(DUTIL_SOURCE_CONUTIL, p, x, e, s, __VA_ARGS__) | ||
| 14 | #define ConExitOnNullWithLastError(p, x, s, ...) ExitOnNullWithLastErrorSource(DUTIL_SOURCE_CONUTIL, p, x, s, __VA_ARGS__) | ||
| 15 | #define ConExitOnNullDebugTrace(p, x, e, s, ...) ExitOnNullDebugTraceSource(DUTIL_SOURCE_CONUTIL, p, x, e, s, __VA_ARGS__) | ||
| 16 | #define ConExitOnInvalidHandleWithLastError(p, x, s, ...) ExitOnInvalidHandleWithLastErrorSource(DUTIL_SOURCE_CONUTIL, p, x, s, __VA_ARGS__) | ||
| 17 | #define ConExitOnWin32Error(e, x, s, ...) ExitOnWin32ErrorSource(DUTIL_SOURCE_CONUTIL, e, x, s, __VA_ARGS__) | ||
| 18 | #define ConExitOnGdipFailure(g, x, s, ...) ExitOnGdipFailureSource(DUTIL_SOURCE_CONUTIL, g, x, s, __VA_ARGS__) | ||
| 19 | |||
| 20 | |||
| 6 | static HANDLE vhStdIn = INVALID_HANDLE_VALUE; | 21 | static HANDLE vhStdIn = INVALID_HANDLE_VALUE; |
| 7 | static HANDLE vhStdOut = INVALID_HANDLE_VALUE; | 22 | static HANDLE vhStdOut = INVALID_HANDLE_VALUE; |
| 8 | static BOOL vfConsoleIn = FALSE; | 23 | static BOOL vfConsoleIn = FALSE; |
| @@ -19,13 +34,13 @@ extern "C" HRESULT DAPI ConsoleInitialize() | |||
| 19 | vhStdIn = ::GetStdHandle(STD_INPUT_HANDLE); | 34 | vhStdIn = ::GetStdHandle(STD_INPUT_HANDLE); |
| 20 | if (INVALID_HANDLE_VALUE == vhStdIn) | 35 | if (INVALID_HANDLE_VALUE == vhStdIn) |
| 21 | { | 36 | { |
| 22 | ExitOnLastError(hr, "failed to open stdin"); | 37 | ConExitOnLastError(hr, "failed to open stdin"); |
| 23 | } | 38 | } |
| 24 | 39 | ||
| 25 | vhStdOut = ::GetStdHandle(STD_OUTPUT_HANDLE); | 40 | vhStdOut = ::GetStdHandle(STD_OUTPUT_HANDLE); |
| 26 | if (INVALID_HANDLE_VALUE == vhStdOut) | 41 | if (INVALID_HANDLE_VALUE == vhStdOut) |
| 27 | { | 42 | { |
| 28 | ExitOnLastError(hr, "failed to open stdout"); | 43 | ConExitOnLastError(hr, "failed to open stdout"); |
| 29 | } | 44 | } |
| 30 | 45 | ||
| 31 | // check if we have a std in on the console | 46 | // check if we have a std in on the console |
| @@ -43,7 +58,7 @@ extern "C" HRESULT DAPI ConsoleInitialize() | |||
| 43 | } | 58 | } |
| 44 | else | 59 | else |
| 45 | { | 60 | { |
| 46 | ExitOnWin32Error(er, hr, "failed to get input console screen buffer info"); | 61 | ConExitOnWin32Error(er, hr, "failed to get input console screen buffer info"); |
| 47 | } | 62 | } |
| 48 | } | 63 | } |
| 49 | 64 | ||
| @@ -62,7 +77,7 @@ extern "C" HRESULT DAPI ConsoleInitialize() | |||
| 62 | } | 77 | } |
| 63 | else | 78 | else |
| 64 | { | 79 | { |
| 65 | ExitOnWin32Error(er, hr, "failed to get output console screen buffer info"); | 80 | ConExitOnWin32Error(er, hr, "failed to get output console screen buffer info"); |
| 66 | } | 81 | } |
| 67 | } | 82 | } |
| 68 | 83 | ||
| @@ -89,6 +104,8 @@ LExit: | |||
| 89 | 104 | ||
| 90 | extern "C" void DAPI ConsoleUninitialize() | 105 | extern "C" void DAPI ConsoleUninitialize() |
| 91 | { | 106 | { |
| 107 | BOOL fOutEqualsIn = vhStdOut == vhStdIn; | ||
| 108 | |||
| 92 | memset(&vcsbiInfo, 0, sizeof(vcsbiInfo)); | 109 | memset(&vcsbiInfo, 0, sizeof(vcsbiInfo)); |
| 93 | 110 | ||
| 94 | if (INVALID_HANDLE_VALUE != vhStdOut) | 111 | if (INVALID_HANDLE_VALUE != vhStdOut) |
| @@ -96,7 +113,7 @@ extern "C" void DAPI ConsoleUninitialize() | |||
| 96 | ::CloseHandle(vhStdOut); | 113 | ::CloseHandle(vhStdOut); |
| 97 | } | 114 | } |
| 98 | 115 | ||
| 99 | if (INVALID_HANDLE_VALUE != vhStdIn && vhStdOut != vhStdIn) | 116 | if (INVALID_HANDLE_VALUE != vhStdIn && !fOutEqualsIn) |
| 100 | { | 117 | { |
| 101 | ::CloseHandle(vhStdIn); | 118 | ::CloseHandle(vhStdIn); |
| 102 | } | 119 | } |
| @@ -178,14 +195,14 @@ extern "C" HRESULT DAPI ConsoleWrite( | |||
| 178 | va_start(args, szFormat); | 195 | va_start(args, szFormat); |
| 179 | hr = StrAnsiAllocFormattedArgs(&pszOutput, szFormat, args); | 196 | hr = StrAnsiAllocFormattedArgs(&pszOutput, szFormat, args); |
| 180 | va_end(args); | 197 | va_end(args); |
| 181 | ExitOnFailure(hr, "failed to format message: \"%s\"", szFormat); | 198 | ConExitOnFailure(hr, "failed to format message: \"%s\"", szFormat); |
| 182 | 199 | ||
| 183 | cchOutput = lstrlenA(pszOutput); | 200 | cchOutput = lstrlenA(pszOutput); |
| 184 | while (cbTotal < (sizeof(*pszOutput) * cchOutput)) | 201 | while (cbTotal < (sizeof(*pszOutput) * cchOutput)) |
| 185 | { | 202 | { |
| 186 | if (!::WriteFile(vhStdOut, reinterpret_cast<BYTE*>(pszOutput) + cbTotal, cchOutput * sizeof(*pszOutput) - cbTotal, &cbWrote, NULL)) | 203 | if (!::WriteFile(vhStdOut, reinterpret_cast<BYTE*>(pszOutput) + cbTotal, cchOutput * sizeof(*pszOutput) - cbTotal, &cbWrote, NULL)) |
| 187 | { | 204 | { |
| 188 | ExitOnLastError(hr, "failed to write output to console: %s", pszOutput); | 205 | ConExitOnLastError(hr, "failed to write output to console: %s", pszOutput); |
| 189 | } | 206 | } |
| 190 | 207 | ||
| 191 | cbTotal += cbWrote; | 208 | cbTotal += cbWrote; |
| @@ -236,7 +253,7 @@ extern "C" HRESULT DAPI ConsoleWriteLine( | |||
| 236 | va_start(args, szFormat); | 253 | va_start(args, szFormat); |
| 237 | hr = StrAnsiAllocFormattedArgs(&pszOutput, szFormat, args); | 254 | hr = StrAnsiAllocFormattedArgs(&pszOutput, szFormat, args); |
| 238 | va_end(args); | 255 | va_end(args); |
| 239 | ExitOnFailure(hr, "failed to format message: \"%s\"", szFormat); | 256 | ConExitOnFailure(hr, "failed to format message: \"%s\"", szFormat); |
| 240 | 257 | ||
| 241 | // | 258 | // |
| 242 | // write the string | 259 | // write the string |
| @@ -245,7 +262,7 @@ extern "C" HRESULT DAPI ConsoleWriteLine( | |||
| 245 | while (cbTotal < (sizeof(*pszOutput) * cchOutput)) | 262 | while (cbTotal < (sizeof(*pszOutput) * cchOutput)) |
| 246 | { | 263 | { |
| 247 | if (!::WriteFile(vhStdOut, reinterpret_cast<BYTE*>(pszOutput) + cbTotal, cchOutput * sizeof(*pszOutput) - cbTotal, &cbWrote, NULL)) | 264 | if (!::WriteFile(vhStdOut, reinterpret_cast<BYTE*>(pszOutput) + cbTotal, cchOutput * sizeof(*pszOutput) - cbTotal, &cbWrote, NULL)) |
| 248 | ExitOnLastError(hr, "failed to write output to console: %s", pszOutput); | 265 | ConExitOnLastError(hr, "failed to write output to console: %s", pszOutput); |
| 249 | 266 | ||
| 250 | cbTotal += cbWrote; | 267 | cbTotal += cbWrote; |
| 251 | } | 268 | } |
| @@ -255,7 +272,7 @@ extern "C" HRESULT DAPI ConsoleWriteLine( | |||
| 255 | // | 272 | // |
| 256 | if (!::WriteFile(vhStdOut, reinterpret_cast<const BYTE*>(szNewLine), 2, &cbWrote, NULL)) | 273 | if (!::WriteFile(vhStdOut, reinterpret_cast<const BYTE*>(szNewLine), 2, &cbWrote, NULL)) |
| 257 | { | 274 | { |
| 258 | ExitOnLastError(hr, "failed to write newline to console"); | 275 | ConExitOnLastError(hr, "failed to write newline to console"); |
| 259 | } | 276 | } |
| 260 | 277 | ||
| 261 | // reset the color to normal | 278 | // reset the color to normal |
| @@ -289,7 +306,7 @@ HRESULT ConsoleWriteError( | |||
| 289 | va_start(args, szFormat); | 306 | va_start(args, szFormat); |
| 290 | hr = StrAnsiAllocFormattedArgs(&pszMessage, szFormat, args); | 307 | hr = StrAnsiAllocFormattedArgs(&pszMessage, szFormat, args); |
| 291 | va_end(args); | 308 | va_end(args); |
| 292 | ExitOnFailure(hr, "failed to format error message: \"%s\"", szFormat); | 309 | ConExitOnFailure(hr, "failed to format error message: \"%s\"", szFormat); |
| 293 | 310 | ||
| 294 | if (FAILED(hrError)) | 311 | if (FAILED(hrError)) |
| 295 | { | 312 | { |
| @@ -326,14 +343,14 @@ extern "C" HRESULT DAPI ConsoleReadW( | |||
| 326 | 343 | ||
| 327 | cch = 64; | 344 | cch = 64; |
| 328 | hr = StrAnsiAlloc(&psz, cch); | 345 | hr = StrAnsiAlloc(&psz, cch); |
| 329 | ExitOnFailure(hr, "failed to allocate memory to read from console"); | 346 | ConExitOnFailure(hr, "failed to allocate memory to read from console"); |
| 330 | 347 | ||
| 331 | // loop until we read the \r\n from the console | 348 | // loop until we read the \r\n from the console |
| 332 | for (;;) | 349 | for (;;) |
| 333 | { | 350 | { |
| 334 | // read one character at a time, since that seems to be the only way to make this work | 351 | // read one character at a time, since that seems to be the only way to make this work |
| 335 | if (!::ReadFile(vhStdIn, psz + cchTotalRead, 1, &cchRead, NULL)) | 352 | if (!::ReadFile(vhStdIn, psz + cchTotalRead, 1, &cchRead, NULL)) |
| 336 | ExitOnLastError(hr, "failed to read string from console"); | 353 | ConExitOnLastError(hr, "failed to read string from console"); |
| 337 | 354 | ||
| 338 | cchTotalRead += cchRead; | 355 | cchTotalRead += cchRead; |
| 339 | if (1 < cchTotalRead && '\r' == psz[cchTotalRead - 2] || '\n' == psz[cchTotalRead - 1]) | 356 | if (1 < cchTotalRead && '\r' == psz[cchTotalRead - 2] || '\n' == psz[cchTotalRead - 1]) |
| @@ -351,7 +368,7 @@ extern "C" HRESULT DAPI ConsoleReadW( | |||
| 351 | { | 368 | { |
| 352 | cch *= 2; // double everytime we run out of space | 369 | cch *= 2; // double everytime we run out of space |
| 353 | hr = StrAnsiAlloc(&psz, cch); | 370 | hr = StrAnsiAlloc(&psz, cch); |
| 354 | ExitOnFailure(hr, "failed to allocate memory to read from console"); | 371 | ConExitOnFailure(hr, "failed to allocate memory to read from console"); |
| 355 | } | 372 | } |
| 356 | } | 373 | } |
| 357 | 374 | ||
| @@ -381,7 +398,7 @@ extern "C" HRESULT DAPI ConsoleReadNonBlockingW( | |||
| 381 | 398 | ||
| 382 | LPSTR psz = NULL; | 399 | LPSTR psz = NULL; |
| 383 | 400 | ||
| 384 | ExitOnNull(ppwzBuffer, hr, E_INVALIDARG, "Failed to read from console because buffer was not provided"); | 401 | ConExitOnNull(ppwzBuffer, hr, E_INVALIDARG, "Failed to read from console because buffer was not provided"); |
| 385 | 402 | ||
| 386 | DWORD dwRead; | 403 | DWORD dwRead; |
| 387 | DWORD dwNumInput; | 404 | DWORD dwNumInput; |
| @@ -412,7 +429,7 @@ extern "C" HRESULT DAPI ConsoleReadNonBlockingW( | |||
| 412 | 429 | ||
| 413 | if (!GetNumberOfConsoleInputEvents(vhStdIn, &dwRead)) | 430 | if (!GetNumberOfConsoleInputEvents(vhStdIn, &dwRead)) |
| 414 | { | 431 | { |
| 415 | ExitOnLastError(hr, "failed to peek at console input"); | 432 | ConExitOnLastError(hr, "failed to peek at console input"); |
| 416 | } | 433 | } |
| 417 | 434 | ||
| 418 | if (0 == dwRead) | 435 | if (0 == dwRead) |
| @@ -424,7 +441,7 @@ extern "C" HRESULT DAPI ConsoleReadNonBlockingW( | |||
| 424 | { | 441 | { |
| 425 | if (!ReadConsoleInputW(vhStdIn, &ir, 1, &dwNumInput)) | 442 | if (!ReadConsoleInputW(vhStdIn, &ir, 1, &dwNumInput)) |
| 426 | { | 443 | { |
| 427 | ExitOnLastError(hr, "Failed to read input from console"); | 444 | ConExitOnLastError(hr, "Failed to read input from console"); |
| 428 | } | 445 | } |
| 429 | 446 | ||
| 430 | // If what we have is a KEY_EVENT, and that event signifies keyUp, we're interested | 447 | // If what we have is a KEY_EVENT, and that event signifies keyUp, we're interested |
| @@ -463,14 +480,14 @@ extern "C" HRESULT DAPI ConsoleReadNonBlockingW( | |||
| 463 | 480 | ||
| 464 | cch = 8; | 481 | cch = 8; |
| 465 | hr = StrAnsiAlloc(&psz, cch); | 482 | hr = StrAnsiAlloc(&psz, cch); |
| 466 | ExitOnFailure(hr, "failed to allocate memory to read from console"); | 483 | ConExitOnFailure(hr, "failed to allocate memory to read from console"); |
| 467 | 484 | ||
| 468 | for (/*dwRead from PeekNamedPipe*/; dwRead > 0; dwRead--) | 485 | for (/*dwRead from PeekNamedPipe*/; dwRead > 0; dwRead--) |
| 469 | { | 486 | { |
| 470 | // read one character at a time, since that seems to be the only way to make this work | 487 | // read one character at a time, since that seems to be the only way to make this work |
| 471 | if (!::ReadFile(vhStdIn, psz + cchTotalRead, 1, &cchRead, NULL)) | 488 | if (!::ReadFile(vhStdIn, psz + cchTotalRead, 1, &cchRead, NULL)) |
| 472 | { | 489 | { |
| 473 | ExitOnLastError(hr, "failed to read string from console"); | 490 | ConExitOnLastError(hr, "failed to read string from console"); |
| 474 | } | 491 | } |
| 475 | 492 | ||
| 476 | cchTotalRead += cchRead; | 493 | cchTotalRead += cchRead; |
| @@ -490,7 +507,7 @@ extern "C" HRESULT DAPI ConsoleReadNonBlockingW( | |||
| 490 | { | 507 | { |
| 491 | cch *= 2; // double everytime we run out of space | 508 | cch *= 2; // double everytime we run out of space |
| 492 | hr = StrAnsiAlloc(&psz, cch); | 509 | hr = StrAnsiAlloc(&psz, cch); |
| 493 | ExitOnFailure(hr, "failed to allocate memory to read from console"); | 510 | ConExitOnFailure(hr, "failed to allocate memory to read from console"); |
| 494 | } | 511 | } |
| 495 | } | 512 | } |
| 496 | 513 | ||
| @@ -510,7 +527,7 @@ LExit: | |||
| 510 | 527 | ||
| 511 | *********************************************************************/ | 528 | *********************************************************************/ |
| 512 | extern "C" HRESULT DAPI ConsoleReadStringA( | 529 | extern "C" HRESULT DAPI ConsoleReadStringA( |
| 513 | __deref_out_ecount_part(cchCharBuffer,*pcchNumCharReturn) LPSTR* ppszCharBuffer, | 530 | __deref_inout_ecount_part(cchCharBuffer,*pcchNumCharReturn) LPSTR* ppszCharBuffer, |
| 514 | CONST DWORD cchCharBuffer, | 531 | CONST DWORD cchCharBuffer, |
| 515 | __out DWORD* pcchNumCharReturn | 532 | __out DWORD* pcchNumCharReturn |
| 516 | ) | 533 | ) |
| @@ -526,11 +543,11 @@ extern "C" HRESULT DAPI ConsoleReadStringA( | |||
| 526 | do | 543 | do |
| 527 | { | 544 | { |
| 528 | hr = StrAnsiAlloc(ppszCharBuffer, cchCharBuffer * iRead); | 545 | hr = StrAnsiAlloc(ppszCharBuffer, cchCharBuffer * iRead); |
| 529 | ExitOnFailure(hr, "failed to allocate memory for ConsoleReadStringW"); | 546 | ConExitOnFailure(hr, "failed to allocate memory for ConsoleReadStringW"); |
| 530 | // ReadConsoleW will not return until <Return>, the last two chars are 13 and 10. | 547 | // ReadConsoleW will not return until <Return>, the last two chars are 13 and 10. |
| 531 | if (!::ReadConsoleA(vhStdIn, *ppszCharBuffer + iReadCharTotal, cchCharBuffer, pcchNumCharReturn, NULL) || *pcchNumCharReturn == 0) | 548 | if (!::ReadConsoleA(vhStdIn, *ppszCharBuffer + iReadCharTotal, cchCharBuffer, pcchNumCharReturn, NULL) || *pcchNumCharReturn == 0) |
| 532 | { | 549 | { |
| 533 | ExitOnLastError(hr, "failed to read string from console"); | 550 | ConExitOnLastError(hr, "failed to read string from console"); |
| 534 | } | 551 | } |
| 535 | iReadCharTotal += *pcchNumCharReturn; | 552 | iReadCharTotal += *pcchNumCharReturn; |
| 536 | iRead += 1; | 553 | iRead += 1; |
| @@ -543,7 +560,7 @@ extern "C" HRESULT DAPI ConsoleReadStringA( | |||
| 543 | if (!::ReadConsoleA(vhStdIn, *ppszCharBuffer, cchCharBuffer, pcchNumCharReturn, NULL) || | 560 | if (!::ReadConsoleA(vhStdIn, *ppszCharBuffer, cchCharBuffer, pcchNumCharReturn, NULL) || |
| 544 | *pcchNumCharReturn > cchCharBuffer || *pcchNumCharReturn == 0) | 561 | *pcchNumCharReturn > cchCharBuffer || *pcchNumCharReturn == 0) |
| 545 | { | 562 | { |
| 546 | ExitOnLastError(hr, "failed to read string from console"); | 563 | ConExitOnLastError(hr, "failed to read string from console"); |
| 547 | } | 564 | } |
| 548 | if ((*ppszCharBuffer)[*pcchNumCharReturn - 1] != 10 || | 565 | if ((*ppszCharBuffer)[*pcchNumCharReturn - 1] != 10 || |
| 549 | (*ppszCharBuffer)[*pcchNumCharReturn - 2] != 13) | 566 | (*ppszCharBuffer)[*pcchNumCharReturn - 2] != 13) |
| @@ -567,7 +584,7 @@ LExit: | |||
| 567 | 584 | ||
| 568 | *********************************************************************/ | 585 | *********************************************************************/ |
| 569 | extern "C" HRESULT DAPI ConsoleReadStringW( | 586 | extern "C" HRESULT DAPI ConsoleReadStringW( |
| 570 | __deref_out_ecount_part(cchCharBuffer,*pcchNumCharReturn) LPWSTR* ppwzCharBuffer, | 587 | __deref_inout_ecount_part(cchCharBuffer,*pcchNumCharReturn) LPWSTR* ppwzCharBuffer, |
| 571 | const DWORD cchCharBuffer, | 588 | const DWORD cchCharBuffer, |
| 572 | __out DWORD* pcchNumCharReturn | 589 | __out DWORD* pcchNumCharReturn |
| 573 | ) | 590 | ) |
| @@ -583,11 +600,11 @@ extern "C" HRESULT DAPI ConsoleReadStringW( | |||
| 583 | do | 600 | do |
| 584 | { | 601 | { |
| 585 | hr = StrAlloc(ppwzCharBuffer, cchCharBuffer * iRead); | 602 | hr = StrAlloc(ppwzCharBuffer, cchCharBuffer * iRead); |
| 586 | ExitOnFailure(hr, "failed to allocate memory for ConsoleReadStringW"); | 603 | ConExitOnFailure(hr, "failed to allocate memory for ConsoleReadStringW"); |
| 587 | // ReadConsoleW will not return until <Return>, the last two chars are 13 and 10. | 604 | // ReadConsoleW will not return until <Return>, the last two chars are 13 and 10. |
| 588 | if (!::ReadConsoleW(vhStdIn, *ppwzCharBuffer + iReadCharTotal, cchCharBuffer, pcchNumCharReturn, NULL) || *pcchNumCharReturn == 0) | 605 | if (!::ReadConsoleW(vhStdIn, *ppwzCharBuffer + iReadCharTotal, cchCharBuffer, pcchNumCharReturn, NULL) || *pcchNumCharReturn == 0) |
| 589 | { | 606 | { |
| 590 | ExitOnLastError(hr, "failed to read string from console"); | 607 | ConExitOnLastError(hr, "failed to read string from console"); |
| 591 | } | 608 | } |
| 592 | iReadCharTotal += *pcchNumCharReturn; | 609 | iReadCharTotal += *pcchNumCharReturn; |
| 593 | iRead += 1; | 610 | iRead += 1; |
| @@ -600,7 +617,7 @@ extern "C" HRESULT DAPI ConsoleReadStringW( | |||
| 600 | if (!::ReadConsoleW(vhStdIn, *ppwzCharBuffer, cchCharBuffer, pcchNumCharReturn, NULL) || | 617 | if (!::ReadConsoleW(vhStdIn, *ppwzCharBuffer, cchCharBuffer, pcchNumCharReturn, NULL) || |
| 601 | *pcchNumCharReturn > cchCharBuffer || *pcchNumCharReturn == 0) | 618 | *pcchNumCharReturn > cchCharBuffer || *pcchNumCharReturn == 0) |
| 602 | { | 619 | { |
| 603 | ExitOnLastError(hr, "failed to read string from console"); | 620 | ConExitOnLastError(hr, "failed to read string from console"); |
| 604 | } | 621 | } |
| 605 | if ((*ppwzCharBuffer)[*pcchNumCharReturn - 1] != 10 || | 622 | if ((*ppwzCharBuffer)[*pcchNumCharReturn - 1] != 10 || |
| 606 | (*ppwzCharBuffer)[*pcchNumCharReturn - 2] != 13) | 623 | (*ppwzCharBuffer)[*pcchNumCharReturn - 2] != 13) |
| @@ -630,7 +647,7 @@ extern "C" HRESULT DAPI ConsoleSetReadHidden(void) | |||
| 630 | ::FlushConsoleInputBuffer(vhStdIn); | 647 | ::FlushConsoleInputBuffer(vhStdIn); |
| 631 | if (!::SetConsoleMode(vhStdIn, ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT)) | 648 | if (!::SetConsoleMode(vhStdIn, ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT)) |
| 632 | { | 649 | { |
| 633 | ExitOnLastError(hr, "failed to set console input mode to be hidden"); | 650 | ConExitOnLastError(hr, "failed to set console input mode to be hidden"); |
| 634 | } | 651 | } |
| 635 | 652 | ||
| 636 | LExit: | 653 | LExit: |
| @@ -647,7 +664,7 @@ extern "C" HRESULT DAPI ConsoleSetReadNormal(void) | |||
| 647 | HRESULT hr = S_OK; | 664 | HRESULT hr = S_OK; |
| 648 | if (!::SetConsoleMode(vhStdIn, ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT | ENABLE_PROCESSED_INPUT | ENABLE_MOUSE_INPUT)) | 665 | if (!::SetConsoleMode(vhStdIn, ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT | ENABLE_PROCESSED_INPUT | ENABLE_MOUSE_INPUT)) |
| 649 | { | 666 | { |
| 650 | ExitOnLastError(hr, "failed to set console input mode to be normal"); | 667 | ConExitOnLastError(hr, "failed to set console input mode to be normal"); |
| 651 | } | 668 | } |
| 652 | 669 | ||
| 653 | LExit: | 670 | LExit: |
