Changeset dfb78a8b886b9bfa743dad9ea8e045c309cb69b3

Show
Ignore:
Timestamp:
02/10/07 10:49:15 (2 years ago)
Author:
Rémi Denis-Courmont <rem@videolan.org>
git-committer:
Rémi Denis-Courmont <rem@videolan.org> 1171100955 +0000
git-parent:

[6be4bda5b2ba0c1bad35328a195daf43d4c57cb4]

git-author:
Rémi Denis-Courmont <rem@videolan.org> 1171100955 +0000
Message:

De-inline base64 decoder

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • include/vlc_strings.h

    rccf664e rdfb78a8  
    3939VLC_EXPORT( char *, convert_xml_special_chars, ( const char *psz_content ) ); 
    4040 
     41VLC_EXPORT( char *, vlc_b64_encode, ( const char * ) ); 
     42 
    4143VLC_EXPORT( char *, str_format_time, ( const char * ) ); 
    4244#define str_format_meta( a, b ) __str_format_meta( VLC_OBJECT( a ), b ) 
  • include/vlc_url.h

    rfbf4c80 rdfb78a8  
    212212} 
    213213 
    214 /* Base64 encoding */ 
    215 static inline char *vlc_b64_encode( const char *src ) 
    216 
    217     static const char b64[] = 
    218            "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 
    219     size_t len = strlen( src ); 
    220     const uint8_t *in = (const uint8_t *)src; 
    221  
    222     char *ret; 
    223     char *dst = (char *)malloc( ( len + 4 ) * 4 / 3 ); 
    224     if( dst == NULL ) 
    225         return NULL; 
    226  
    227     ret = dst; 
    228  
    229     while( len > 0 ) 
    230     { 
    231         /* pops (up to) 3 bytes of input, push 4 bytes */ 
    232         uint32_t v = *in++ << 24; // 1/3 
    233         *dst++ = b64[v >> 26]; // 1/4 
    234         v = v << 6; 
    235  
    236         if( len >= 2 ) 
    237             v |= *in++ << 22; // 2/3 
    238         *dst++ = b64[v >> 26]; // 2/4 
    239         v = v << 6; 
    240  
    241         if( len >= 3 ) 
    242             v |= *in++ << 20; // 3/3 
    243         *dst++ = ( len >= 2 ) ? b64[v >> 26] : '='; // 3/4 
    244         v = v << 6; 
    245  
    246         *dst++ = ( len >= 3 ) ? b64[v >> 26] : '='; // 4/4 
    247  
    248         len--; 
    249         if( len > 0 ) 
    250         { 
    251             len--; 
    252             if( len > 0 ) 
    253                 len--; 
    254         } 
    255     } 
    256  
    257     *dst = '\0'; 
    258  
    259     return ret; 
    260 
     214 
    261215#endif 
  • src/text/strings.c

    r37afbbd rdfb78a8  
    329329} 
    330330 
     331/* Base64 encoding */ 
     332char *vlc_b64_encode( const char *src ) 
     333{ 
     334    static const char b64[] = 
     335           "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 
     336    size_t len = strlen( src ); 
     337    const uint8_t *in = (const uint8_t *)src; 
     338 
     339    char *ret; 
     340    char *dst = (char *)malloc( ( len + 4 ) * 4 / 3 ); 
     341    if( dst == NULL ) 
     342        return NULL; 
     343 
     344    ret = dst; 
     345 
     346    while( len > 0 ) 
     347    { 
     348        /* pops (up to) 3 bytes of input, push 4 bytes */ 
     349        uint32_t v = *in++ << 24; // 1/3 
     350        *dst++ = b64[v >> 26]; // 1/4 
     351        v = v << 6; 
     352 
     353        if( len >= 2 ) 
     354            v |= *in++ << 22; // 2/3 
     355        *dst++ = b64[v >> 26]; // 2/4 
     356        v = v << 6; 
     357 
     358        if( len >= 3 ) 
     359            v |= *in++ << 20; // 3/3 
     360        *dst++ = ( len >= 2 ) ? b64[v >> 26] : '='; // 3/4 
     361        v = v << 6; 
     362 
     363        *dst++ = ( len >= 3 ) ? b64[v >> 26] : '='; // 4/4 
     364 
     365        len--; 
     366        if( len > 0 ) 
     367        { 
     368            len--; 
     369            if( len > 0 ) 
     370                len--; 
     371        } 
     372    } 
     373 
     374    *dst = '\0'; 
     375 
     376    return ret; 
     377} 
     378 
    331379/**************************************************************************** 
    332380 * String formating functions