From 7028259a0da450fcff4059df9bc4d4eb542e0f60 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Tue, 18 Jul 2006 18:51:35 +0000 Subject: [PATCH] simplify b64_encode() maybe this should be moved to libavutil ... Originally committed as revision 5782 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavformat/http.c | 32 +++++++++----------------------- 1 file changed, 9 insertions(+), 23 deletions(-) diff --git a/libavformat/http.c b/libavformat/http.c index cb6ba49..48099c3 100644 --- a/libavformat/http.c +++ b/libavformat/http.c @@ -285,6 +285,7 @@ URLProtocol http_protocol = { /***************************************************************************** * b64_encode: stolen from VLC's http.c + * simplified by michael *****************************************************************************/ static char *b64_encode( const unsigned char *src ) @@ -300,32 +301,17 @@ static char *b64_encode( const unsigned char *src ) }else return NULL; - for( ;; ) - { - if( *src ) - { - i_bits = ( i_bits << 8 )|( *src++ ); - i_shift += 8; - } - else if( i_shift > 0 ) - { - i_bits <<= 6 - i_shift; - i_shift = 6; - } - else - { - *dst++ = '='; - break; - } + while(*src){ + i_bits = (i_bits << 8) + *src++; + i_shift += 8; - while( i_shift >= 6 ) - { + do{ + *dst++ = b64[(i_bits << 6 >> i_shift) & 0x3f]; i_shift -= 6; - *dst++ = b64[(i_bits >> i_shift)&0x3f]; - } + }while( i_shift > 6 || (*src == 0 && i_shift>0)); } - - *dst++ = '\0'; + *dst++ = '='; + *dst = '\0'; return ret; } -- 2.7.4