Source Code (Use browser search to find items of interest.)
Class Index
khexedit'CHexClipboard (./kdeutils/khexedit/hexclipboard.h:26)
class CHexClipboard
{
public:
CHexClipboard( void );
~CHexClipboard( void );
bool encode( QByteArray &dst, QByteArray &src );
bool decode( QByteArray &dst, QString &src );
private:
bool plainDecode( QByteArray &dst, QString &src );
};
khexedit'CHexClipboard::CHexClipboard() (./kdeutils/khexedit/hexclipboard.cc:80)
CHexClipboard::CHexClipboard( void )
{
}
khexedit'CHexClipboard::~CHexClipboard() (./kdeutils/khexedit/hexclipboard.cc:85)
CHexClipboard::~CHexClipboard( void )
{
}
khexedit'CHexClipboard::encode() (./kdeutils/khexedit/hexclipboard.cc:90)
bool CHexClipboard::encode( QByteArray &dst, QByteArray &src )
{
if( src.size() == 0 )
{
return( false );
}
uint srcSize = src.size();
uint mimeSize = strlen( mimeHeader() );
uint lineSize = 72;
uint dstSize = (srcSize / 3 + (srcSize % 3 ? 1 : 0)) * 4;
dstSize += ((dstSize/lineSize) + 1)*2 + 1;
dst.resize( dstSize + mimeSize + 1 );
if( dst.isNull() == true )
{
return( false );
}
unsigned char inBuf[3], outBuf[4];
uint lineLen = 0;
memcpy( dst.data(), mimeHeader(), mimeSize );
uint j = mimeSize;
const uchar *table = base64EncodeTable();
for( uint i=0; i < srcSize; i += 3 )
{
memset( inBuf, 0, sizeof(inBuf) );
uint n;
for( n=0; n < 3; n++ )
{
if( i+n >= srcSize )
{
break;
}
inBuf[n] = src[i+n];
}
if( n > 0 )
{
outBuf[0] = table[ inBuf[0] >> 2 ];
outBuf[1] = table[ ((inBuf[0] & 0x3) << 4) | (inBuf[1] >> 4) ];
outBuf[2] = table[ ((inBuf[1] & 0xF) << 2) | (inBuf[2] >> 6) ];
outBuf[3] = table[ inBuf[2] & 0x3F ];
if( n < 3 )
{
outBuf[3] = '=';
if( n < 2 )
{
outBuf[2] = '=';
}
}
for( uint m=0; m<4; m++ )
{
if( lineLen >= lineSize )
{
dst[j++] = '\r';
dst[j++] = '\n';
lineLen = 0;
}
dst[j++] = outBuf[m];
lineLen += 1;
}
}
}
dst[j++] = '\r';
dst[j++] = '\n';
dst[j++] = '\0';
return( true );
}
khexedit'CHexClipboard::decode() (./kdeutils/khexedit/hexclipboard.cc:168)
bool CHexClipboard::decode( QByteArray &dst, QString &src )
{
uint mimeSize = strlen( mimeHeader() );
if( src.length() <= mimeSize )
{
return( plainDecode( dst, src ) );
}
if( memcmp( src.data(), mimeHeader(), mimeSize ) != 0 )
{
return( plainDecode( dst, src ) );
}
uint srcSize = src.length();
uint dstSize = (srcSize * 3) / 4;
uchar srcBuf[4], valBuf[4], dstBuf[3];
uint sumElement = 0;
dst.resize( dstSize );
if( dst.isNull() == true )
{
return( plainDecode( dst, src ) );
}
uint i,j;
uint n = 0;
const uchar *table = base64DecodeTable();
for( i=mimeSize; i<srcSize; )
{
for( j=0; j<4; )
{
if( i >= srcSize )
{
dst.truncate( sumElement );
return( j > 0 ? false : true );
}
int c = src[i++].latin1();
if( c <= ' ' )
{
continue;
}
if( table[c] & 0x80 )
{
return( plainDecode( dst, src ) );
}
srcBuf[j] = c;
valBuf[j] = table[c];
j++;
}
dstBuf[0] = (valBuf[0] << 2) | (valBuf[1] >> 4);
dstBuf[1] = (valBuf[1] << 4) | (valBuf[2] >> 2);
dstBuf[2] = (valBuf[2] << 6) | (valBuf[3]);
uint numElement = srcBuf[2] == '=' ? 1 : (srcBuf[3] == '=' ? 2 : 3);
for( uint m=0; m < numElement; m++ )
{
dst[n++] = dstBuf[m];
}
sumElement += numElement;
if( numElement < 3 )
{
break;
}
}
dst.truncate( sumElement );
return( true );
}
khexedit'CHexClipboard::plainDecode() (./kdeutils/khexedit/hexclipboard.cc:243)
bool CHexClipboard::plainDecode( QByteArray &dst, QString &src )
{
dst.resize( src.length() );
if( dst.isNull() == true )
{
return( false );
}
for( uint i=0; i < src.length(); dst[i] = src[i].latin1(), i++ );
return( true );
}