windows-nt/Source/XPSP1/NT/sdktools/restools/rlt32/rw/common/helper.cpp

63 lines
1.6 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
//////////////////////////////////////////////
//
// This file has the helper function used in the win32 r/w
// I copied them in this file to share them with the res32 r/w
//
#include <afxwin.h>
#include "..\common\helper.h"
//=============================================================================
// Get functions
//
UINT
GetPascalStringW( BYTE * * lplpBuf, LPSTR lpszText, WORD wMaxLen, LONG* pdwSize )
{
// Get the length of the string
WORD wstrlen = 0;
WORD wMBLen = 0;
GetWord( lplpBuf, &wstrlen, pdwSize );
if ((wstrlen+1)>wMaxLen) {
*pdwSize -= wstrlen*2;
*lplpBuf += wstrlen*2;
} else {
if (wstrlen) {
WCHAR* lpwszStr = new WCHAR[wstrlen+1];
if (!lpwszStr) *pdwSize =0;
else {
memcpy(lpwszStr, *lplpBuf, (wstrlen*2));
*(lpwszStr+wstrlen) = 0;
wMBLen = (WORD)_WCSTOMBS( lpszText, (WCHAR*)lpwszStr, wMaxLen);
delete lpwszStr;
}
}
*(lpszText+wMBLen) = 0;
*lplpBuf += wstrlen*2;
*pdwSize -= wstrlen*2;
}
return(wstrlen+1);
}
UINT
GetPascalStringA( BYTE * * lplpBuf, LPSTR lpszText, BYTE bMaxLen, LONG* pdwSize )
{
// Get the length of the string
BYTE bstrlen = 0;
GetByte( lplpBuf, &bstrlen, pdwSize );
if ((bstrlen+1)>bMaxLen) {
*pdwSize -= bstrlen;
*lplpBuf += bstrlen;
} else {
if (bstrlen)
memcpy(lpszText, *lplpBuf, bstrlen);
*(lpszText+bstrlen) = 0;
*lplpBuf += bstrlen;
*pdwSize -= bstrlen;
}
return(bstrlen+1);
}