improvements to date(1)

Larry Doolittle ldoolitt at recycle.lbl.gov
Thu Oct 26 18:27:26 UTC 2000


Package: busybox
Version: 0.47
Severity: wishlist

Two changes to date.c.  Compatibility with gnu date
for date printing only, without specifying a format:

$ date -d 10:21
Thu Oct 26 10:21:00 PDT 2000

Instead of getting a usage message.

The above change let me easily test some code compaction in
date.c:date_conv_ftime(), which saves about 100 bytes of code
size, plus some heap space.  It helps to know about the
comma operator in c.  :-)

        - Larry Doolittle   <LRDoolittle at lbl.gov> 

--- date.c.orig	Thu Oct 26 11:15:07 2000
+++ date.c	Thu Oct 26 11:13:05 2000
@@ -74,73 +74,57 @@
 
 struct tm *date_conv_ftime(struct tm *tm_time, const char *t_string)
 {
-	struct tm itm_time, jtm_time, ktm_time, ltm_time, mtm_time, ntm_time;
-
-	itm_time = *tm_time;
-	jtm_time = *tm_time;
-	ktm_time = *tm_time;
-	ltm_time = *tm_time;
-	mtm_time = *tm_time;
-	ntm_time = *tm_time;
+	struct tm t;
 
 	/* Parse input and assign appropriately to tm_time */
 
-	if (sscanf(t_string, "%d:%d:%d",
-			   &itm_time.tm_hour, &itm_time.tm_min, &itm_time.tm_sec) == 3) {
-
-		*tm_time = itm_time;
-		return (tm_time);
-
-	} else if (sscanf(t_string, "%d:%d",
-					  &jtm_time.tm_hour, &jtm_time.tm_min) == 2) {
-
-		*tm_time = jtm_time;
-		return (tm_time);
-
-	} else if (sscanf(t_string, "%d.%d-%d:%d:%d",
-					  &ktm_time.tm_mon,
-					  &ktm_time.tm_mday,
-					  &ktm_time.tm_hour,
-					  &ktm_time.tm_min, &ktm_time.tm_sec) == 5) {
-
-		ktm_time.tm_mon -= 1;	/* Adjust dates from 1-12 to 0-11 */
-		*tm_time = ktm_time;
-		return (tm_time);
-
-	} else if (sscanf(t_string, "%d.%d-%d:%d",
-					  &ltm_time.tm_mon,
-					  &ltm_time.tm_mday,
-					  &ltm_time.tm_hour, &ltm_time.tm_min) == 4) {
-
-		ltm_time.tm_mon -= 1;	/* Adjust dates from 1-12 to 0-11 */
-		*tm_time = ltm_time;
-		return (tm_time);
-
-	} else if (sscanf(t_string, "%d.%d.%d-%d:%d:%d",
-					  &mtm_time.tm_year,
-					  &mtm_time.tm_mon,
-					  &mtm_time.tm_mday,
-					  &mtm_time.tm_hour,
-					  &mtm_time.tm_min, &mtm_time.tm_sec) == 6) {
-
-		mtm_time.tm_year -= 1900;	/* Adjust years */
-		mtm_time.tm_mon -= 1;	/* Adjust dates from 1-12 to 0-11 */
-		*tm_time = mtm_time;
-		return (tm_time);
-
-	} else if (sscanf(t_string, "%d.%d.%d-%d:%d",
-					  &ntm_time.tm_year,
-					  &ntm_time.tm_mon,
-					  &ntm_time.tm_mday,
-					  &ntm_time.tm_hour, &ntm_time.tm_min) == 5) {
-		ntm_time.tm_year -= 1900;	/* Adjust years */
-		ntm_time.tm_mon -= 1;	/* Adjust dates from 1-12 to 0-11 */
-		*tm_time = ntm_time;
-		return (tm_time);
+	if (t=*tm_time,sscanf(t_string, "%d:%d:%d",
+			   &t.tm_hour, &t.tm_min, &t.tm_sec) == 3) {
+					/* no adjustments needed */
+
+	} else if (t=*tm_time,sscanf(t_string, "%d:%d",
+					  &t.tm_hour, &t.tm_min) == 2) {
+					/* no adjustments needed */
+
+
+	} else if (t=*tm_time,sscanf(t_string, "%d.%d-%d:%d:%d",
+					  &t.tm_mon,
+					  &t.tm_mday,
+					  &t.tm_hour,
+					  &t.tm_min, &t.tm_sec) == 5) {
+
+		t.tm_mon -= 1;	/* Adjust dates from 1-12 to 0-11 */
+
+	} else if (t=*tm_time,sscanf(t_string, "%d.%d-%d:%d",
+					  &t.tm_mon,
+					  &t.tm_mday,
+					  &t.tm_hour, &t.tm_min) == 4) {
+
+		t.tm_mon -= 1;	/* Adjust dates from 1-12 to 0-11 */
+
+	} else if (t=*tm_time,sscanf(t_string, "%d.%d.%d-%d:%d:%d",
+					  &t.tm_year,
+					  &t.tm_mon,
+					  &t.tm_mday,
+					  &t.tm_hour,
+					  &t.tm_min, &t.tm_sec) == 6) {
+
+		t.tm_year -= 1900;	/* Adjust years */
+		t.tm_mon -= 1;	/* Adjust dates from 1-12 to 0-11 */
+
+	} else if (t=*tm_time,sscanf(t_string, "%d.%d.%d-%d:%d",
+					  &t.tm_year,
+					  &t.tm_mon,
+					  &t.tm_mday,
+					  &t.tm_hour, &t.tm_min) == 5) {
+		t.tm_year -= 1900;	/* Adjust years */
+		t.tm_mon -= 1;	/* Adjust dates from 1-12 to 0-11 */
 
+	} else {
+		fatalError(invalid_date, t_string); 
 	}
-
-	fatalError(invalid_date, t_string); 
+	*tm_time = t;
+	return (tm_time);
 }
 
 
@@ -188,7 +172,7 @@
 	else if (date_str == NULL) {
 		set_time = 1;
 		date_str = argv[optind];
-	} else {
+	} else if (use_arg != 1) {
 		usage(date_usage);
 	}
 

---------------------------------------
Received: (at 1069-done) by bugs.lineo.com; 29 Nov 2000 21:58:21 +0000


More information about the busybox mailing list