[git commit master] date,touch: accept Jan 7 00:00:00 2010 format

Denys Vlasenko vda.linux at googlemail.com
Mon Mar 22 17:22:33 UTC 2010


commit: http://git.busybox.net/busybox/commit/?id=85dbf190c69f747cea3f8cdabecb3464ab1351be
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
parse_datestr                                        618     647     +29

Signed-off-by: Alexander Shishkin <virtuoso at slind.org>
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 libbb/time.c |   14 +++++++++++++-
 1 files changed, 13 insertions(+), 1 deletions(-)

diff --git a/libbb/time.c b/libbb/time.c
index 45ae6f3..5cd0426 100644
--- a/libbb/time.c
+++ b/libbb/time.c
@@ -15,6 +15,9 @@ void FAST_FUNC parse_datestr(const char *date_str, struct tm *ptm)
 
 	if (last_colon != NULL) {
 		/* Parse input and assign appropriately to ptm */
+#if ENABLE_DESKTOP
+		const char *endp;
+#endif
 
 		/* HH:MM */
 		if (sscanf(date_str, "%u:%u%c",
@@ -46,8 +49,17 @@ void FAST_FUNC parse_datestr(const char *date_str, struct tm *ptm)
 					&end) >= 5) {
 			ptm->tm_year -= 1900; /* Adjust years */
 			ptm->tm_mon -= 1; /* Adjust month from 1-12 to 0-11 */
+		} else
+#if ENABLE_DESKTOP  /* strptime is BIG: ~1k in uclibc, ~10k in glibc */
+		/* month_name d HH:MM:SS YYYY. Supported by GNU date */
+		if ((endp = strptime(date_str, "%b %d %T %Y", ptm)) != NULL
+		 && *endp == '\0'
+		) {
+			return; /* don't fall through to end == ":" check */
+		} else
+#endif
 //TODO: coreutils 6.9 also accepts "yyyy-mm-dd HH" (no minutes)
-		} else {
+		{
 			bb_error_msg_and_die(bb_msg_invalid_date, date_str);
 		}
 		if (end == ':') {
-- 
1.6.3.3



More information about the busybox-cvs mailing list