Ejemplo n.º 1
0
/*
 *  llatob(vp,p,base) 
 *      converts p to binary result in vp, rtn 1 on success
 */
int
llatob(u_quad_t *vp, char *p, int base)
{
	if (base == 0)
		p = _getbase (p, &base);
	return _atob(vp, p, base);
}
Ejemplo n.º 2
0
/*
 *  atob(vp,p,base)
 *      converts p to binary result in vp, rtn 1 on success
 */
int
atob(uint32_t *vp, char *p, int base)
{
    uint32_t v;
    if (base == 0)
        p = _getbase (p, &base);
    if (_atob (&v, p, base)) {
        *vp = v;
        return (1);
    }
    return (0);
}
Ejemplo n.º 3
0
/*
 *  atob(vp,p,base) 
 *      converts p to binary result in vp, rtn 1 on success
 */
int
atob(u_int32_t *vp, char *p, int base)
{
#ifdef HAVE_QUAD
	u_quad_t v;
#else
	u_long  v;
#endif

	if (base == 0)
		p = _getbase (p, &base);
	if (_atob (&v, p, base)) {
		*vp = v;
		return (1);
	}
	return (0);
}
Ejemplo n.º 4
0
BYTE* dataparser(LPCWSTR pStr,DWORD dwStrLen,MALLOC_FUNC pMalloc,DWORD* pdwDataLength)
{
	if (pStr[0]==L'\0')
		return NULL;
	
	if (_1stcontain2nd(pStr,L"int:"))
	{
		pStr+=4;
		BYTE* pRet=(BYTE*)pMalloc(4);
		*((DWORD*)pRet)=DWORD(_readnum(10,pStr));
		if (pdwDataLength!=NULL)
			*pdwDataLength=4;
		return pRet;
	}
	else if (_1stcontain2nd(pStr,L"dword"))
	{
		pStr+=5;
		int base=_getbase(pStr);
		if (*pStr!=':')
			return NULL;
		pStr++;
		BYTE* pRet=(BYTE*)pMalloc(4);
		*((DWORD*)pRet)=DWORD(_readnum(base,pStr));
		if (pdwDataLength!=NULL)
			*pdwDataLength=4;
		return pRet;
	}
	else if (_1stcontain2nd(pStr,L"word"))
	{
		pStr+=4;		
		int base=_getbase(pStr);
		if (*pStr!=':')
			return NULL;
		pStr++;
		BYTE* pRet=(BYTE*)pMalloc(2);
		*((WORD*)pRet)=WORD(_readnum(base,pStr));
		if (pdwDataLength!=NULL)
			*pdwDataLength=2;
		return pRet;
	}
	else if (_1stcontain2nd(pStr,L"byte"))
	{
		pStr+=4;		
		int base=_getbase(pStr);
		if (*pStr!=':')
			return NULL;
		pStr++;
		BYTE* pRet=(BYTE*)pMalloc(2);
		*pRet=BYTE(_readnum(base,pStr));
		if (pdwDataLength!=NULL)
			*pdwDataLength=1;
		return pRet;
	}
	else if (_1stcontain2nd(pStr,L"hex:") || _1stcontain2nd(pStr,L"bin:"))
	{
		pStr+=4;
		int i=0;
		
		// Calculating reqiured size
		for (LPCWSTR pStr2=pStr;*pStr2!='\0';i++)
		{
			if (!((*pStr2>='0' && *pStr2<='9') || 
				(*pStr2>='a' && *pStr2<='f') ||
				(*pStr2>='A' && *pStr2<='F')))
				break;
				
			pStr2++;

			if ((*pStr2>='0' && *pStr2<='9') || 
				(*pStr2>='a' && *pStr2<='f') ||
				(*pStr2>='A' && *pStr2<='F'))
				pStr2++;

			for (;*pStr2==' ';pStr2++);
		}

		if (i==0)
			return NULL;
			
		BYTE* pRet=(BYTE*)pMalloc(max(i,2));

		for (i=0;*pStr!='\0';i++)
		{
			if (*pStr>='0' && *pStr<='9')
				pRet[i]=*pStr-'0';
			else if (*pStr>='a' && *pStr<='f')
				pRet[i]=*pStr-'a'+0xa;
			else if (*pStr>='A' && *pStr<='F')
				pRet[i]=*pStr-'A'+0xa;
			else
				break;

			pStr++;

			if (*pStr>='0' && *pStr<='9')
			{
				pRet[i]<<=4;
				pRet[i]+=*pStr-'0';
				pStr++;
			}
			else if (*pStr>='a' && *pStr<='f')
			{
				pRet[i]<<=4;
				pRet[i]+=*pStr-'a'+0xa;
				pStr++;
			}
			else if (*pStr>='A' && *pStr<='F')
			{
				pRet[i]<<=4;
				pRet[i]+=*pStr-'A'+0xa;
				pStr++;
			}

			for (;*pStr==' ';pStr++);
		}
		if (pdwDataLength!=NULL)
			*pdwDataLength=i;
		return pRet;
	}
	else if (_1stcontain2nd(pStr,L"str:"))
	{
		dwStrLen-=4;
		pStr+=4;
		if (int(dwStrLen)<=0)
			return NULL;

		WCHAR* pUnicode;
		int len=_readstringW(pUnicode,pStr,dwStrLen,malloc);

		// Get Length
		len=WideCharToMultiByte(CP_ACP,0,pUnicode,len,NULL,0,NULL,NULL);
		char* pRet=(char*)pMalloc(len+1);		
		len=WideCharToMultiByte(CP_ACP,0,pUnicode,len,pRet,len+1,NULL,NULL);

		free(pUnicode);
		
		if (pdwDataLength!=NULL)
			*pdwDataLength=len;
		return (BYTE*)pRet;
	}
	else if (_1stcontain2nd(pStr,L"oem:"))
	{
		dwStrLen-=4;
		pStr+=4;
		if (int(dwStrLen)<=0)
			return NULL;
		
		WCHAR* pUnicode;
		int len=_readstringW(pUnicode,pStr,dwStrLen,malloc);

		// Get Length
		len=WideCharToMultiByte(CP_OEMCP,0,pUnicode,len,NULL,0,NULL,NULL);
		char* pRet=(char*)pMalloc(len+1);		
		len=WideCharToMultiByte(CP_OEMCP,0,pUnicode,len,pRet,len+1,NULL,NULL);

		free(pUnicode);
		
		if (pdwDataLength!=NULL)
			*pdwDataLength=len;
		return (BYTE*)pRet;
	}
	else if (_1stcontain2nd(pStr,L"wstr:") || _1stcontain2nd(pStr,L"uni:") || _1stcontain2nd(pStr,L"utf16:"))
	{
		for (pStr+=3,dwStrLen-=3;*pStr!=':';pStr++,dwStrLen--);
		pStr++;dwStrLen--;

		if (int(dwStrLen)<=0)
			return NULL;
	
		WCHAR* pRet;
		int len=_readstringW(pRet,pStr,dwStrLen,pMalloc);
		
		if (pdwDataLength!=NULL)
			*pdwDataLength=len*2;
		return (BYTE*)pRet;
	}
	else if (_1stcontain2nd(pStr,L"utf8:"))
	{
		dwStrLen-=5;
		pStr+=5;
		if (int(dwStrLen)<=0)
			return NULL;
		
		WCHAR* pUnicode;
		int len=_readstringW(pUnicode,pStr,dwStrLen,malloc);

		// Get Length
		char* pRet=(char*)pMalloc((len+1)*2);		
		len=WideCharToMultiByte(CP_UTF8,0,pUnicode,len,pRet,(len+1)*2,NULL,NULL);

		free(pUnicode);
		
		if (pdwDataLength!=NULL)
			*pdwDataLength=len;
		return (BYTE*)pRet;
	}
	else if (_1stcontain2nd(pStr,L"utf7:"))
	{
		dwStrLen-=5;
		pStr+=5;
		if (int(dwStrLen)<=0)
			return NULL;
		
		WCHAR* pUnicode;
		int len=_readstringW(pUnicode,pStr,dwStrLen,malloc);

		// Get Length
		char* pRet=(char*)pMalloc((len+1)*5);		
		len=WideCharToMultiByte(CP_UTF7,0,pUnicode,len,pRet,(len+1)*5,NULL,NULL);

		free(pUnicode);
		
		if (pdwDataLength!=NULL)
			*pdwDataLength=len;
		return (BYTE*)pRet;
	}
	else
	{
		if (int(dwStrLen)<=0)
			return NULL;
		
		if (pdwDataLength!=NULL)
			*pdwDataLength=dwStrLen;

		int nAllocLen=LenWtoA(pStr,dwStrLen);
		char* pNew=(char*)pMalloc(nAllocLen+1);
		MemCopyWtoA(pNew,nAllocLen+1,pStr,dwStrLen);
		pNew[nAllocLen]='\0';
		return (BYTE*)pNew;
	}
}