2010-03-07 13:13 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)

* contrib/hbtip/encmthd.c
    - Deleted __TIP_QP_[ENCODE|DECODE](). Either I'm misunderstanding 
      their purpose or they simply didn't work (pbly because they 
      were not even used by hbtip code).
This commit is contained in:
Viktor Szakats
2010-03-07 12:14:00 +00:00
parent 0ced59cdc6
commit 95db3b5391
2 changed files with 7 additions and 147 deletions

View File

@@ -17,6 +17,12 @@
past entries belonging to author(s): Viktor Szakats.
*/
2010-03-07 13:13 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* contrib/hbtip/encmthd.c
- Deleted __TIP_QP_[ENCODE|DECODE](). Either I'm misunderstanding
their purpose or they simply didn't work (pbly because they
were not even used by hbtip code).
2010-03-07 13:07 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* contrib/hbtip/encmthd.c
* contrib/hbtip/encurl.prg
@@ -34,7 +40,7 @@
INCOMPATIBLE: Old function names have been changed from
TIPENCODER*_[DECODE|ENCODE]() to __TIP_*_[ENCODE|DECODE]().
; TOFIX: Old C implementation of QP encoding/decoding doesn't
seem to work.
seem to work. [DONE - DELETED]
; TODO: Try eliminating redundancy in base64 encoding/decoding
between hbtip and core.

View File

@@ -247,152 +247,6 @@ HB_FUNC( __TIP_BASE64_DECODE )
hb_retclen_buffer( ( char * ) cRet, nPosRet );
}
HB_FUNC( __TIP_QP_ENCODE )
{
const char * cData = hb_parc( 1 );
int nLen = hb_parclen( 1 );
char * cRet;
unsigned char cElem;
int nVal, iLineLen = 0;
int nPosRet = 0, nPos = 0;
if( ! cData )
{
hb_errRT_BASE( EG_ARG, 3012, NULL,
HB_ERR_FUNCNAME, 1, hb_paramError( 1 ) );
return;
}
if( ! nLen )
{
hb_retc_null();
return;
}
/* Preallocating maximum possible length */
cRet = ( char * ) hb_xgrab( nLen * 3 + ( nLen / 72 ) * 3 + 3 );
/* last +3 is trailing \r\n\0 */
while( nPos < nLen )
{
cElem = ( unsigned char ) cData[ nPos ];
/* We chose not to encode spaces and tab here.
cElem is signed and ranges from -126 to +127.
negative values are automatically encoded */
if( ( cElem >= 33 && cElem <= 60 ) || cElem >= 62 ||
cElem == 9 || cElem == 32 )
{
cRet[ nPosRet++ ] = ( char ) cElem;
iLineLen++;
}
else
{
cRet[ nPosRet++ ] = '=';
nVal = cElem >> 4;
cRet[ nPosRet++ ] = ( char ) ( nVal < 10 ? '0' + nVal : 'A' + nVal - 10 );
nVal = cElem & 0x0f;
cRet[ nPosRet++ ] = ( char ) ( nVal < 10 ? '0' + nVal : 'A' + nVal - 10 );
iLineLen += 3;
}
nPos++;
if( iLineLen >= 72 )
{
cRet[ nPosRet++ ] = '=';
cRet[ nPosRet++ ] = '\r';
cRet[ nPosRet++ ] = '\n';
iLineLen = 0;
}
}
/* Securing last line trailing space, if needed */
cElem = ( unsigned char ) cRet[ nPosRet - 1 ];
if( cElem == 9 || cElem == 32 )
{
cRet[ nPosRet++ ] = '=';
cRet[ nPosRet++ ] = '\r';
cRet[ nPosRet++ ] = '\n';
}
/* Adding canonical new line for RFC2045 blocks */
/* this function also adds a zero */
cRet = ( char * ) hb_xrealloc( cRet, nPosRet + 1 );
hb_retclen_buffer( cRet, nPosRet );
}
HB_FUNC( __TIP_QP_DECODE )
{
const char *cData = hb_parc( 1 );
int nLen = hb_parclen( 1 );
char *cRet;
int nPos = 0, nPosRet = 0, nVal;
unsigned char cElem, cCipher;
if( ! cData )
{
hb_errRT_BASE( EG_ARG, 3012, NULL,
HB_ERR_FUNCNAME, 1, hb_paramError( 1 ) );
return;
}
if( ! nLen )
{
hb_retc_null();
return;
}
/* allocate maximum possible lenght. */
cRet = ( char * ) hb_xgrab( nLen + 1 );
while( nPos < nLen )
{
cElem = ( unsigned char ) cData[ nPos ];
if( cElem == '=' )
{
if( nPos < nLen - 2 )
{
cCipher = ( unsigned char ) cData[ ++nPos ];
/* soft line break */
if( cCipher == '\r' )
{
nPos += 2;
continue;
}
else
{
nVal = cCipher >= 'A' && cCipher <= 'F' ? cCipher - 'A' + 10 :
cCipher - '0';
nVal *= 16;
cCipher = ( unsigned char ) cData[ ++nPos ];
nVal += cCipher >= 'A' && cCipher <= 'F' ? cCipher - 'A' + 10 :
cCipher - '0';
cRet[ nPosRet++ ] = ( char ) nVal;
}
}
/* else the encoding is malformed */
else
{
if( nPosRet > 0 )
break;
}
}
else
cRet[ nPosRet++ ] = ( char ) cElem;
nPos ++;
}
/* this function also adds a zero */
/* hopefully reduce the size of cRet */
cRet = ( char * ) hb_xrealloc( cRet, nPosRet + 1 );
hb_retclen_buffer( cRet, nPosRet );
}
HB_FUNC( __TIP_URL_ENCODE )
{
const char * cData = hb_parc( 1 );