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 );
}