| | @@ -434,23 +434,16 @@ |
| 434 | 434 | */ |
| 435 | 435 | static unsigned char zBase[] = |
| 436 | 436 | "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; |
| 437 | 437 | |
| 438 | 438 | /* |
| 439 | | -** Encode a string using a base-64 encoding. |
| 440 | | -** The encoding can be reversed using the <b>decode64</b> function. |
| 441 | | -** |
| 442 | | -** Space to hold the result comes from malloc(). |
| 439 | +** Translate nData bytes of content from zData into |
| 440 | +** ((nData+2)/3)*4) bytes of base64 encoded content and |
| 441 | +** put the result in z64. Add a zero-terminator at the end. |
| 443 | 442 | */ |
| 444 | | -char *encode64(const char *zData, int nData){ |
| 445 | | - char *z64; |
| 443 | +int translateBase64(const char *zData, int nData, char *z64){ |
| 446 | 444 | int i, n; |
| 447 | | - |
| 448 | | - if( nData<=0 ){ |
| 449 | | - nData = strlen(zData); |
| 450 | | - } |
| 451 | | - z64 = fossil_malloc( (nData*4)/3 + 8 ); |
| 452 | 445 | for(i=n=0; i+2<nData; i+=3){ |
| 453 | 446 | z64[n++] = zBase[ (zData[i]>>2) & 0x3f ]; |
| 454 | 447 | z64[n++] = zBase[ ((zData[i]<<4) & 0x30) | ((zData[i+1]>>4) & 0x0f) ]; |
| 455 | 448 | z64[n++] = zBase[ ((zData[i+1]<<2) & 0x3c) | ((zData[i+2]>>6) & 0x03) ]; |
| 456 | 449 | z64[n++] = zBase[ zData[i+2] & 0x3f ]; |
| | @@ -465,10 +458,26 @@ |
| 465 | 458 | z64[n++] = zBase[ ((zData[i]<<4) & 0x30) ]; |
| 466 | 459 | z64[n++] = '='; |
| 467 | 460 | z64[n++] = '='; |
| 468 | 461 | } |
| 469 | 462 | z64[n] = 0; |
| 463 | + return n; |
| 464 | +} |
| 465 | + |
| 466 | +/* |
| 467 | +** Encode a string using a base-64 encoding. |
| 468 | +** The encoding can be reversed using the <b>decode64</b> function. |
| 469 | +** |
| 470 | +** Space to hold the result comes from malloc(). |
| 471 | +*/ |
| 472 | +char *encode64(const char *zData, int nData){ |
| 473 | + char *z64; |
| 474 | + if( nData<=0 ){ |
| 475 | + nData = strlen(zData); |
| 476 | + } |
| 477 | + z64 = fossil_malloc( (nData*4)/3 + 8 ); |
| 478 | + translateBase64(zData, nData, z64); |
| 470 | 479 | return z64; |
| 471 | 480 | } |
| 472 | 481 | |
| 473 | 482 | /* |
| 474 | 483 | ** COMMAND: test-encode64 |
| 475 | 484 | |