Module Name:    src
Committed By:   martin
Date:           Fri Feb 27 11:29:44 UTC 2015

Modified Files:
        src/usr.sbin/sysinst [netbsd-7]: defs.h main.c net.c run.c util.c

Log Message:
Pull up following revision(s) (requested by snj in ticket #554):
        usr.sbin/sysinst/defs.h: revision 1.5
        usr.sbin/sysinst/main.c: revision 1.6
        usr.sbin/sysinst/net.c: revision 1.17
        usr.sbin/sysinst/util.c: revision 1.5
        usr.sbin/sysinst/run.c: revision 1.3
Don't use asctime(localtime(time_t *)) because this is really ctime(time_t *)
and not checking the result of localtime can lead to tears.
Add a safectime() that always returns a good string, and add some debugging
so that we can see if there is indeed something wrong in the new libc time
code.


To generate a diff of this commit:
cvs rdiff -u -r1.3.4.1 -r1.3.4.2 src/usr.sbin/sysinst/defs.h \
    src/usr.sbin/sysinst/main.c
cvs rdiff -u -r1.2.4.1 -r1.2.4.2 src/usr.sbin/sysinst/net.c \
    src/usr.sbin/sysinst/run.c
cvs rdiff -u -r1.3.2.1 -r1.3.2.2 src/usr.sbin/sysinst/util.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.sbin/sysinst/defs.h
diff -u src/usr.sbin/sysinst/defs.h:1.3.4.1 src/usr.sbin/sysinst/defs.h:1.3.4.2
--- src/usr.sbin/sysinst/defs.h:1.3.4.1	Sun Jan 11 04:32:38 2015
+++ src/usr.sbin/sysinst/defs.h	Fri Feb 27 11:29:44 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: defs.h,v 1.3.4.1 2015/01/11 04:32:38 snj Exp $	*/
+/*	$NetBSD: defs.h,v 1.3.4.2 2015/02/27 11:29:44 martin Exp $	*/
 
 /*
  * Copyright 1997 Piermont Information Systems Inc.
@@ -550,6 +550,7 @@ void	get_tz_default(void);
 int	extract_file(distinfo *, int);
 void	do_coloring (unsigned int, unsigned int);
 int set_menu_select(menudesc *, void *);
+const char *safectime(time_t *);
 
 /* from target.c */
 #if defined(DEBUG)  ||	defined(DEBUG_ROOT)
Index: src/usr.sbin/sysinst/main.c
diff -u src/usr.sbin/sysinst/main.c:1.3.4.1 src/usr.sbin/sysinst/main.c:1.3.4.2
--- src/usr.sbin/sysinst/main.c:1.3.4.1	Sat Aug 23 03:44:02 2014
+++ src/usr.sbin/sysinst/main.c	Fri Feb 27 11:29:44 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: main.c,v 1.3.4.1 2014/08/23 03:44:02 riz Exp $	*/
+/*	$NetBSD: main.c,v 1.3.4.2 2015/02/27 11:29:44 martin Exp $	*/
 
 /*
  * Copyright 1997 Piermont Information Systems Inc.
@@ -474,14 +474,13 @@ cleanup(void)
 	endwin();
 
 	if (logfp) {
-		fprintf(logfp, "Log ended at: %s\n", asctime(localtime(&tloc)));
+		fprintf(logfp, "Log ended at: %s\n", safectime(&tloc));
 		fflush(logfp);
 		fclose(logfp);
 		logfp = NULL;
 	}
 	if (script) {
-		fprintf(script, "# Script ended at: %s\n",
-		    asctime(localtime(&tloc)));
+		fprintf(script, "# Script ended at: %s\n", safectime(&tloc));
 		fflush(script);
 		fclose(script);
 		script = NULL;

Index: src/usr.sbin/sysinst/net.c
diff -u src/usr.sbin/sysinst/net.c:1.2.4.1 src/usr.sbin/sysinst/net.c:1.2.4.2
--- src/usr.sbin/sysinst/net.c:1.2.4.1	Sat Aug 23 03:44:02 2014
+++ src/usr.sbin/sysinst/net.c	Fri Feb 27 11:29:44 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: net.c,v 1.2.4.1 2014/08/23 03:44:02 riz Exp $	*/
+/*	$NetBSD: net.c,v 1.2.4.2 2015/02/27 11:29:44 martin Exp $	*/
 
 /*
  * Copyright 1997 Piermont Information Systems Inc.
@@ -802,9 +802,8 @@ done:
 		}
 		scripting_fprintf(NULL, "cat <<EOF >/etc/resolv.conf\n");
 		time(&now);
-		/* NB: ctime() returns a string ending in  '\n' */
 		scripting_fprintf(f, ";\n; BIND data file\n; %s %s;\n",
-		    "Created by NetBSD sysinst on", ctime(&now));
+		    "Created by NetBSD sysinst on", safectime(&now));
 		if (net_domain[0] != '\0')
 			scripting_fprintf(f, "search %s\n", net_domain);
 		if (net_namesvr[0] != '\0')
Index: src/usr.sbin/sysinst/run.c
diff -u src/usr.sbin/sysinst/run.c:1.2.4.1 src/usr.sbin/sysinst/run.c:1.2.4.2
--- src/usr.sbin/sysinst/run.c:1.2.4.1	Wed Dec 31 06:23:11 2014
+++ src/usr.sbin/sysinst/run.c	Fri Feb 27 11:29:44 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: run.c,v 1.2.4.1 2014/12/31 06:23:11 snj Exp $	*/
+/*	$NetBSD: run.c,v 1.2.4.2 2015/02/27 11:29:44 martin Exp $	*/
 
 /*
  * Copyright 1997 Piermont Information Systems Inc.
@@ -113,7 +113,7 @@ log_flip(menudesc *m, void *arg)
 
 	(void)time(&tloc);
 	if (logfp) {
-		fprintf(logfp, "Log ended at: %s\n", asctime(localtime(&tloc)));
+		fprintf(logfp, "Log ended at: %s\n", safectime(&tloc));
 		fflush(logfp);
 		fclose(logfp);
 		logfp = NULL;
@@ -121,7 +121,7 @@ log_flip(menudesc *m, void *arg)
 		logfp = fopen("/tmp/sysinst.log", "a");
 		if (logfp != NULL) {
 			fprintf(logfp,
-			    "Log started at: %s\n", asctime(localtime(&tloc)));
+			    "Log started at: %s\n", safectime(&tloc));
 			fflush(logfp);
 		} else {
 			if (mainwin) {
@@ -146,7 +146,7 @@ script_flip(menudesc *m, void *arg)
 	(void)time(&tloc);
 	if (script) {
 		scripting_fprintf(NULL, "# Script ended at: %s\n",
-		    asctime(localtime(&tloc)));
+		    safectime(&tloc));
 		fflush(script);
 		fclose(script);
 		script = NULL;
@@ -155,7 +155,7 @@ script_flip(menudesc *m, void *arg)
 		if (script != NULL) {
 			scripting_fprintf(NULL, "#!/bin/sh\n");
 			scripting_fprintf(NULL, "# Script started at: %s\n",
-			    asctime(localtime(&tloc)));
+			    safectime(&tloc));
 			fflush(script);
 		} else {
 			msg_display(MSG_openfail, "script file",

Index: src/usr.sbin/sysinst/util.c
diff -u src/usr.sbin/sysinst/util.c:1.3.2.1 src/usr.sbin/sysinst/util.c:1.3.2.2
--- src/usr.sbin/sysinst/util.c:1.3.2.1	Sat Aug 23 03:44:02 2014
+++ src/usr.sbin/sysinst/util.c	Fri Feb 27 11:29:44 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: util.c,v 1.3.2.1 2014/08/23 03:44:02 riz Exp $	*/
+/*	$NetBSD: util.c,v 1.3.2.2 2015/02/27 11:29:44 martin Exp $	*/
 
 /*
  * Copyright 1997 Piermont Information Systems Inc.
@@ -1233,6 +1233,7 @@ set_tz_select(menudesc *m, void *arg)
 {
 	time_t t;
 	char *new;
+	struct tm *tm;
 
 	if (m && strcmp(tz_selected, m->opts[m->cursel].opt_name) != 0) {
 		/* Change the displayed timezone */
@@ -1251,8 +1252,10 @@ set_tz_select(menudesc *m, void *arg)
 
 	/* Update displayed time */
 	t = time(NULL);
+	tm = localtime(&t);
 	msg_display(MSG_choose_timezone,
-		    tz_default, tz_selected, ctime(&t), localtime(&t)->tm_zone);
+		    tz_default, tz_selected, safectime(&t), tm ? tm->tm_zone :
+		    "?");
 	return 0;
 }
 
@@ -1406,6 +1409,7 @@ set_timezone(void)
 	char localtime_link[STRSIZE];
 	char localtime_target[STRSIZE];
 	time_t t;
+	struct tm *tm;
 	int menu_no;
 
 	strlcpy(zoneinfo_dir, target_expand("/usr/share/zoneinfo/"),
@@ -1418,8 +1422,10 @@ set_timezone(void)
 	snprintf(tz_env, sizeof(tz_env), "%s%s", zoneinfo_dir, tz_selected);
 	setenv("TZ", tz_env, 1);
 	t = time(NULL);
+	tm = localtime(&t);
 	msg_display(MSG_choose_timezone,
-		    tz_default, tz_selected, ctime(&t), localtime(&t)->tm_zone);
+		    tz_default, tz_selected, safectime(&t), tm ? tm->tm_zone :
+		    "?");
 
 	signal(SIGALRM, timezone_sig);
 	alarm(60);
@@ -1698,3 +1704,16 @@ binary_available(const char *prog)
         return 0;
 }
 
+const char *
+safectime(time_t *t)
+{
+	const char *s = ctime(t);
+	if (s != NULL)
+		return s;
+
+	// Debugging.
+	fprintf(stderr, "Can't convert to localtime 0x%jx (%s)\n",
+	    (intmax_t)*t, strerror(errno));
+	      /*123456789012345678901234*/
+	return "preposterous clock time\n";
+}

Reply via email to