Windows NT 4.0 source code leak
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.
 
 
 
 
 
 

133 lines
2.5 KiB

//
// String Functions
//
#include "stdafx.h"
#include "comprop.h"
// ===========================================================================
// Text copy functions
// ===========================================================================
//
// Convert CR/LF to LF (T String to W String)
//
BOOL
PCToUnixText(
LPWSTR & lpstrDestination, // Will allocate
const CString strSource
)
{
int cch = strSource.GetLength() + 1;
lpstrDestination = new WCHAR[cch];
if (lpstrDestination != NULL)
{
LPCTSTR lpS = strSource;
LPWSTR lpD = lpstrDestination;
do
{
if (*lpS != _T('\r'))
{
#ifdef UNICODE
*lpD++ = *lpS;
#else
::MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, lpS, 1, lpD++, 1);
#endif // UNICODE
}
}
while (*lpS++);
return TRUE;
}
return FALSE;
}
//
// Expand LF to CR/LF (no allocation necessary)
//
// W String to T String
//
BOOL
UnixToPCText(
CString & strDestination,
LPCWSTR lpstrSource
)
{
TRY
{
LPCWSTR lpS = lpstrSource;
//
// Since we're doubling every linefeed length, assume
// the worst possible expansion.
//
int cch = (::lstrlenW(lpstrSource) + 1) * 2;
LPTSTR lpD = strDestination.GetBuffer(cch);
do
{
if (*lpS == L'\n')
{
*lpD++ = _T('\r');
}
#ifdef UNICODE
*lpD++ = *lpS;
#else
::WideCharToMultiByte(CP_ACP, 0, lpS, 1, lpD++, 1, NULL, NULL);
#endif // UNICODE
}
while (*lpS++);
strDestination.ReleaseBuffer();
return TRUE;
}
CATCH_ALL(n)
{
TRACEEOLID(_T("Exception in UnixToPCText"));
}
END_CATCH_ALL
return FALSE;
}
//
// Straight copy with allocation
//
BOOL
TextToText(
LPWSTR & lpstrDestination,
const CString strSource
)
{
int cch = strSource.GetLength() + 1;
lpstrDestination = new WCHAR[cch];
if (lpstrDestination != NULL)
{
TWSTRCPY(lpstrDestination, strSource, cch);
return TRUE;
}
return FALSE;
}
#ifndef UNICODE
#define WBUFF_SIZE 255
//
// Copy a T String to an internal W String
//
LPWSTR
ReferenceAsWideString(
LPCTSTR str
)
{
static WCHAR wchBuff[WBUFF_SIZE+1];
::MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, str, -1, wchBuff, WBUFF_SIZE);
return wchBuff;
}
#endif !UNICODE