diff options
author | Ron Yorston <rmy@pobox.com> | 2020-02-16 13:07:08 +0000 |
---|---|---|
committer | Ron Yorston <rmy@pobox.com> | 2020-02-16 13:17:54 +0000 |
commit | e4446487d16118ebfcc88b168607073385a71e8a (patch) | |
tree | a48191436ac196e13891c5c68c0837a989345b3e | |
parent | 334bb8b921c987a7065fb84522a214a188514def (diff) | |
download | busybox-w32-e4446487d16118ebfcc88b168607073385a71e8a.tar.gz busybox-w32-e4446487d16118ebfcc88b168607073385a71e8a.tar.bz2 busybox-w32-e4446487d16118ebfcc88b168607073385a71e8a.zip |
win32: reduce size of strptime()
Our implementation of strptime() doesn't support alternative number
formats. Rather than duplicate the code for the affected conversion
specifications just return to the start of the switch statement.
Saves 256 bytes.
-rw-r--r-- | win32/strptime.c | 82 |
1 files changed, 8 insertions, 74 deletions
diff --git a/win32/strptime.c b/win32/strptime.c index 5dab9b4f4..c1164184d 100644 --- a/win32/strptime.c +++ b/win32/strptime.c | |||
@@ -454,85 +454,19 @@ __strptime_internal (const char *rp, const char *fmt, struct tm *tm, | |||
454 | case 'E': | 454 | case 'E': |
455 | /* We have no information about the era format. Just use | 455 | /* We have no information about the era format. Just use |
456 | the normal format. */ | 456 | the normal format. */ |
457 | if (*fmt != 'c' && *fmt != 'C' && *fmt != 'y' && *fmt != 'Y' | 457 | if (strchr("cCyYxX", *fmt) == NULL) |
458 | && *fmt != 'x' && *fmt != 'X') | ||
459 | /* This is an illegal format. */ | 458 | /* This is an illegal format. */ |
460 | return NULL; | 459 | return NULL; |
461 | 460 | ||
462 | goto start_over; | 461 | goto start_over; |
463 | case 'O': | 462 | case 'O': |
464 | switch (*fmt++) | 463 | /* We don't have an alternative number format. Just use |
465 | { | 464 | the normal format. */ |
466 | case 'd': | 465 | if (strchr("deHImMSUWVwy", *fmt) == NULL) |
467 | case 'e': | 466 | /* This is an illegal format. */ |
468 | /* Match day of month using alternate numeric symbols. */ | 467 | return NULL; |
469 | get_alt_number (1, 31, 2); | 468 | |
470 | tm->tm_mday = val; | 469 | goto start_over; |
471 | have_mday = 1; | ||
472 | want_xday = 1; | ||
473 | break; | ||
474 | case 'H': | ||
475 | /* Match hour in 24-hour clock using alternate numeric | ||
476 | symbols. */ | ||
477 | get_alt_number (0, 23, 2); | ||
478 | tm->tm_hour = val; | ||
479 | have_I = 0; | ||
480 | break; | ||
481 | case 'I': | ||
482 | /* Match hour in 12-hour clock using alternate numeric | ||
483 | symbols. */ | ||
484 | get_alt_number (1, 12, 2); | ||
485 | tm->tm_hour = val % 12; | ||
486 | have_I = 1; | ||
487 | break; | ||
488 | case 'm': | ||
489 | /* Match month using alternate numeric symbols. */ | ||
490 | get_alt_number (1, 12, 2); | ||
491 | tm->tm_mon = val - 1; | ||
492 | have_mon = 1; | ||
493 | want_xday = 1; | ||
494 | break; | ||
495 | case 'M': | ||
496 | /* Match minutes using alternate numeric symbols. */ | ||
497 | get_alt_number (0, 59, 2); | ||
498 | tm->tm_min = val; | ||
499 | break; | ||
500 | case 'S': | ||
501 | /* Match seconds using alternate numeric symbols. */ | ||
502 | get_alt_number (0, 61, 2); | ||
503 | tm->tm_sec = val; | ||
504 | break; | ||
505 | case 'U': | ||
506 | get_alt_number (0, 53, 2); | ||
507 | week_no = val; | ||
508 | have_uweek = 1; | ||
509 | break; | ||
510 | case 'W': | ||
511 | get_alt_number (0, 53, 2); | ||
512 | week_no = val; | ||
513 | have_wweek = 1; | ||
514 | break; | ||
515 | case 'V': | ||
516 | get_alt_number (0, 53, 2); | ||
517 | /* XXX This cannot determine any field in TM without | ||
518 | further information. */ | ||
519 | break; | ||
520 | case 'w': | ||
521 | /* Match number of weekday using alternate numeric symbols. */ | ||
522 | get_alt_number (0, 6, 1); | ||
523 | tm->tm_wday = val; | ||
524 | have_wday = 1; | ||
525 | break; | ||
526 | case 'y': | ||
527 | /* Match year within century using alternate numeric symbols. */ | ||
528 | get_alt_number (0, 99, 2); | ||
529 | tm->tm_year = val >= 69 ? val : val + 100; | ||
530 | want_xday = 1; | ||
531 | break; | ||
532 | default: | ||
533 | return NULL; | ||
534 | } | ||
535 | break; | ||
536 | default: | 470 | default: |
537 | return NULL; | 471 | return NULL; |
538 | } | 472 | } |