Ignore:
Timestamp:
Dec 27, 2012, 11:04:35 PM (8 years ago)
Author:
dmik
Message:

kernel32: Make sure that console subsystem initialization properly redirects standard I/O handles.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kernel32/console.cpp

    r21916 r22049  
    454454               rc));
    455455
    456 
    457   if(flVioConsole == FALSE)
    458   {
    459    /***********************************************************************
    460     * initialize stdin handle                                             *
    461     ***********************************************************************/
    462    hStandardIn = GetStdHandle(STD_INPUT_HANDLE);
    463    dwType = GetFileType(hStandardIn);
    464    if (dwType == FILE_TYPE_CHAR)                /* is handle redirected ? */
    465      hStandardIn = HMCreateFile("CONIN$",
     456  /***********************************************************************
     457   * initialize stdin handle                                             *
     458   ***********************************************************************/
     459  hStandardIn = GetStdHandle(STD_INPUT_HANDLE);
     460  dwType = GetFileType(hStandardIn);
     461  if (dwType == FILE_TYPE_CHAR) {               /* is handle not redirected ? */
     462    hStandardIn = HMCreateFile("CONIN$",
     463                               GENERIC_READ | GENERIC_WRITE,
     464                               FILE_SHARE_READ | FILE_SHARE_WRITE,
     465                               NULL,
     466                               0,
     467                               CONSOLE_TEXTMODE_BUFFER,
     468                               0);
     469    HMUpdtStdHandle(STD_INPUT_HANDLE,
     470                    hStandardIn);
     471  }
     472
     473  /***********************************************************************
     474   * initialize stdout handle                                            *
     475   ***********************************************************************/
     476  hStandardOut = GetStdHandle(STD_OUTPUT_HANDLE);
     477  dwType = GetFileType(hStandardOut);
     478  if (dwType == FILE_TYPE_CHAR) {               /* is handle redirected ? */
     479    hStandardOut = HMCreateFile("CONOUT$",
    466480                                GENERIC_READ | GENERIC_WRITE,
    467481                                FILE_SHARE_READ | FILE_SHARE_WRITE,
     
    470484                                CONSOLE_TEXTMODE_BUFFER,
    471485                                0);
    472 
    473    HMSetStdHandle(STD_INPUT_HANDLE,
    474                   hStandardIn);
    475 
    476    /***********************************************************************
    477     * initialize stdout handle                                            *
    478     ***********************************************************************/
    479    hStandardOut = GetStdHandle(STD_OUTPUT_HANDLE);
    480    dwType = GetFileType(hStandardOut);
    481    if (dwType == FILE_TYPE_CHAR)                /* is handle redirected ? */
    482      hStandardOut = HMCreateFile("CONOUT$",
    483                                  GENERIC_READ | GENERIC_WRITE,
    484                                  FILE_SHARE_READ | FILE_SHARE_WRITE,
    485                                  NULL,
    486                                  0,
    487                                  CONSOLE_TEXTMODE_BUFFER,
    488                                  0);
    489 
    490    HMSetStdHandle(STD_OUTPUT_HANDLE,
    491                   hStandardOut);
    492 
    493    /***********************************************************************
    494     * initialize stderr handle                                            *
    495     ***********************************************************************/
    496    hStandardError = GetStdHandle(STD_ERROR_HANDLE);
    497    dwType = GetFileType(hStandardError);
    498    if (dwType == FILE_TYPE_CHAR)                /* is handle redirected ? */
    499      hStandardError = HMCreateFile("CONOUT$",
    500                                    GENERIC_READ | GENERIC_WRITE,
    501                                    FILE_SHARE_READ | FILE_SHARE_WRITE,
    502                                    NULL,
    503                                    0,
    504                                    CONSOLE_TEXTMODE_BUFFER,
    505                                    0);
    506 
    507    HMSetStdHandle(STD_ERROR_HANDLE,
    508                   hStandardError);
     486    HMUpdtStdHandle(STD_OUTPUT_HANDLE,
     487                    hStandardOut);
     488  }
     489
     490  /***********************************************************************
     491   * initialize stderr handle                                            *
     492   ***********************************************************************/
     493  hStandardError = GetStdHandle(STD_ERROR_HANDLE);
     494  dwType = GetFileType(hStandardError);
     495  if (dwType == FILE_TYPE_CHAR) {               /* is handle redirected ? */
     496    hStandardError = HMCreateFile("CONOUT$",
     497                                  GENERIC_READ | GENERIC_WRITE,
     498                                  FILE_SHARE_READ | FILE_SHARE_WRITE,
     499                                  NULL,
     500                                  0,
     501                                  CONSOLE_TEXTMODE_BUFFER,
     502                                  0);
     503    HMUpdtStdHandle(STD_ERROR_HANDLE,
     504                    hStandardError);
    509505  }
    510506
Note: See TracChangeset for help on using the changeset viewer.