Changeset 04803bf in mainline for uspace/lib/c/generic/io/printf_core.c
- Timestamp:
- 2011-03-21T22:00:17Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 143932e3
- Parents:
- b50b5af2 (diff), 7308e84 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - File:
-
- 1 moved
-
uspace/lib/c/generic/io/printf_core.c (moved) (moved from uspace/lib/libc/generic/io/printf_core.c ) (13 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/generic/io/printf_core.c
rb50b5af2 r04803bf 41 41 #include <io/printf_core.h> 42 42 #include <ctype.h> 43 #include <str ing.h>43 #include <str.h> 44 44 45 45 /** show prefixes 0x or 0 */ 46 46 #define __PRINTF_FLAG_PREFIX 0x00000001 47 47 48 /** signed / unsigned number */ 48 49 #define __PRINTF_FLAG_SIGNED 0x00000002 50 49 51 /** print leading zeroes */ 50 52 #define __PRINTF_FLAG_ZEROPADDED 0x00000004 53 51 54 /** align to left */ 52 55 #define __PRINTF_FLAG_LEFTALIGNED 0x00000010 56 53 57 /** always show + sign */ 54 58 #define __PRINTF_FLAG_SHOWPLUS 0x00000020 59 55 60 /** print space instead of plus */ 56 61 #define __PRINTF_FLAG_SPACESIGN 0x00000040 62 57 63 /** show big characters */ 58 64 #define __PRINTF_FLAG_BIGCHARS 0x00000080 65 59 66 /** number has - sign */ 60 67 #define __PRINTF_FLAG_NEGATIVE 0x00000100 … … 75 82 PrintfQualifierLong, 76 83 PrintfQualifierLongLong, 77 PrintfQualifierPointer 84 PrintfQualifierPointer, 85 PrintfQualifierSize 78 86 } qualifier_t; 79 87 80 static c har nullstr[]= "(NULL)";81 static c har digits_small[]= "0123456789abcdef";82 static c har digits_big[]= "0123456789ABCDEF";83 static c har invalch = U_SPECIAL;88 static const char *nullstr = "(NULL)"; 89 static const char *digits_small = "0123456789abcdef"; 90 static const char *digits_big = "0123456789ABCDEF"; 91 static const char invalch = U_SPECIAL; 84 92 85 93 /** Print one or more characters without adding newline. … … 253 261 if (str == NULL) 254 262 return printf_putstr(nullstr, ps); 255 263 256 264 /* Print leading spaces. */ 257 265 size_t strw = str_length(str); 258 266 if (precision == 0) 259 267 precision = strw; 260 268 261 269 /* Left padding */ 262 270 size_t counter = 0; … … 268 276 } 269 277 } 270 278 271 279 /* Part of @a str fitting into the alloted space. */ 272 280 int retval; … … 350 358 uint32_t flags, printf_spec_t *ps) 351 359 { 352 c har *digits;360 const char *digits; 353 361 if (flags & __PRINTF_FLAG_BIGCHARS) 354 362 digits = digits_big; … … 383 391 */ 384 392 if (flags & __PRINTF_FLAG_PREFIX) { 385 switch (base) {393 switch (base) { 386 394 case 2: 387 395 /* Binary formating is not standard, but usefull */ … … 447 455 /* Print prefix */ 448 456 if (flags & __PRINTF_FLAG_PREFIX) { 449 switch (base) {457 switch (base) { 450 458 case 2: 451 459 /* Binary formating is not standard, but usefull */ … … 545 553 * - "" Signed or unsigned int (default value).@n 546 554 * - "l" Signed or unsigned long int.@n 547 * If conversion is "c", the character is w char_t (wide character).@n555 * If conversion is "c", the character is wint_t (wide character).@n 548 556 * If conversion is "s", the string is wchar_t * (wide string).@n 549 557 * - "ll" Signed or unsigned long long int.@n 558 * - "z" Signed or unsigned ssize_t or site_t.@n 550 559 * 551 560 * CONVERSION:@n … … 562 571 * 563 572 * - P, p Print value of a pointer. Void * value is expected and it is 564 * printed in hexadecimal notation with prefix (as with \%#X / \%#x 565 * for 32-bit or \%#X / \%#x for 64-bit long pointers). 573 * printed in hexadecimal notation with prefix (as with 574 * \%#0.8X / \%#0.8x for 32-bit or \%#0.16lX / \%#0.16lx for 64-bit 575 * long pointers). 566 576 * 567 577 * - b Print value as unsigned binary number. Prefix is not printed by … … 728 738 } 729 739 break; 740 case 'z': 741 qualifier = PrintfQualifierSize; 742 i = nxt; 743 uc = str_decode(fmt, &nxt, STR_NO_LIMIT); 744 break; 730 745 default: 731 746 /* Default type */ … … 755 770 case 'c': 756 771 if (qualifier == PrintfQualifierLong) 757 retval = print_wchar(va_arg(ap, w char_t), width, flags, ps);772 retval = print_wchar(va_arg(ap, wint_t), width, flags, ps); 758 773 else 759 774 retval = print_char(va_arg(ap, unsigned int), width, flags, ps); … … 776 791 case 'p': 777 792 flags |= __PRINTF_FLAG_PREFIX; 793 flags |= __PRINTF_FLAG_ZEROPADDED; 778 794 base = 16; 779 795 qualifier = PrintfQualifierPointer; … … 838 854 case PrintfQualifierPointer: 839 855 size = sizeof(void *); 840 number = (uint64_t) (unsigned long) va_arg(ap, void *); 856 precision = size << 1; 857 number = (uint64_t) (uintptr_t) va_arg(ap, void *); 858 break; 859 case PrintfQualifierSize: 860 size = sizeof(size_t); 861 number = (uint64_t) va_arg(ap, size_t); 841 862 break; 842 863 default:
Note:
See TracChangeset
for help on using the changeset viewer.
