summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTheo de Raadt <deraadt@cvs.openbsd.org>2016-09-01 09:50:39 +0000
committerTheo de Raadt <deraadt@cvs.openbsd.org>2016-09-01 09:50:39 +0000
commit2b51d8896a8de1d6d03ad2f7f7eef0caff16084a (patch)
treee558046f2db00699787a6cf91cf8bc2749ce80ea
parentae2301448b6e8dc68505fef0750ad997971e4d30 (diff)
Aggressively use dprintf, rather than crazy unchecked writes. Use
localtime() since it tends to work better than ctime() when some filesystems are absent. ok guenther
-rw-r--r--sbin/shutdown/shutdown.c44
1 files changed, 24 insertions, 20 deletions
diff --git a/sbin/shutdown/shutdown.c b/sbin/shutdown/shutdown.c
index f85f10318f8..a8c8b16d806 100644
--- a/sbin/shutdown/shutdown.c
+++ b/sbin/shutdown/shutdown.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: shutdown.c,v 1.44 2015/11/16 18:35:31 deraadt Exp $ */
+/* $OpenBSD: shutdown.c,v 1.45 2016/09/01 09:50:38 deraadt Exp $ */
/* $NetBSD: shutdown.c,v 1.9 1995/03/18 15:01:09 cgd Exp $ */
/*
@@ -198,9 +198,14 @@ main(int argc, char *argv[])
}
mbuflen = strlen(mbuf);
- if (offset)
- (void)printf("Shutdown at %.24s.\n", ctime(&shuttime));
- else
+ if (offset) {
+ char *ct = ctime(&shuttime);
+
+ if (ct)
+ printf("Shutdown at %.24s.\n", ct);
+ else
+ printf("Shutdown soon.\n");
+ } else
(void)printf("Shutdown NOW!\n");
if (!(whom = getlogin()))
@@ -297,10 +302,12 @@ timewarn(int timeleft)
"\007*** %sSystem shutdown message from %s@%s ***\007\n",
timeleft ? "": "FINAL ", whom, hostname);
- if (timeleft > 10*60)
- (void)fprintf(pf, "System going down at %5.5s\n\n",
- ctime(&shuttime) + 11);
- else if (timeleft > 59)
+ if (timeleft > 10*60) {
+ struct tm *tm = localtime(&shuttime);
+
+ fprintf(pf, "System going down at %d:%02d\n\n",
+ tm->tm_hour, tm->tm_min);
+ } else if (timeleft > 59)
(void)fprintf(pf, "System going down in %d minute%s\n\n",
timeleft / 60, (timeleft > 60) ? "s" : "");
else if (timeleft)
@@ -514,7 +521,6 @@ getoffset(char *timearg)
}
}
-#define FSMSG "fastboot file for fsck\n"
void
doitfast(void)
{
@@ -522,31 +528,29 @@ doitfast(void)
if ((fastfd = open(_PATH_FASTBOOT, O_WRONLY|O_CREAT|O_TRUNC,
0664)) >= 0) {
- (void)write(fastfd, FSMSG, sizeof(FSMSG) - 1);
- (void)close(fastfd);
+ dprintf(fastfd, "fastboot file for fsck\n");
+ close(fastfd);
}
}
-#define NOMSG "\n\nNO LOGINS: System going down at "
void
nolog(void)
{
int logfd;
- char *ct;
+ struct tm *tm;
(void)unlink(_PATH_NOLOGIN); /* in case linked to another file */
(void)signal(SIGINT, finish);
(void)signal(SIGHUP, finish);
(void)signal(SIGQUIT, finish);
(void)signal(SIGTERM, finish);
- if ((logfd = open(_PATH_NOLOGIN, O_WRONLY|O_CREAT|O_TRUNC,
+ tm = localtime(&shuttime);
+ if (tm && (logfd = open(_PATH_NOLOGIN, O_WRONLY|O_CREAT|O_TRUNC,
0664)) >= 0) {
- (void)write(logfd, NOMSG, sizeof(NOMSG) - 1);
- ct = ctime(&shuttime);
- (void)write(logfd, ct + 11, 5);
- (void)write(logfd, "\n\n", 2);
- (void)write(logfd, mbuf, strlen(mbuf));
- (void)close(logfd);
+ dprintf(logfd,
+ "\n\nNO LOGINS: System going down at %d:%02d\n\n",
+ tm->tm_hour, tm->tm_min);
+ close(logfd);
}
}