Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#include "pch.h"
//Read From Stdin
//Return Value:
// Number of WCHAR read if successful
// -1 in case of Failure. Call GetLastError to get the error.
LONG ReadFromIn(OUT LPWSTR *ppBuffer) { LPWSTR pBuffer = NULL; DWORD dwErr = ERROR_SUCCESS; pBuffer = (LPWSTR)LocalAlloc(LPTR,INIT_SIZE*sizeof(WCHAR)); if(!pBuffer) { SetLastError(ERROR_NOT_ENOUGH_MEMORY); return -1; }
LONG Pos = 0; LONG MaxSize = INIT_SIZE; wint_t ch; while((ch = getwchar()) != WEOF) { if(Pos == MaxSize -1 ) { if(ERROR_SUCCESS != ResizeByTwo(&pBuffer,&MaxSize)) { LocalFree(pBuffer); SetLastError(ERROR_NOT_ENOUGH_MEMORY); return -1; } } pBuffer[Pos++] = (WCHAR)ch; } pBuffer[Pos] = L'\0'; *ppBuffer = pBuffer; return Pos; }
//General Utility Functions
DWORD ResizeByTwo( LPTSTR *ppBuffer, LONG *pSize ) { LPWSTR pTempBuffer = (LPWSTR)LocalAlloc(LPTR,(*pSize)*2*sizeof(WCHAR)); if(!pTempBuffer) return ERROR_NOT_ENOUGH_MEMORY;
memcpy(pTempBuffer,*ppBuffer,*pSize*sizeof(WCHAR)); LocalFree(*ppBuffer); *ppBuffer = pTempBuffer; *pSize *=2; return ERROR_SUCCESS; }
BOOL StringCopy( LPWSTR *ppDest, LPWSTR pSrc) { *ppDest = NULL; if(!pSrc) return TRUE;
*ppDest = (LPWSTR)LocalAlloc(LPTR, (wcslen(pSrc) + 1)*sizeof(WCHAR)); if(!*ppDest) return FALSE; wcscpy(*ppDest,pSrc); return TRUE; }
|