Changeset 56972c81 in mainline
- Timestamp:
- 2006-03-14T21:19:38Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- ee7736e
- Parents:
- 4241683
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
init/init.c
r4241683 r56972c81 33 33 #include <unistd.h> 34 34 #include <stdlib.h> 35 35 /* 36 static void test_printf(void) 37 { 38 printf("Simple text.\n"); 39 printf("Now insert '%s' string.\n","this"); 40 printf("We are brave enought to print numbers like %%d = '%d'\n", 0x123456); 41 printf("And now... '%b' byte! '%w' word! '%W' Word! \n", 0x12, 0x1234, 0x1234); 42 printf(" '%Q' Q! Another '%q' q! \n", 0x1234567887654321ll, 0x1234567887654321ll); 43 printf(" '%P' with 64bit value and '%p' with 32 bit value. \n", 0x1234567887654321ll, 0x12345678 ); 44 printf("Thats all, folks!\n"); 45 } 46 */ 36 47 /* 37 48 static void test_mremap(void) -
libc/generic/io/print.c
r4241683 r56972c81 33 33 #include <stdarg.h> 34 34 35 #define __PRINTF_FLAG_PREFIX 0x00000001 36 #define __PRINTF_FLAG_SIGNED 0x00000002 37 35 38 static char digits[] = "0123456789abcdef"; /**< Hexadecimal characters */ 36 39 … … 46 49 * 47 50 */ 48 static int print_fixed_hex(const uint64_t num, const int width )51 static int print_fixed_hex(const uint64_t num, const int width, uint64_t flags) 49 52 { 50 53 int i; 51 char buf[1 6];54 char buf[18]; /* 16 bytes for number + 2 for optionaly prefix */ 52 55 char *bptr; 53 56 54 57 bptr = buf; 58 59 if (flags & __PRINTF_FLAG_PREFIX) { 60 buf[0] = '0'; 61 buf[1] = 'x'; 62 bptr += 2; 63 } 64 55 65 for (i = width*8 - 4; i >= 0; i -= 4) 56 66 *bptr++ = digits[(num>>i) & 0xf]; … … 71 81 * 72 82 */ 73 static int print_number(const unsigned int num, const unsigned int base)83 static int print_number(const unsigned long num, const unsigned int base, uint64_t flags) 74 84 { 75 85 int val = num; 76 char d[sizeof(unsigned int)*8+1]; /* this is good enough even for base == 2 */ 77 int i = sizeof(unsigned int)*8-1; 86 char d[sizeof(unsigned long)*8+1]; /* this is good enough even for base == 2 */ 87 int i = sizeof(unsigned long)*8-1; 88 89 /* FIXME: if signed, print sign */ 78 90 79 91 do { … … 81 93 } while (val /= base); 82 94 83 d[sizeof(unsigned int)*8] = 0;95 d[sizeof(unsigned long)*8] = 0; 84 96 85 97 return putstr(&d[i + 1]); … … 149 161 va_list ap; 150 162 char c; 163 164 uint64_t flags; 151 165 152 166 counter = 0; … … 158 172 /* print common characters if any processed */ 159 173 if (i > j) { 160 if ((retval = putnchars(&fmt[j], i - j)) == EOF) { /* error */174 if ((retval = putnchars(&fmt[j], (size_t)(i - j))) == EOF) { /* error */ 161 175 return -counter; 162 176 } 163 177 counter += retval; 164 178 } 165 179 166 180 j = ++i; 167 181 182 /* parse modifiers */ 183 flags = 0; 184 /*switch (c = fmt[i]) { 185 case '-': 186 } 187 */ 168 188 switch (c = fmt[i]) { 169 189 … … 184 204 break; 185 205 case 'c': 186 if ((retval = putnchars((char *)&va_arg(ap, int), sizeof(char))) == EOF) {206 if ((retval = putnchars((char *)&va_arg(ap, unsigned long), sizeof(char))) == EOF) { 187 207 return -counter; 188 208 }; … … 194 214 * Hexadecimal conversions with fixed width. 195 215 */ 196 case 'P': 197 if ((retval = putnchars("0x", 2)) == EOF) { 198 return -counter; 199 }; 200 201 counter += retval; 216 case 'P': 217 flags |= __PRINTF_FLAG_PREFIX; 202 218 case 'p': 203 if ((retval = print_fixed_hex(va_arg(ap, int), sizeof(int))) == EOF ) {219 if ((retval = print_fixed_hex(va_arg(ap, unsigned long), sizeof(unsigned long), flags)) == EOF ) { 204 220 return -counter; 205 221 }; … … 208 224 break; 209 225 case 'Q': 210 if ((retval = putnchars("0x", 2)) == EOF) { 211 return -counter; 212 }; 213 214 counter += retval; 226 flags |= __PRINTF_FLAG_PREFIX; 215 227 case 'q': 216 if ((retval = print_fixed_hex(va_arg(ap, uint64_t), sizeof(uint64_t) )) == EOF ) {228 if ((retval = print_fixed_hex(va_arg(ap, uint64_t), sizeof(uint64_t), flags)) == EOF ) { 217 229 return -counter; 218 230 }; … … 221 233 break; 222 234 case 'L': 223 if ((retval = putnchars("0x", 2)) == EOF) { 224 return -counter; 225 }; 226 227 counter += retval; 235 flags |= __PRINTF_FLAG_PREFIX; 228 236 case 'l': 229 if ((retval = print_fixed_hex(va_arg(ap, int), sizeof(uint32_t))) == EOF ) {237 if ((retval = print_fixed_hex(va_arg(ap, unsigned long), sizeof(uint32_t), flags)) == EOF ) { 230 238 return -counter; 231 239 }; … … 234 242 break; 235 243 case 'W': 236 if ((retval = putnchars("0x", 2)) == EOF) { 237 return -counter; 238 }; 239 240 counter += retval; 244 flags |= __PRINTF_FLAG_PREFIX; 241 245 case 'w': 242 if ((retval = print_fixed_hex(va_arg(ap, int), sizeof(uint16_t))) == EOF ) {246 if ((retval = print_fixed_hex(va_arg(ap, unsigned long), sizeof(uint16_t), flags)) == EOF ) { 243 247 return -counter; 244 248 }; … … 247 251 break; 248 252 case 'B': 249 if ((retval = putnchars("0x", 2)) == EOF) { 250 return -counter; 251 }; 252 253 counter += retval; 253 flags |= __PRINTF_FLAG_PREFIX; 254 254 case 'b': 255 if ((retval = print_fixed_hex(va_arg(ap, int), sizeof(uint8_t))) == EOF ) {255 if ((retval = print_fixed_hex(va_arg(ap, unsigned long), sizeof(uint8_t), flags)) == EOF ) { 256 256 return -counter; 257 257 }; … … 263 263 */ 264 264 case 'd': 265 if ((retval = print_number(va_arg(ap, int), 10)) == EOF ) { 265 case 'i': 266 flags |= __PRINTF_FLAG_SIGNED; 267 if ((retval = print_number(va_arg(ap,unsigned long), 10, flags)) == EOF ) { 266 268 return -counter; 267 269 }; … … 270 272 break; 271 273 case 'X': 272 if ((retval = putnchars("0x", 2)) == EOF) { 273 return -counter; 274 }; 275 276 counter += retval; 274 flags |= __PRINTF_FLAG_PREFIX; 277 275 case 'x': 278 if ((retval = print_number(va_arg(ap, int), 16)) == EOF ) {276 if ((retval = print_number(va_arg(ap, unsigned long), 16, flags)) == EOF ) { 279 277 return -counter; 280 278 }; … … 294 292 295 293 if (i > j) { 296 if ((retval = putnchars(&fmt[j], i - j)) == EOF) { /* error */294 if ((retval = putnchars(&fmt[j], (size_t)(i - j))) == EOF) { /* error */ 297 295 return -counter; 298 296 }
Note:
See TracChangeset
for help on using the changeset viewer.