Changeset 73587 in vbox for trunk/src/VBox/Runtime/common
- Timestamp:
- Aug 9, 2018 1:37:52 PM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/common/string/base64.cpp
r69111 r73587 400 400 /** 401 401 * Calculates the length of the Base64 encoding of a given number of bytes of 402 * data. 403 * 404 * This will assume line breaks every 64 chars. A RTBase64EncodedLengthEx 405 * function can be added if closer control over the output is found to be 406 * required. 402 * data produced by RTBase64Encode(). 407 403 * 408 404 * @returns The Base64 string length. … … 410 406 */ 411 407 RTDECL(size_t) RTBase64EncodedLength(size_t cbData) 408 { 409 return RTBase64EncodedLengthEx(cbData, 0); 410 } 411 RT_EXPORT_SYMBOL(RTBase64EncodedLength); 412 413 414 /** 415 * Calculates the length of the Base64 encoding of a given number of bytes of 416 * data produced by RTBase64EncodeEx() with the same @a fFlags. 417 * 418 * @returns The Base64 string length. 419 * @param cbData The number of bytes to encode. 420 * @param fFlags Flags, any combination of the RTBASE64_FLAGS \#defines. 421 */ 422 RTDECL(size_t) RTBase64EncodedLengthEx(size_t cbData, uint32_t fFlags) 412 423 { 413 424 if (cbData * 8 / 8 != cbData) … … 419 430 cch /= 6; 420 431 421 cch += ((cch - 1) / RTBASE64_LINE_LEN) * RTBASE64_EOL_SIZE; 432 if ((fFlags & RTBASE64_FLAGS_NO_LINE_BREAKS) == 0) /* add EOLs? */ 433 cch += ((cch - 1) / RTBASE64_LINE_LEN) * RTBASE64_EOL_SIZE; 422 434 return cch; 423 435 } … … 428 440 cch /= 6; 429 441 430 cch += ((cch - 1) / RTBASE64_LINE_LEN) * RTBASE64_EOL_SIZE; 442 if ((fFlags & RTBASE64_FLAGS_NO_LINE_BREAKS) == 0) /* add EOLs? */ 443 cch += ((cch - 1) / RTBASE64_LINE_LEN) * RTBASE64_EOL_SIZE; 431 444 return cch; 432 445 } 433 RT_EXPORT_SYMBOL(RTBase64EncodedLength );446 RT_EXPORT_SYMBOL(RTBase64EncodedLengthEx); 434 447 435 448 … … 438 451 * output buffer. 439 452 * 440 * This will make the same assumptions about line breaks and EOL size as 441 * RTBase64EncodedLength() does. A RTBase64EncodeEx function can be added if 442 * more strict control over the output formatting is found necessary. 453 * This is equivalent to calling RTBase64EncodeEx() with no flags. 443 454 * 444 455 * @returns IRPT status code. … … 453 464 */ 454 465 RTDECL(int) RTBase64Encode(const void *pvData, size_t cbData, char *pszBuf, size_t cbBuf, size_t *pcchActual) 466 { 467 return RTBase64EncodeEx(pvData, cbData, 0, pszBuf, cbBuf, pcchActual); 468 } 469 RT_EXPORT_SYMBOL(RTBase64Encode); 470 471 472 /** 473 * Encodes the specifed data into a Base64 string, the caller supplies the 474 * output buffer. 475 * 476 * @returns IRPT status code. 477 * @retval VERR_BUFFER_OVERFLOW if the output buffer is too small. The buffer 478 * may contain an invalid Base64 string. 479 * 480 * @param pvData The data to encode. 481 * @param cbData The number of bytes to encode. 482 * @param pszBuf Where to put the Base64 string. 483 * @param cbBuf The size of the output buffer, including the terminator. 484 * @param pcchActual The actual number of characters returned. 485 */ 486 RTDECL(int) RTBase64EncodeEx(const void *pvData, size_t cbData, uint32_t fFlags, 487 char *pszBuf, size_t cbBuf, size_t *pcchActual) 455 488 { 456 489 /* … … 483 516 pbSrc += 3; 484 517 485 /* deal out linefeeds */ 486 if (cbBuf == cbLineFeed && cbData) 487 { 488 if (cbBuf < RTBASE64_EOL_SIZE + 1) 489 return VERR_BUFFER_OVERFLOW; 490 cbBuf -= RTBASE64_EOL_SIZE; 491 if (RTBASE64_EOL_SIZE == 2) 492 *pchDst++ = '\r'; 493 *pchDst++ = '\n'; 494 cbLineFeed = cbBuf - RTBASE64_LINE_LEN; 518 if ((fFlags & RTBASE64_FLAGS_NO_LINE_BREAKS) == 0) /* add EOLs? */ 519 { 520 /* deal out end-of-line */ 521 if (cbBuf == cbLineFeed && cbData) 522 { 523 if (cbBuf < RTBASE64_EOL_SIZE + 1) 524 return VERR_BUFFER_OVERFLOW; 525 cbBuf -= RTBASE64_EOL_SIZE; 526 if (RTBASE64_EOL_SIZE == 2) 527 *pchDst++ = '\r'; 528 *pchDst++ = '\n'; 529 cbLineFeed = cbBuf - RTBASE64_LINE_LEN; 530 } 495 531 } 496 532 } … … 530 566 return VINF_SUCCESS; 531 567 } 532 RT_EXPORT_SYMBOL(RTBase64Encode); 533 568 RT_EXPORT_SYMBOL(RTBase64EncodeEx);
Note:
See TracChangeset
for help on using the changeset viewer.