date: restore hadling of MMDDhhmm[[CC]YY][.ss] date format
No binary (build failed)
—
(log yok)
| @@ -123,8 +123,33 @@ int date_main(int argc UNUSED_PARAM, char **argv) | |
| if (!(opt & (OPT_SET | OPT_DATE))) { | |
| opt |= OPT_SET; | |
| date_str = argv[0]; /* can be NULL */ | |
| - | if (date_str) |
| + | if (date_str) { |
| + | #if ENABLE_DESKTOP |
| + | int len = strspn(date_str, "0123456789"); |
| + | if (date_str[len] == '\0' |
| + | || (date_str[len] == '.' |
| + | && isdigit(date_str[len+1]) |
| + | && isdigit(date_str[len+2]) |
| + | && date_str[len+3] == '\0' |
| + | ) |
| + | ) { |
| + | /* Dreaded [MMDDhhmm[[CC]YY][.ss]] format! |
| + | * It does not match -d or -s format. |
| + | * Some users actually do use it. |
| + | */ |
| + | len -= 8; |
| + | if (len < 0 || len > 4 || (len & 1)) |
| + | bb_error_msg_and_die(bb_msg_invalid_date, date_str); |
| + | if (len != 0) { /* move YY or CCYY to front */ |
| + | char buf[4]; |
| + | memcpy(buf, date_str + 8, len); |
| + | memmove(date_str + len, date_str, 8); |
| + | memcpy(date_str, buf, len); |
| + | } |
| + | } |
| + | #endif |
| argv++; | |
| + | } |
| } | |
| if (*argv) | |
| bb_show_usage(); | |
| @@ -74,25 +74,25 @@ void FAST_FUNC parse_datestr(const char *date_str, struct tm *tm_time) | |
| int len = strchrnul(date_str, '.') - date_str; | |
| /* MM[.SS] */ | |
| - | if (len == 2 && sscanf(date_str, "%2u%2u%2u%2u%2u%c" + 12, |
| + | if (len == 2 && sscanf(date_str, "%2u%2u%2u%2u""%2u%c" + 12, |
| &tm_time->tm_min, | |
| &end) >= 1) { | |
| } else | |
| /* HHMM[.SS] */ | |
| - | if (len == 4 && sscanf(date_str, "%2u%2u%2u%2u%2u%c" + 9, |
| + | if (len == 4 && sscanf(date_str, "%2u%2u%2u""%2u%2u%c" + 9, |
| &tm_time->tm_hour, | |
| &tm_time->tm_min, | |
| &end) >= 2) { | |
| } else | |
| /* ddHHMM[.SS] */ | |
| - | if (len == 6 && sscanf(date_str, "%2u%2u%2u%2u%2u%c" + 6, |
| + | if (len == 6 && sscanf(date_str, "%2u%2u""%2u%2u%2u%c" + 6, |
| &tm_time->tm_mday, | |
| &tm_time->tm_hour, | |
| &tm_time->tm_min, | |
| &end) >= 3) { | |
| } else | |
| /* mmddHHMM[.SS] */ | |
| - | if (len == 8 && sscanf(date_str, "%2u%2u%2u%2u%2u%c" + 3, |
| + | if (len == 8 && sscanf(date_str, "%2u""%2u%2u%2u%2u%c" + 3, |
| &tm_time->tm_mon, | |
| &tm_time->tm_mday, | |
| &tm_time->tm_hour, | |