Changes in kernel/generic/src/printf/printf_core.c [7fadb65:1e27d85] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/printf/printf_core.c
r7fadb65 r1e27d85 75 75 #define PRINT_NUMBER_BUFFER_SIZE (64 + 5) 76 76 77 /** Get signed or unsigned integer argument */78 #define PRINTF_GET_INT_ARGUMENT(type, ap, flags) \79 ({ \80 unsigned type res; \81 \82 if ((flags) & __PRINTF_FLAG_SIGNED) { \83 signed type arg = va_arg((ap), signed type); \84 \85 if (arg < 0) { \86 res = -arg; \87 (flags) |= __PRINTF_FLAG_NEGATIVE; \88 } else \89 res = arg; \90 } else \91 res = va_arg((ap), unsigned type); \92 \93 res; \94 })95 96 77 /** Enumeration of possible arguments types. 97 78 */ … … 226 207 } 227 208 228 return (int) (counter );209 return (int) (counter + 1); 229 210 } 230 211 … … 264 245 } 265 246 266 return (int) (counter );247 return (int) (counter + 1); 267 248 } 268 249 … … 851 832 size_t size; 852 833 uint64_t number; 853 854 834 switch (qualifier) { 855 835 case PrintfQualifierByte: 856 836 size = sizeof(unsigned char); 857 number = PRINTF_GET_INT_ARGUMENT(int, ap, flags);837 number = (uint64_t) va_arg(ap, unsigned int); 858 838 break; 859 839 case PrintfQualifierShort: 860 840 size = sizeof(unsigned short); 861 number = PRINTF_GET_INT_ARGUMENT(int, ap, flags);841 number = (uint64_t) va_arg(ap, unsigned int); 862 842 break; 863 843 case PrintfQualifierInt: 864 844 size = sizeof(unsigned int); 865 number = PRINTF_GET_INT_ARGUMENT(int, ap, flags);845 number = (uint64_t) va_arg(ap, unsigned int); 866 846 break; 867 847 case PrintfQualifierLong: 868 848 size = sizeof(unsigned long); 869 number = PRINTF_GET_INT_ARGUMENT(long, ap, flags);849 number = (uint64_t) va_arg(ap, unsigned long); 870 850 break; 871 851 case PrintfQualifierLongLong: 872 852 size = sizeof(unsigned long long); 873 number = PRINTF_GET_INT_ARGUMENT(long long, ap, flags);853 number = (uint64_t) va_arg(ap, unsigned long long); 874 854 break; 875 855 case PrintfQualifierPointer: … … 886 866 counter = -counter; 887 867 goto out; 868 } 869 870 if (flags & __PRINTF_FLAG_SIGNED) { 871 if (number & (0x1 << (size * 8 - 1))) { 872 flags |= __PRINTF_FLAG_NEGATIVE; 873 874 if (size == sizeof(uint64_t)) { 875 number = -((int64_t) number); 876 } else { 877 number = ~number; 878 number &= 879 ~(0xFFFFFFFFFFFFFFFFll << 880 (size * 8)); 881 number++; 882 } 883 } 888 884 } 889 885
Note:
See TracChangeset
for help on using the changeset viewer.