date: restore hadling of MMDDhhmm[[CC]YY][.ss] date format
function old new delta date_main 698 889 +191 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
6e54249e05
commit
ff1822aed1
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user