aboutsummaryrefslogtreecommitdiff
path: root/toys/posix/date.c
diff options
context:
space:
mode:
authorRob Landley <rob@landley.net>2015-08-11 01:50:19 -0500
committerRob Landley <rob@landley.net>2015-08-11 01:50:19 -0500
commit7f6bb3dae7ffe5ffdf10cc2e73a803ff820ebca8 (patch)
treeaca998074bcd8b985945d359b514c10c6a9d693c /toys/posix/date.c
parent0fb465194789965b6fb2efd31995a2441144d650 (diff)
downloadtoybox-7f6bb3dae7ffe5ffdf10cc2e73a803ff820ebca8.tar.gz
Bugfixes from Elliott Hughes: debug code got checked in (oops) and
uninitialized trash in struct tm fields could segfault glibc's strftime().
Diffstat (limited to 'toys/posix/date.c')
-rw-r--r--toys/posix/date.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/toys/posix/date.c b/toys/posix/date.c
index 5719fd25..909ca5a9 100644
--- a/toys/posix/date.c
+++ b/toys/posix/date.c
@@ -92,6 +92,8 @@ static int parse_default(char *str, struct tm *tm)
{
int len = 0;
+ memset(tm, 0, sizeof(struct tm));
+
// Parse @UNIXTIME[.FRACTION]
if (*str == '@') {
long long ll;
@@ -160,7 +162,6 @@ void date_main(void)
if (toys.optflags & FLAG_u) utzset();
if (TT.showdate) {
- setdate = TT.showdate;
if (TT.setfmt) {
char *s = strptime(TT.showdate, TT.setfmt+(*TT.setfmt=='+'), &tm);
@@ -179,7 +180,6 @@ void date_main(void)
((toys.optflags & FLAG_u) ? gmtime_r : localtime_r)(&now, &tm);
}
- setdate = *toys.optargs;
// Fall through if no arguments
if (!setdate);
// Display the date?
@@ -202,7 +202,6 @@ void date_main(void)
if (tv.tv_sec == (time_t)-1) goto bad_date;
tv.tv_usec = TT.nano/1000;
-exit(1);
if (settimeofday(&tv, NULL) < 0) perror_msg("cannot set date");
}