Ignore:
Timestamp:
Mar 26, 2018, 9:46:13 AM (7 years ago)
Author:
bird
Message:

kmk/output: Basic memory buffered output working.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kmk/w32/winchildren.c

    r3187 r3190  
    637637static void mkWinChildcareWorkerFlushUnwritten(PWINCHILD pChild, PWINCCWPIPE pPipe)
    638638{
    639     /** @todo integrate with output.c   */
    640639    DWORD cbUnwritten = pPipe->cbWritten - pPipe->offPendingRead;
    641640    if (cbUnwritten)
    642641    {
    643         DWORD cbWritten = 0;
    644         if (WriteFile(GetStdHandle(pPipe->iWhich == 1 ? STD_OUTPUT_HANDLE : STD_ERROR_HANDLE),
    645                       &pPipe->pbBuffer[pPipe->cbWritten], cbUnwritten, &cbWritten, NULL))
    646             pPipe->cbWritten += cbWritten <= cbUnwritten ? cbWritten : cbUnwritten; /* paranoia */
     642#ifdef CONFIG_WITH_OUTPUT_IN_MEMORY
     643        if (pChild->pMkChild)
     644        {
     645            output_write_bin(&pChild->pMkChild->output, pPipe->iWhich == 2, &pPipe->pbBuffer[pPipe->cbWritten], cbUnwritten);
     646            pPipe->cbWritten += cbUnwritten;
     647        }
     648        else
     649#endif
     650        {
     651            DWORD cbWritten = 0;
     652            if (WriteFile(GetStdHandle(pPipe->iWhich == 1 ? STD_OUTPUT_HANDLE : STD_ERROR_HANDLE),
     653                          &pPipe->pbBuffer[pPipe->cbWritten], cbUnwritten, &cbWritten, NULL))
     654                pPipe->cbWritten += cbWritten <= cbUnwritten ? cbWritten : cbUnwritten; /* paranoia */
     655        }
    647656    }
    648657}
     
    693702        if (offRest > offStart)
    694703        {
    695             /** @todo integrate with output.c   */
    696704            /* Write out offStart..offRest. */
    697705            DWORD cbToWrite = offRest - offStart;
    698             DWORD cbWritten = 0;
    699             if (WriteFile(GetStdHandle(pPipe->iWhich == 1 ? STD_OUTPUT_HANDLE : STD_ERROR_HANDLE),
    700                           &pPipe->pbBuffer[offStart], cbToWrite, &cbWritten, NULL))
    701             {
    702                 offStart += cbWritten <= cbToWrite ? cbWritten : cbToWrite; /* paranoia */
     706#ifdef CONFIG_WITH_OUTPUT_IN_MEMORY
     707            if (pChild->pMkChild)
     708            {
     709                output_write_bin(&pChild->pMkChild->output, pPipe->iWhich == 2, &pPipe->pbBuffer[offStart], cbToWrite);
     710                offStart += cbToWrite;
    703711                pPipe->cbWritten = offStart;
     712            }
     713            else
     714#endif
     715            {
     716                DWORD cbWritten = 0;
     717                if (WriteFile(GetStdHandle(pPipe->iWhich == 1 ? STD_OUTPUT_HANDLE : STD_ERROR_HANDLE),
     718                              &pPipe->pbBuffer[offStart], cbToWrite, &cbWritten, NULL))
     719                {
     720                    offStart += cbWritten <= cbToWrite ? cbWritten : cbToWrite; /* paranoia */
     721                    pPipe->cbWritten = offStart;
     722                }
    704723            }
    705724        }
Note: See TracChangeset for help on using the changeset viewer.