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))) {
|
if (!(opt & (OPT_SET | OPT_DATE))) {
|
||||||
opt |= OPT_SET;
|
opt |= OPT_SET;
|
||||||
date_str = argv[0]; /* can be NULL */
|
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++;
|
argv++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (*argv)
|
if (*argv)
|
||||||
bb_show_usage();
|
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;
|
int len = strchrnul(date_str, '.') - date_str;
|
||||||
|
|
||||||
/* MM[.SS] */
|
/* 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,
|
&tm_time->tm_min,
|
||||||
&end) >= 1) {
|
&end) >= 1) {
|
||||||
} else
|
} else
|
||||||
/* HHMM[.SS] */
|
/* 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_hour,
|
||||||
&tm_time->tm_min,
|
&tm_time->tm_min,
|
||||||
&end) >= 2) {
|
&end) >= 2) {
|
||||||
} else
|
} else
|
||||||
/* ddHHMM[.SS] */
|
/* 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_mday,
|
||||||
&tm_time->tm_hour,
|
&tm_time->tm_hour,
|
||||||
&tm_time->tm_min,
|
&tm_time->tm_min,
|
||||||
&end) >= 3) {
|
&end) >= 3) {
|
||||||
} else
|
} else
|
||||||
/* mmddHHMM[.SS] */
|
/* 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_mon,
|
||||||
&tm_time->tm_mday,
|
&tm_time->tm_mday,
|
||||||
&tm_time->tm_hour,
|
&tm_time->tm_hour,
|
||||||
|
Loading…
Reference in New Issue
Block a user