Changeset dfb78a8b886b9bfa743dad9ea8e045c309cb69b3
- 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
| rccf664e |
rdfb78a8 |
|
| 39 | 39 | VLC_EXPORT( char *, convert_xml_special_chars, ( const char *psz_content ) ); |
|---|
| 40 | 40 | |
|---|
| | 41 | VLC_EXPORT( char *, vlc_b64_encode, ( const char * ) ); |
|---|
| | 42 | |
|---|
| 41 | 43 | VLC_EXPORT( char *, str_format_time, ( const char * ) ); |
|---|
| 42 | 44 | #define str_format_meta( a, b ) __str_format_meta( VLC_OBJECT( a ), b ) |
|---|
| rfbf4c80 |
rdfb78a8 |
|
| 212 | 212 | } |
|---|
| 213 | 213 | |
|---|
| 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 | |
|---|
| 261 | 215 | #endif |
|---|
| r37afbbd |
rdfb78a8 |
|
| 329 | 329 | } |
|---|
| 330 | 330 | |
|---|
| | 331 | /* Base64 encoding */ |
|---|
| | 332 | char *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 | |
|---|
| 331 | 379 | /**************************************************************************** |
|---|
| 332 | 380 | * String formating functions |
|---|