219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
|
static DWORD ReadConsoleChars(HANDLE hConsole, WCHAR *lpBuffer,
RingSizeT nChars, RingSizeT *nCharsReadPtr);
static DWORD WriteConsoleChars(HANDLE hConsole,
const WCHAR *lpBuffer, RingSizeT nChars,
RingSizeT *nCharsWritten);
static void RingBufferInit(RingBuffer *ringPtr, RingSizeT capacity);
static void RingBufferClear(RingBuffer *ringPtr);
static char * RingBufferSegment(const RingBuffer *ringPtr, RingSizeT *lenPtr);
static RingSizeT RingBufferIn(RingBuffer *ringPtr, const char *srcPtr,
RingSizeT srcLen, int partialCopyOk);
static RingSizeT RingBufferOut(RingBuffer *ringPtr, char *dstPtr,
RingSizeT dstCapacity, int partialCopyOk);
static ConsoleHandleInfo *AllocateConsoleHandleInfo(HANDLE consoleHandle,
int permissions);
static ConsoleHandleInfo *FindConsoleInfo(const ConsoleChannelInfo *);
|
<
|
219
220
221
222
223
224
225
226
227
228
229
230
231
232
|
static DWORD ReadConsoleChars(HANDLE hConsole, WCHAR *lpBuffer,
RingSizeT nChars, RingSizeT *nCharsReadPtr);
static DWORD WriteConsoleChars(HANDLE hConsole,
const WCHAR *lpBuffer, RingSizeT nChars,
RingSizeT *nCharsWritten);
static void RingBufferInit(RingBuffer *ringPtr, RingSizeT capacity);
static void RingBufferClear(RingBuffer *ringPtr);
static RingSizeT RingBufferIn(RingBuffer *ringPtr, const char *srcPtr,
RingSizeT srcLen, int partialCopyOk);
static RingSizeT RingBufferOut(RingBuffer *ringPtr, char *dstPtr,
RingSizeT dstCapacity, int partialCopyOk);
static ConsoleHandleInfo *AllocateConsoleHandleInfo(HANDLE consoleHandle,
int permissions);
static ConsoleHandleInfo *FindConsoleInfo(const ConsoleChannelInfo *);
|
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
|
ringPtr->start = 0;
}
RINGBUFFER_ASSERT(ringPtr);
return dstCapacity;
}
/*
*------------------------------------------------------------------------
*
* RingBufferSegment --
*
* Returns a pointer to the leading data segment in the ring buffer.
*
* Results:
* Pointer to start of segment.
*
* Side effects:
* None.
*
*------------------------------------------------------------------------
*/
static inline char *
RingBufferSegment(const RingBuffer *ringPtr, RingSizeT *lengthPtr)
{
RINGBUFFER_ASSERT(ringPtr);
if (ringPtr->length <= (ringPtr->capacity - ringPtr->start)) {
/* No content wrap around. */
*lengthPtr = ringPtr->length;
}
else {
/* Content wraps around so lead segment stretches to end of buffer */
*lengthPtr = ringPtr->capacity - ringPtr->start;
}
return *lengthPtr == 0 ? NULL : ringPtr->start + ringPtr->bufPtr;
}
#ifndef NDEBUG
static int
RingBufferCheck(const RingBuffer *ringPtr)
{
return (ringPtr->bufPtr != NULL && ringPtr->capacity == CONSOLE_BUFFER_SIZE
&& ringPtr->start < ringPtr->capacity
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
480
481
482
483
484
485
486
487
488
489
490
491
492
493
|
ringPtr->start = 0;
}
RINGBUFFER_ASSERT(ringPtr);
return dstCapacity;
}
#ifndef NDEBUG
static int
RingBufferCheck(const RingBuffer *ringPtr)
{
return (ringPtr->bufPtr != NULL && ringPtr->capacity == CONSOLE_BUFFER_SIZE
&& ringPtr->start < ringPtr->capacity
|