Changeset 06e1e95 in mainline for kernel/generic/src/printf/printf_core.c
- Timestamp:
- 2006-09-14T17:09:21Z (18 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f1d1f5d3
- Parents:
- e5ecc02
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/printf/printf_core.c
re5ecc02 r06e1e95 28 28 */ 29 29 30 30 /** @addtogroup generic 31 31 * @{ 32 32 */ … … 497 497 ++i; 498 498 switch (c = fmt[i]) { 499 500 501 502 503 504 499 case '#': flags |= __PRINTF_FLAG_PREFIX; break; 500 case '-': flags |= __PRINTF_FLAG_LEFTALIGNED; break; 501 case '+': flags |= __PRINTF_FLAG_SHOWPLUS; break; 502 case ' ': flags |= __PRINTF_FLAG_SPACESIGN; break; 503 case '0': flags |= __PRINTF_FLAG_ZEROPADDED; break; 504 default: end = 1; 505 505 }; 506 506 … … 546 546 547 547 switch (fmt[i++]) { 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 548 /** TODO: unimplemented qualifiers: 549 * t ptrdiff_t - ISO C 99 550 */ 551 case 'h': /* char or short */ 552 qualifier = PrintfQualifierShort; 553 if (fmt[i] == 'h') { 554 i++; 555 qualifier = PrintfQualifierByte; 556 } 557 break; 558 case 'l': /* long or long long*/ 559 qualifier = PrintfQualifierLong; 560 if (fmt[i] == 'l') { 561 i++; 562 qualifier = PrintfQualifierLongLong; 563 } 564 break; 565 case 'z': /* unative_t */ 566 qualifier = PrintfQualifierNative; 567 break; 568 default: 569 qualifier = PrintfQualifierInt; /* default type */ 570 --i; 571 571 } 572 572 … … 575 575 switch (c = fmt[i]) { 576 576 577 /* 578 * String and character conversions. 579 */ 580 case 's': 581 if ((retval = print_string(va_arg(ap, char*), width, precision, flags, ps)) < 0) { 582 counter = -counter; 583 goto out; 584 }; 577 /* 578 * String and character conversions. 579 */ 580 case 's': 581 if ((retval = print_string(va_arg(ap, char*), width, precision, flags, ps)) < 0) { 582 counter = -counter; 583 goto out; 584 }; 585 586 counter += retval; 587 j = i + 1; 588 goto next_char; 589 case 'c': 590 c = va_arg(ap, unsigned int); 591 if ((retval = print_char(c, width, flags, ps)) < 0) { 592 counter = -counter; 593 goto out; 594 }; 585 595 586 counter += retval; 587 j = i + 1; 588 goto next_char; 589 case 'c': 590 c = va_arg(ap, unsigned int); 591 if ((retval = print_char(c, width, flags, ps)) < 0) { 592 counter = -counter; 593 goto out; 594 }; 595 596 counter += retval; 597 j = i + 1; 598 goto next_char; 599 600 /* 601 * Integer values 602 */ 603 case 'P': /* pointer */ 604 flags |= __PRINTF_FLAG_BIGCHARS; 605 case 'p': 606 flags |= __PRINTF_FLAG_PREFIX; 607 base = 16; 608 qualifier = PrintfQualifierPointer; 609 break; 610 case 'b': 611 base = 2; 612 break; 613 case 'o': 614 base = 8; 615 break; 616 case 'd': 617 case 'i': 618 flags |= __PRINTF_FLAG_SIGNED; 619 case 'u': 620 break; 621 case 'X': 622 flags |= __PRINTF_FLAG_BIGCHARS; 623 case 'x': 624 base = 16; 625 break; 626 /* percentile itself */ 627 case '%': 628 j = i; 629 goto next_char; 630 /* 631 * Bad formatting. 632 */ 633 default: 634 /* Unknown format 635 * now, the j is index of '%' so we will 636 * print whole bad format sequence 637 */ 638 goto next_char; 596 counter += retval; 597 j = i + 1; 598 goto next_char; 599 600 /* 601 * Integer values 602 */ 603 case 'P': /* pointer */ 604 flags |= __PRINTF_FLAG_BIGCHARS; 605 case 'p': 606 flags |= __PRINTF_FLAG_PREFIX; 607 base = 16; 608 qualifier = PrintfQualifierPointer; 609 break; 610 case 'b': 611 base = 2; 612 break; 613 case 'o': 614 base = 8; 615 break; 616 case 'd': 617 case 'i': 618 flags |= __PRINTF_FLAG_SIGNED; 619 case 'u': 620 break; 621 case 'X': 622 flags |= __PRINTF_FLAG_BIGCHARS; 623 case 'x': 624 base = 16; 625 break; 626 /* percentile itself */ 627 case '%': 628 j = i; 629 goto next_char; 630 /* 631 * Bad formatting. 632 */ 633 default: 634 /* Unknown format 635 * now, j is index of '%' so we will 636 * print whole bad format sequence 637 */ 638 goto next_char; 639 639 } 640 640 … … 643 643 /* print number */ 644 644 switch (qualifier) { 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 645 case PrintfQualifierByte: 646 size = sizeof(unsigned char); 647 number = (uint64_t)va_arg(ap, unsigned int); 648 break; 649 case PrintfQualifierShort: 650 size = sizeof(unsigned short); 651 number = (uint64_t)va_arg(ap, unsigned int); 652 break; 653 case PrintfQualifierInt: 654 size = sizeof(unsigned int); 655 number = (uint64_t)va_arg(ap, unsigned int); 656 break; 657 case PrintfQualifierLong: 658 size = sizeof(unsigned long); 659 number = (uint64_t)va_arg(ap, unsigned long); 660 break; 661 case PrintfQualifierLongLong: 662 size = sizeof(unsigned long long); 663 number = (uint64_t)va_arg(ap, unsigned long long); 664 break; 665 case PrintfQualifierPointer: 666 size = sizeof(void *); 667 number = (uint64_t)(unsigned long)va_arg(ap, void *); 668 break; 669 case PrintfQualifierNative: 670 size = sizeof(unative_t); 671 number = (uint64_t)va_arg(ap, unative_t); 672 break; 673 default: /* Unknown qualifier */ 674 counter = -counter; 675 goto out; 676 676 } 677 677 … … 719 719 } 720 720 721 722 /** @} 723 */ 724 721 /** @} 722 */
Note:
See TracChangeset
for help on using the changeset viewer.