about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorChristian Neukirchen <chneukirchen@gmail.com>2016-01-22 18:43:14 +0100
committerChristian Neukirchen <chneukirchen@gmail.com>2016-01-22 18:43:14 +0100
commit372fdabc1fcb5eda5a90a05da3d9f9b3b5857ba5 (patch)
tree6bb3109b362610f3024cff3e42a946d154737f20 /src
parent193f150ac3a87fad164b3911bb69280b0728f6f1 (diff)
downloadoutils-372fdabc1fcb5eda5a90a05da3d9f9b3b5857ba5.tar.gz
outils-372fdabc1fcb5eda5a90a05da3d9f9b3b5857ba5.tar.xz
outils-372fdabc1fcb5eda5a90a05da3d9f9b3b5857ba5.zip
cvs update
Diffstat (limited to 'src')
-rw-r--r--src/usr.bin/calendar/calendar.112
-rw-r--r--src/usr.bin/calendar/calendar.c20
-rw-r--r--src/usr.bin/calendar/calendar.h9
-rw-r--r--src/usr.bin/calendar/calendars/calendar.all4
-rw-r--r--src/usr.bin/calendar/calendars/calendar.holiday11
-rw-r--r--src/usr.bin/calendar/calendars/calendar.music3
-rw-r--r--src/usr.bin/calendar/calendars/calendar.nz48
-rw-r--r--src/usr.bin/calendar/day.c35
-rw-r--r--src/usr.bin/calendar/io.c14
-rw-r--r--src/usr.bin/jot/Makefile4
-rw-r--r--src/usr.bin/jot/jot.111
-rw-r--r--src/usr.bin/jot/jot.c44
-rw-r--r--src/usr.bin/lam/lam.111
-rw-r--r--src/usr.bin/rs/Makefile4
-rw-r--r--src/usr.bin/rs/rs.124
-rw-r--r--src/usr.bin/rs/rs.c153
-rw-r--r--src/usr.bin/signify/signify.18
-rw-r--r--src/usr.bin/signify/signify.c7
18 files changed, 275 insertions, 147 deletions
diff --git a/src/usr.bin/calendar/calendar.1 b/src/usr.bin/calendar/calendar.1
index f0a9596..a270eee 100644
--- a/src/usr.bin/calendar/calendar.1
+++ b/src/usr.bin/calendar/calendar.1
@@ -1,4 +1,4 @@
-.\"	$OpenBSD: calendar.1,v 1.39 2015/10/23 11:01:30 zhuk Exp $
+.\"	$OpenBSD: calendar.1,v 1.42 2016/01/20 19:12:28 jmc Exp $
 .\"
 .\" Copyright (c) 1989, 1990, 1993
 .\"     The Regents of the University of California.  All rights reserved.
@@ -29,7 +29,7 @@
 .\"
 .\"     @(#)calendar.1  8.1 (Berkeley) 6/29/93
 .\"
-.Dd $Mdocdate: October 23 2015 $
+.Dd $Mdocdate: January 20 2016 $
 .Dt CALENDAR 1
 .Os
 .Sh NAME
@@ -37,7 +37,7 @@
 .Nd reminder service
 .Sh SYNOPSIS
 .Nm calendar
-.Op Fl ab
+.Op Fl abw
 .Op Fl A Ar num
 .Op Fl B Ar num
 .Op Fl f Ar calendarfile
@@ -82,6 +82,8 @@ instead of using the current date.
 If yy is specified, but cc is not,
 a value for yy between 69 and 99 results in a cc value of 19.
 Otherwise, a cc value of 20 is used.
+.It Fl w
+Print day of the week name in front of each event.
 .El
 .Pp
 To handle calendars in your national code table you can specify
@@ -226,6 +228,8 @@ Jewish holidays (should be updated yearly by the local system administrator
 so that roving holidays are set correctly for the current year).
 .It Pa calendar.music
 Musical events, births, and deaths (strongly oriented toward rock n' roll).
+.It Pa calendar.nz
+New Zealand calendar.
 .It Pa calendar.openbsd
 .Ox
 related events.
@@ -235,6 +239,8 @@ Pagan holidays, celebrations and festivals.
 Russian calendar.
 .It Pa calendar.space
 Cosmic history.
+.It Pa calendar.uk
+UK calendar.
 .It Pa calendar.ushistory
 U.S. history.
 .It Pa calendar.usholiday
diff --git a/src/usr.bin/calendar/calendar.c b/src/usr.bin/calendar/calendar.c
index 094001f..547ba08 100644
--- a/src/usr.bin/calendar/calendar.c
+++ b/src/usr.bin/calendar/calendar.c
@@ -1,4 +1,4 @@
-/*	$OpenBSD: calendar.c,v 1.32 2015/10/23 11:43:16 zhuk Exp $	*/
+/*	$OpenBSD: calendar.c,v 1.35 2015/12/07 18:46:35 espie Exp $	*/
 
 /*
  * Copyright (c) 1989, 1993, 1994
@@ -53,6 +53,7 @@ char *calendarNoMail = "nomail";  /* don't sent mail if this file exists */
 
 struct passwd *pw;
 int doall = 0;
+int daynames = 0;
 time_t f_time = 0;
 int bodun_always = 0;
 
@@ -73,7 +74,7 @@ main(int argc, char *argv[])
 
 	(void)setlocale(LC_ALL, "");
 
-	while ((ch = getopt(argc, argv, "abf:t:A:B:-")) != -1)
+	while ((ch = getopt(argc, argv, "abwf:t:A:B:-")) != -1)
 		switch (ch) {
 		case '-':		/* backward contemptible */
 		case 'a':
@@ -108,6 +109,10 @@ main(int argc, char *argv[])
 				errx(1, "-B %s: %s", optarg, errstr);
 			break;
 
+		case 'w':
+			daynames = 1;
+			break;
+
 		default:
 			usage();
 		}
@@ -117,6 +122,15 @@ main(int argc, char *argv[])
 	if (argc)
 		usage();
 
+	if (doall) {
+		if (pledge("stdio rpath tmppath fattr getpw id proc exec", NULL)
+		    == -1)
+			err(1, "pledge");
+	} else {
+		if (pledge("stdio rpath proc exec", NULL) == -1)
+			err(1, "pledge");
+	}
+
 	/* use current time */
 	if (f_time <= 0)
 	    (void)time(&f_time);
@@ -249,7 +263,7 @@ void
 usage(void)
 {
 	(void)fprintf(stderr,
-	    "usage: calendar [-ab] [-A num] [-B num] [-f calendarfile] "
+	    "usage: calendar [-abw] [-A num] [-B num] [-f calendarfile] "
 	    "[-t [[[cc]yy]mm]dd]\n");
 	exit(1);
 }
diff --git a/src/usr.bin/calendar/calendar.h b/src/usr.bin/calendar/calendar.h
index b54d0b2..ac33b0d 100644
--- a/src/usr.bin/calendar/calendar.h
+++ b/src/usr.bin/calendar/calendar.h
@@ -1,4 +1,4 @@
-/*	$OpenBSD: calendar.h,v 1.14 2015/03/15 00:41:28 millert Exp $	*/
+/*	$OpenBSD: calendar.h,v 1.15 2015/12/07 18:46:35 espie Exp $	*/
 
 /*
  * Copyright (c) 1989, 1993, 1994
@@ -34,6 +34,7 @@
 
 extern struct passwd *pw;
 extern int doall;
+extern int daynames;
 extern int bodun_always;
 extern time_t f_time;
 extern struct tm *tp;
@@ -46,9 +47,11 @@ struct fixs {
 	int len;
 };
 
+#define PRINT_DATE_BASE_LEN 35
+
 struct event {
 	time_t	when;
-	char	print_date[31];
+	char	print_date[PRINT_DATE_BASE_LEN+1];
 	char	**desc;
 	char	*ldesc;
 	struct event	*next;
@@ -56,7 +59,7 @@ struct event {
 
 struct match {
 	time_t	when;
-	char	print_date[30];
+	char	print_date[PRINT_DATE_BASE_LEN];
 	int	bodun;
 	int	var;
 	struct match	*next;
diff --git a/src/usr.bin/calendar/calendars/calendar.all b/src/usr.bin/calendar/calendars/calendar.all
index 172357d..9e759bf 100644
--- a/src/usr.bin/calendar/calendars/calendar.all
+++ b/src/usr.bin/calendar/calendars/calendar.all
@@ -1,7 +1,7 @@
 /*
  * International and national calendar files
  *
- * $OpenBSD: calendar.all,v 1.5 2013/03/15 08:37:10 jmc Exp $
+ * $OpenBSD: calendar.all,v 1.7 2016/01/20 19:12:28 jmc Exp $
  */
 
 #ifndef _calendar_all_
@@ -17,5 +17,7 @@
 #include <calendar.ushistory>
 #include <calendar.space>
 #include <calendar.canada>
+#include <calendar.uk>
+#include <calendar.nz>
 
 #endif /* !_calendar_all_ */
diff --git a/src/usr.bin/calendar/calendars/calendar.holiday b/src/usr.bin/calendar/calendars/calendar.holiday
index ca9e5e0..4f87ead 100644
--- a/src/usr.bin/calendar/calendars/calendar.holiday
+++ b/src/usr.bin/calendar/calendars/calendar.holiday
@@ -1,7 +1,7 @@
 /*
  * Holiday
  *
- * $OpenBSD: calendar.holiday,v 1.32 2015/10/12 06:33:21 jmc Exp $
+ * $OpenBSD: calendar.holiday,v 1.35 2016/01/20 19:12:28 jmc Exp $
  */
 
 #ifndef _calendar_holiday_
@@ -12,7 +12,6 @@
 01/01	Universal Fraternity Day in Mozambique
 01/02	Ancestry Day in Haiti
 01/02	St. Berchtold's Day in Switzerland
-01/03	New Year's Holiday in Scotland
 01/03	Revolution Day in Upper Volta
 01/04	Independence Day in Burma
 01/04	Martyrs Day in Zaire
@@ -45,7 +44,6 @@
 02/02	Candlemas
 02/04	Independence Commemoration Day in Sri Lanka
 02/05	Constitution Day in Mexico
-02/06	New Zealand Day
 02/07	Independence Day in Grenada
 02/08	Preseren Day (Cultural Holiday) in Slovenia
 02/09	St. Maron's Day in Lebanon
@@ -138,7 +136,7 @@
 04/22	Oklahoma Day in Oklahoma
 04/24	Victory Day in Togo
 04/24*	Pesach - First Day of Passover - Festival of Freedom
-04/25	Anzac Day in Australia, New Zealand, Tonga, Western Samoa
+04/25*	ANZAC Day in Australia, New Zealand, and various other influenced places
 04/25	Liberation Day in Italy
 04/25	National Flag Day in Swaziland
 04/26	Confederate Memorial Day in Florida & Georgia
@@ -285,7 +283,6 @@
 08/03	Independence Day in Jamaica, Niger
 08/03	Memorial Day of Archbishop Makarios in Cyprus
 08/04	Freedom Day in Guyana
-08/05*	Bank Holiday in Scotland and Northern Ireland
 08/06	Bank Holiday in Australia, British Columbia, Fiji, Iceland, Ireland,
 	Ontario
 08/06	Emancipation Day in Bahamas
@@ -393,7 +390,6 @@
 10/23	Chulalongkron's Day in Thailand
 10/24	Independence Day in Zambia
 10/24	United Nations Day
-10/25	Labor Day in New Zealand
 10/25	Taiwan Restoration Day in Taiwan
 10/26	Agam Day in Nauru
 10/26	Armed Forces Day in Benin, Rwanda
@@ -435,7 +431,7 @@
 11/30	Independence Day in Barbados, People's Democratic Yemen Republic
 11/30	National Day in Benin
 11/30	National Heroes Day in Philippines
-11/30	St. Andrew's Day
+11/30	Saint Andrew's Day (also a bank holiday in Scotland)
 12/01	Independence Day in Central African Republic
 12/01	World AIDS Day
 12/01	National Day in Romania
@@ -490,7 +486,6 @@
 06/02	Corpus Christi in Paraguay
 06/MonFirst	Jefferson Davis's Birthday in Alabama & Mississippi (1st Monday)
 06/MonFirst	Jefferson Davis's Birthday in Florida, Georgia, & S. Carolina
-06/04	Queen's Birthday in New Zealand
 06/06	His Majesty, Yang Di-Pertuan Agong's Birthday in Malaysia
 06/11	Queen's Birthday
 06/12	Peace with Bolivia in Paraguay
diff --git a/src/usr.bin/calendar/calendars/calendar.music b/src/usr.bin/calendar/calendars/calendar.music
index 68bb1a7..d4bd30a 100644
--- a/src/usr.bin/calendar/calendars/calendar.music
+++ b/src/usr.bin/calendar/calendars/calendar.music
@@ -1,7 +1,7 @@
 /*
  * Music
  *
- * $OpenBSD: calendar.music,v 1.32 2015/05/21 10:42:30 jmc Exp $
+ * $OpenBSD: calendar.music,v 1.33 2016/01/11 07:46:37 sthen Exp $
  */
 
 #ifndef _calendar_music_
@@ -23,6 +23,7 @@
 01/10	Jim Croce is born in Philadelphia, 1943
 01/10	Pat Benatar is born in Long Island, 1952
 01/10	Rod Stewart is born in Glasgow, Scotland, 1945
+01/11	David Bowie dies, 2016
 01/11	Maurice Durufle is born in Louviers, France, 1902
 01/11	Reinhold Gliere is born in Kiev, Russia, 1875
 01/13	Eric Clapton plays the "Rainbow Concert" in London, 1973
diff --git a/src/usr.bin/calendar/calendars/calendar.nz b/src/usr.bin/calendar/calendars/calendar.nz
new file mode 100644
index 0000000..619b980
--- /dev/null
+++ b/src/usr.bin/calendar/calendars/calendar.nz
@@ -0,0 +1,48 @@
+/*
+ * New Zealand holiday
+ *
+ * $OpenBSD: calendar.nz,v 1.1 2016/01/20 19:12:28 jmc Exp $
+ */
+
+#ifndef _calendar_nz_
+#define _calendar_nz_
+
+01/01	New Year's Day
+01/02	Day after New Year's Day (public holiday)
+02/06*	New Zealand/Waitangi Day (public holiday)
+02/14	Saint Valentine's Day
+04/01	April Fools' Day
+04/SunFirst	Daylight Saving Time ends; clocks move back (first Sunday of April)
+05/SunSecond	Mother's Day (2nd Sunday in May)
+06/MonFirst	Queen's Birthday (public holiday, ski season begins)
+09/SunFirst	Father's Day (1st Sunday of September)
+09/26	Dominion Day
+09/SunLast	Daylight Saving Time starts; clocks move forward (last Sunday in September)
+10/MonFourth	Labour Day (public holiday)
+10/31	Halloween
+11/05	Guy Fawkes' Night
+12/25	Christmas Day
+12/26	Boxing Day
+12/31	New Year's Eve
+
+/* Provincial anniversary days */
+01/22*	Wellington Anniversary Day
+01/29*	Auckland and Northland Anniversary Days
+02/01*	Nelson Anniversary Day
+03/23*	Otago Anniversary Day
+03/MonSecond	New Plymouth Anniversary Day
+Easter+2	Southland Anniversary Day
+09/MonFourth	South Canterbury Anniversary Day
+09/FriThird	Hawke's Bay Anniversary Day
+11/01*	Marlborough Anniversary Day
+11/30*	Chatham Islands Anniversary Day
+12/01*	Westland Anniversary Day
+12/16*	South Canterbury Anniversary Day
+
+/* Seasonal days */
+03/20*	Autumnal Equinox
+06/21*	Winter Solstice
+09/22*	Vernal Equinox
+12/21*	Summer Solstice
+
+#endif /* !_calendar_nz_ */
diff --git a/src/usr.bin/calendar/day.c b/src/usr.bin/calendar/day.c
index 0d73aae..cea9709 100644
--- a/src/usr.bin/calendar/day.c
+++ b/src/usr.bin/calendar/day.c
@@ -1,4 +1,4 @@
-/*	$OpenBSD: day.c,v 1.30 2015/10/23 11:43:16 zhuk Exp $	*/
+/*	$OpenBSD: day.c,v 1.32 2015/12/08 19:04:50 mmcc Exp $	*/
 
 /*
  * Copyright (c) 1989, 1993, 1994
@@ -78,6 +78,14 @@ static struct fixs fnmonths[13];      /* full national months names */
 static struct fixs nmonths[13];       /* short national month names */
 
 void
+fill_print_date(struct match *m, struct tm *tm)
+{
+	if (strftime(m->print_date, sizeof(m->print_date),
+	    daynames ? "%a %b %d" : "%b %d", tm) == 0)
+		m->print_date[sizeof(m->print_date) - 1] = '\0';
+}
+
+void
 setnnames(void)
 {
 	char buf[80];
@@ -90,8 +98,7 @@ setnnames(void)
 		for (; l > 0 && isspace((unsigned char)buf[l - 1]); l--)
 			;
 		buf[l] = '\0';
-		if (ndays[i].name != NULL)
-			free(ndays[i].name);
+		free(ndays[i].name);
 		if ((ndays[i].name = strdup(buf)) == NULL)
 			err(1, NULL);
 		ndays[i].len = strlen(buf);
@@ -100,8 +107,7 @@ setnnames(void)
 		for (; l > 0 && isspace((unsigned char)buf[l - 1]); l--)
 			;
 		buf[l] = '\0';
-		if (fndays[i].name != NULL)
-			free(fndays[i].name);
+		free(fndays[i].name);
 		if ((fndays[i].name = strdup(buf)) == NULL)
 			err(1, NULL);
 		fndays[i].len = strlen(buf);
@@ -113,8 +119,7 @@ setnnames(void)
 		for (; l > 0 && isspace((unsigned char)buf[l - 1]); l--)
 			;
 		buf[l] = '\0';
-		if (nmonths[i].name != NULL)
-			free(nmonths[i].name);
+		free(nmonths[i].name);
 		if ((nmonths[i].name = strdup(buf)) == NULL)
 			err(1, NULL);
 		nmonths[i].len = strlen(buf);
@@ -123,8 +128,7 @@ setnnames(void)
 		for (; l > 0 && isspace((unsigned char)buf[l - 1]); l--)
 			;
 		buf[l] = '\0';
-		if (fnmonths[i].name != NULL)
-			free(fnmonths[i].name);
+		free(fnmonths[i].name);
 		if ((fnmonths[i].name = strdup(buf)) == NULL)
 			err(1, NULL);
 		fnmonths[i].len = strlen(buf);
@@ -455,12 +459,7 @@ isnow(char *endp, int bodun)
 			}
 
 			(void)mktime(&tmtmp);
-			if (strftime(tmp->print_date,
-			    sizeof(tmp->print_date),
-			/*    "%a %b %d", &tm);  Skip weekdays */
-			    "%b %d", &tmtmp) == 0)
-				tmp->print_date[sizeof(tmp->print_date) - 1] = '\0';
-
+			fill_print_date(tmp, &tmtmp);
 			tmp->var   = varp;
 			tmp->next  = NULL;
 			return(tmp);
@@ -549,11 +548,7 @@ isnow(char *endp, int bodun)
 					if ((tmp = malloc(sizeof(struct match))) == NULL)
 						err(1, NULL);
 					tmp->when = ttmp;
-					if (strftime(tmp->print_date,
-					    sizeof(tmp->print_date),
-					/*    "%a %b %d", &tm);  Skip weekdays */
-					    "%b %d", &tmtmp) == 0)
-						tmp->print_date[sizeof(tmp->print_date) - 1] = '\0';
+					fill_print_date(tmp, &tmtmp);
 					tmp->bodun = bodun && tdiff == -1;
 					tmp->var   = varp;
 					tmp->next  = NULL;
diff --git a/src/usr.bin/calendar/io.c b/src/usr.bin/calendar/io.c
index 05fe7ae..f17cacb 100644
--- a/src/usr.bin/calendar/io.c
+++ b/src/usr.bin/calendar/io.c
@@ -1,4 +1,4 @@
-/*	$OpenBSD: io.c,v 1.42 2015/10/23 12:36:23 deraadt Exp $	*/
+/*	$OpenBSD: io.c,v 1.43 2015/12/08 19:04:50 mmcc Exp $	*/
 
 /*
  * Copyright (c) 1989, 1993, 1994
@@ -98,8 +98,7 @@ cal(void)
 			    !strcmp(buf + 5, "by_BY.KOI8-B")) {
 				bodun_maybe++;
 				bodun = 0;
-				if (prefix)
-					free(prefix);
+				free(prefix);
 				prefix = NULL;
 			} else
 				bodun_maybe = 0;
@@ -124,8 +123,7 @@ cal(void)
 				calendar = LUNAR;
 		} else if (bodun_maybe && strncmp(buf, "BODUN=", 6) == 0) {
 			bodun++;
-			if (prefix)
-				free(prefix);
+			free(prefix);
 			if ((prefix = strdup(buf + 6)) == NULL)
 				err(1, NULL);
 			continue;
@@ -138,8 +136,7 @@ cal(void)
 				    (p - buf == spev[i].nlen) &&
 				    buf[spev[i].nlen + 1]) {
 					p++;
-					if (spev[i].uname != NULL)
-						free(spev[i].uname);
+					free(spev[i].uname);
 					if ((spev[i].uname = strdup(p)) == NULL)
 						err(1, NULL);
 					spev[i].ulen = strlen(p);
@@ -211,8 +208,7 @@ cal(void)
 	tmp = events;
 	while (tmp) {
 		events = tmp;
-		if (tmp->ldesc)
-			free(tmp->ldesc);
+		free(tmp->ldesc);
 		tmp = tmp->next;
 		free(events);
 	}
diff --git a/src/usr.bin/jot/Makefile b/src/usr.bin/jot/Makefile
index c552df3..3498301 100644
--- a/src/usr.bin/jot/Makefile
+++ b/src/usr.bin/jot/Makefile
@@ -1,6 +1,8 @@
-#	$OpenBSD: Makefile,v 1.4 2003/12/29 08:51:19 otto Exp $
+#	$OpenBSD: Makefile,v 1.5 2016/01/10 01:15:52 tb Exp $
 
 PROG=	jot
 CFLAGS+= -Wall
+LDADD+=	-lm
+DPADD+=	${LIBM}
 
 .include <bsd.prog.mk>
diff --git a/src/usr.bin/jot/jot.1 b/src/usr.bin/jot/jot.1
index 9845fa3..7bd0675 100644
--- a/src/usr.bin/jot/jot.1
+++ b/src/usr.bin/jot/jot.1
@@ -1,4 +1,4 @@
-.\"	$OpenBSD: jot.1,v 1.18 2014/01/20 05:07:48 schwarze Exp $
+.\"	$OpenBSD: jot.1,v 1.19 2016/01/04 23:21:28 schwarze Exp $
 .\"	$NetBSD: jot.1,v 1.2 1994/11/14 20:27:36 jtc Exp $
 .\"
 .\" Copyright (c) 1993
@@ -30,7 +30,7 @@
 .\"
 .\"	@(#)jot.1	8.1 (Berkeley) 6/6/93
 .\"
-.Dd $Mdocdate: January 20 2014 $
+.Dd $Mdocdate: January 4 2016 $
 .Dt JOT 1
 .Os
 .Sh NAME
@@ -313,3 +313,10 @@ To print all lines 80 characters or longer:
 .Xr yes 1 ,
 .Xr arc4random 3 ,
 .Xr printf 3
+.Sh HISTORY
+The
+.Nm
+utility first appeared in
+.Bx 4.2 .
+.Sh AUTHORS
+.An John A. Kunze
diff --git a/src/usr.bin/jot/jot.c b/src/usr.bin/jot/jot.c
index 8952ead..e4fdade 100644
--- a/src/usr.bin/jot/jot.c
+++ b/src/usr.bin/jot/jot.c
@@ -1,4 +1,4 @@
-/*	$OpenBSD: jot.c,v 1.26 2015/10/09 01:37:07 deraadt Exp $	*/
+/*	$OpenBSD: jot.c,v 1.27 2016/01/10 01:15:52 tb Exp $	*/
 /*	$NetBSD: jot.c,v 1.3 1994/12/02 20:29:43 pk Exp $	*/
 
 /*-
@@ -40,6 +40,8 @@
 #include <stdbool.h>
 #include <ctype.h>
 #include <limits.h>
+#include <math.h>
+#include <stdint.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -268,11 +270,45 @@ main(int argc, char *argv[])
 	if (reps == 0)
 		infinity = true;
 	if (randomize) {
-		x = (ender - begin) * (ender > begin ? 1 : -1);
+		bool		use_unif;
+		uint32_t	pow10 = 1;
+		uint32_t	uintx = 0; /* Initialized to make gcc happy. */
+
+		if (prec > 9)	/* pow(10, prec) > UINT32_MAX */
+			errx(1, "requested precision too large");
+
+		while (prec-- > 0)
+			pow10 *= 10;
+
+		if (ender < begin) {
+			x = begin;
+			begin = ender;
+			ender = x;
+		}
+		x = ender - begin;
+
+		/*
+		 * If pow10 * (ender - begin) is an integer, use
+		 * arc4random_uniform().
+		 */
+		use_unif = fmod(pow10 * (ender - begin), 1) == 0;
+		if (use_unif) {
+			uintx = pow10 * (ender - begin);
+			if (uintx >= UINT32_MAX)
+				errx(1, "requested range too large");
+			uintx++;
+		}
+
 		for (i = 1; i <= reps || infinity; i++) {
 			double v;
-			y = arc4random() / ((double)0xffffffff + 1);
-			v = y * x + begin;
+
+			if (use_unif) {
+				y = arc4random_uniform(uintx) / (double)pow10;
+				v = y + begin;
+			} else {
+				y = arc4random() / ((double)0xffffffff + 1);
+				v = y * x + begin;
+			}
 			if (putdata(v, reps == i && !infinity))
 				errx(1, "range error in conversion: %f", v);
 		}
diff --git a/src/usr.bin/lam/lam.1 b/src/usr.bin/lam/lam.1
index 80a7846..fd9d5d0 100644
--- a/src/usr.bin/lam/lam.1
+++ b/src/usr.bin/lam/lam.1
@@ -1,4 +1,4 @@
-.\"	$OpenBSD: lam.1,v 1.8 2009/08/16 09:41:08 sobrado Exp $
+.\"	$OpenBSD: lam.1,v 1.9 2016/01/04 23:21:28 schwarze Exp $
 .\"	$NetBSD: lam.1,v 1.4 2002/02/08 01:36:25 ross Exp $
 .\"
 .\" Copyright (c) 1993
@@ -30,7 +30,7 @@
 .\"
 .\"	@(#)lam.1	8.1 (Berkeley) 6/6/93
 .\"
-.Dd $Mdocdate: August 16 2009 $
+.Dd $Mdocdate: January 4 2016 $
 .Dt LAM 1
 .Os
 .Sh NAME
@@ -122,3 +122,10 @@ can be done with:
 .Xr join 1 ,
 .Xr pr 1 ,
 .Xr printf 1
+.Sh HISTORY
+The
+.Nm
+utility first appeared in
+.Bx 4.2 .
+.Sh AUTHORS
+.An John A. Kunze
diff --git a/src/usr.bin/rs/Makefile b/src/usr.bin/rs/Makefile
index 6c658e8..7fb1d6b 100644
--- a/src/usr.bin/rs/Makefile
+++ b/src/usr.bin/rs/Makefile
@@ -1,6 +1,6 @@
-#	$OpenBSD: Makefile,v 1.2 1996/06/26 05:38:46 deraadt Exp $
-
+#	$OpenBSD: Makefile,v 1.3 2015/12/03 12:23:15 schwarze Exp $
 
 PROG=	rs
+SRCS=	rs.c utf8.c
 
 .include <bsd.prog.mk>
diff --git a/src/usr.bin/rs/rs.1 b/src/usr.bin/rs/rs.1
index 85d05aa..d5afec4 100644
--- a/src/usr.bin/rs/rs.1
+++ b/src/usr.bin/rs/rs.1
@@ -1,4 +1,4 @@
-.\"	$OpenBSD: rs.1,v 1.16 2014/01/20 05:07:48 schwarze Exp $
+.\"	$OpenBSD: rs.1,v 1.18 2016/01/04 23:21:28 schwarze Exp $
 .\"	$FreeBSD: src/usr.bin/rs/rs.1,v 1.4 1999/08/28 01:05:21 peter Exp $
 .\"
 .\" Copyright (c) 1993
@@ -30,7 +30,7 @@
 .\"
 .\"	@(#)rs.1	8.2 (Berkeley) 12/30/93
 .\"
-.Dd $Mdocdate: January 20 2014 $
+.Dd $Mdocdate: January 4 2016 $
 .Dt RS 1
 .Os
 .Sh NAME
@@ -167,6 +167,19 @@ transposes its input, and assumes one array entry per input line
 unless the first non-ignored line is longer than the display width.
 Option letters which take numerical arguments interpret a missing
 number as zero unless otherwise indicated.
+.Sh ENVIRONMENT
+.Bl -tag -width LC_CTYPE
+.It Ev LC_CTYPE
+The character set
+.Xr locale 1 .
+It is used to calculate required column widths and to adjust entries
+within columns.
+If unset or set to
+.Qq C ,
+.Qq POSIX ,
+or an unsupported value, each byte is treated as a character of
+display width 1.
+.El
 .Sh EXAMPLES
 .Nm
 can be used as a filter to convert the stream output
@@ -221,6 +234,13 @@ $ rs \-eC 0 4 | sort | rs \-c 0 1
 .Xr pr 1 ,
 .Xr sort 1 ,
 .Xr vi 1
+.Sh HISTORY
+The
+.Nm
+utility first appeared in
+.Bx 4.2 .
+.Sh AUTHORS
+.An John A. Kunze
 .Sh BUGS
 Handles only two dimensional arrays.
 .Pp
diff --git a/src/usr.bin/rs/rs.c b/src/usr.bin/rs/rs.c
index 5d702cf..bb149ff 100644
--- a/src/usr.bin/rs/rs.c
+++ b/src/usr.bin/rs/rs.c
@@ -1,4 +1,4 @@
-/*	$OpenBSD: rs.c,v 1.28 2015/11/10 14:42:41 schwarze Exp $	*/
+/*	$OpenBSD: rs.c,v 1.30 2015/12/03 12:23:15 schwarze Exp $	*/
 
 /*-
  * Copyright (c) 1993
@@ -39,11 +39,17 @@
 #include <err.h>
 #include <errno.h>
 #include <limits.h>
+#include <locale.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
 
+struct	entry {
+	int	 w;  /* Display width. */
+	char	*s;  /* Multibyte string. */
+};
+
 long	flags;
 #define	TRANSPOSE	000001
 #define	MTRANSPOSE	000002
@@ -63,26 +69,27 @@ long	flags;
 
 short	*colwidths;
 int	nelem;
-char	**elem;
-char	**endelem;
+struct entry *elem;
+struct entry *endelem;
 char	*curline;
 int	allocsize = BUFSIZ;
-ssize_t	curlen;
 int	irows, icols;
 int	orows, ocols;
-ssize_t	maxlen;
+int	maxwidth;
 int	skip;
 int	propgutter;
 char	isep = ' ', osep = ' ';
 int	owidth = 80, gutter = 2;
 
+int	  mbsavis(char **, const char *);
+
 void	  usage(void);
 void	  getargs(int, char *[]);
 void	  getfile(void);
 int	  get_line(void);
-char	**getptrs(char **);
+struct entry *getptrs(struct entry *);
 void	  prepfile(void);
-void	  prints(char *, int);
+void	  prints(struct entry *, int);
 void	  putfile(void);
 
 #define INCR(ep) do {			\
@@ -93,6 +100,8 @@ void	  putfile(void);
 int
 main(int argc, char *argv[])
 {
+	setlocale(LC_CTYPE, "");
+
 	if (pledge("stdio", NULL) == -1)
 		err(1, "pledge");
 
@@ -110,13 +119,14 @@ main(int argc, char *argv[])
 void
 getfile(void)
 {
+	const char delim[2] = { isep, '\0' };
 	char *p;
-	char *endp;
-	char **ep = NULL;
+	struct entry *ep;
 	int multisep = (flags & ONEISEPONLY ? 0 : 1);
 	int nullpad = flags & NULLPAD;
-	char **padto;
+	struct entry *padto;
 
+	curline = NULL;
 	while (skip--) {
 		if (get_line() == EOF)
 			return;
@@ -125,67 +135,67 @@ getfile(void)
 	}
 	if (get_line() == EOF)
 		return;
-	if (flags & NOARGS && curlen < owidth)
+	if (flags & NOARGS && strlen(curline) < (size_t)owidth)
 		flags |= ONEPERLINE;
 	if (flags & ONEPERLINE)
 		icols = 1;
 	else				/* count cols on first line */
-		for (p = curline, endp = curline + curlen; p < endp; p++) {
+		for (p = curline; *p != '\0'; p++) {
 			if (*p == isep && multisep)
 				continue;
 			icols++;
 			while (*p && *p != isep)
 				p++;
 		}
-	ep = getptrs(elem);
+	ep = getptrs(NULL);
 	p = curline;
 	do {
 		if (flags & ONEPERLINE) {
-			*ep = curline;
+			ep->w = mbsavis(&ep->s, curline);
+			if (maxwidth < ep->w)
+				maxwidth = ep->w;
 			INCR(ep);		/* prepare for next entry */
-			if (maxlen < curlen)
-				maxlen = curlen;
 			irows++;
 			continue;
 		}
-		for (p = curline, endp = curline + curlen; p < endp; p++) {
-			if (*p == isep && multisep)
-				continue;	/* eat up column separators */
-			if (*p == isep)		/* must be an empty column */
-				*ep = "";
-			else			/* store column entry */
-				*ep = p;
-			while (p < endp && *p != isep)
-				p++;		/* find end of entry */
-			*p = '\0';		/* mark end of entry */
-			if (maxlen < p - *ep)	/* update maxlen */
-				maxlen = p - *ep;
+		p = curline;
+		while (p != NULL && *p != '\0') {
+			if (*p == isep) {
+				p++;
+				if (multisep)
+					continue;
+				ep->s = "";	/* empty column */
+				ep->w = 0;
+			} else
+				ep->w = mbsavis(&ep->s, strsep(&p, delim));
+			if (maxwidth < ep->w)
+				maxwidth = ep->w;
 			INCR(ep);		/* prepare for next entry */
 		}
 		irows++;			/* update row count */
 		if (nullpad) {			/* pad missing entries */
 			padto = elem + irows * icols;
 			while (ep < padto) {
-				*ep = "";
+				ep->s = "";
+				ep->w = 0;
 				INCR(ep);
 			}
 		}
 	} while (get_line() != EOF);
-	*ep = NULL;				/* mark end of pointers */
 	nelem = ep - elem;
 }
 
 void
 putfile(void)
 {
-	char **ep;
+	struct entry *ep;
 	int i, j, n;
 
 	ep = elem;
 	if (flags & TRANSPOSE) {
 		for (i = 0; i < orows; i++) {
 			for (j = i; j < nelem; j += orows)
-				prints(ep[j], (j - i) / orows);
+				prints(ep + j, (j - i) / orows);
 			putchar('\n');
 		}
 	} else {
@@ -193,7 +203,7 @@ putfile(void)
 			for (j = 0; j < ocols; j++) {
 				if (n++ >= nelem)
 					break;
-				prints(*ep++, j);
+				prints(ep++, j);
 			}
 			putchar('\n');
 		}
@@ -201,19 +211,15 @@ putfile(void)
 }
 
 void
-prints(char *s, int col)
+prints(struct entry *ep, int col)
 {
 	int n;
-	char *p = s;
 
-	while (*p)
-		p++;
-	n = (flags & ONEOSEPONLY ? 1 : colwidths[col] - (p - s));
+	n = (flags & ONEOSEPONLY ? 1 : colwidths[col] - ep->w);
 	if (flags & RIGHTADJUST)
 		while (n-- > 0)
 			putchar(osep);
-	for (p = s; *p; p++)
-		putchar(*p);
+	fputs(ep->s, stdout);
 	while (n-- > 0)
 		putchar(osep);
 }
@@ -232,18 +238,18 @@ usage(void)
 void
 prepfile(void)
 {
-	char **ep;
+	struct entry *ep;
 	int  i;
 	int  j;
-	char **lp;
+	struct entry *lp;
 	int colw;
 	int max = 0;
 	int n;
 
 	if (!nelem)
 		exit(0);
-	gutter += maxlen * propgutter / 100.0;
-	colw = maxlen + gutter;
+	gutter += maxwidth * propgutter / 100.0;
+	colw = maxwidth + gutter;
 	if (flags & MTRANSPOSE) {
 		orows = icols;
 		ocols = irows;
@@ -263,33 +269,29 @@ prepfile(void)
 		orows = nelem / ocols + (nelem % ocols ? 1 : 0);
 	else if (ocols == 0)			/* decide on cols */
 		ocols = nelem / orows + (nelem % orows ? 1 : 0);
-	lp = elem + orows * ocols;
-	while (lp > endelem) {
-		getptrs(elem + nelem);
-		lp = elem + orows * ocols;
-	}
+	while ((lp = elem + orows * ocols) > endelem)
+	     (void)getptrs(NULL);
 	if (flags & RECYCLE) {
 		for (ep = elem + nelem; ep < lp; ep++)
-			*ep = *(ep - nelem);
+			memcpy(ep, ep - nelem, sizeof(*ep));
 		nelem = lp - elem;
 	}
 	if (!(colwidths = calloc(ocols, sizeof(short))))
 		errx(1, "malloc:  No gutter space");
 	if (flags & SQUEEZE) {
-		if (flags & TRANSPOSE)
-			for (ep = elem, i = 0; i < ocols; i++) {
-				for (j = 0; j < orows; j++)
-					if ((n = strlen(*ep++)) > max)
-						max = n;
-				colwidths[i] = max + gutter;
-			}
-		else
-			for (ep = elem, i = 0; i < ocols; i++) {
+		for (ep = elem, i = 0; i < ocols; i++) {
+			max = 0;
+			if (flags & TRANSPOSE) {
+				for (j = 0; j < orows; j++, ep++)
+					if (ep->w > max)
+						max = ep->w;
+			} else {
 				for (j = i; j < nelem; j += ocols)
-					if ((n = strlen(ep[j])) > max)
-						max = n;
-				colwidths[i] = max + gutter;
+					if (ep[j].w > max)
+						max = ep[j].w;
 			}
+			colwidths[i] = max + gutter;
+		}
 	} else {
 		for (i = 0; i < ocols; i++)
 			colwidths[i] = colw;
@@ -306,43 +308,38 @@ prepfile(void)
 }
 
 int
-get_line(void)	/* get line; maintain curline, curlen; manage storage */
+get_line(void)
 {
-	static	char	*ibuf = NULL;
-	static	size_t	 ibufsz = 0;
+	static	size_t	 cursz;
+	static	ssize_t	 curlen;
 
 	if (irows > 0 && flags & DETAILSHAPE)
 		printf(" %zd line %d\n", curlen, irows);
 
-	if ((curlen = getline(&ibuf, &ibufsz, stdin)) == EOF) {
+	if ((curlen = getline(&curline, &cursz, stdin)) == EOF) {
 		if (ferror(stdin))
 			err(1, NULL);
 		return EOF;
 	}
-	if (curlen > 0 && ibuf[curlen - 1] == '\n')
-		ibuf[--curlen] = '\0';
-
-	if (skip >= 0 || flags & SHAPEONLY)
-		curline = ibuf;
-	else if ((curline = strdup(ibuf)) == NULL)
-		err(1, NULL);
+	if (curlen > 0 && curline[curlen - 1] == '\n')
+		curline[--curlen] = '\0';
 
 	return 0;
 }
 
-char **
-getptrs(char **sp)
+struct entry *
+getptrs(struct entry *sp)
 {
-	char **p;
+	struct entry *p;
 	int newsize;
 
 	newsize = allocsize * 2;
-	p = reallocarray(elem, newsize, sizeof(char *));
+	p = reallocarray(elem, newsize, sizeof(*p));
 	if (p == NULL)
 		err(1, "no memory");
 
 	allocsize = newsize;
-	sp += p - elem;
+	sp = sp == NULL ? p : p + (sp - elem);
 	elem = p;
 	endelem = elem + allocsize;
 	return(sp);
diff --git a/src/usr.bin/signify/signify.1 b/src/usr.bin/signify/signify.1
index 12fd9be..dbf2ea5 100644
--- a/src/usr.bin/signify/signify.1
+++ b/src/usr.bin/signify/signify.1
@@ -1,4 +1,4 @@
-.\" $OpenBSD: signify.1,v 1.31 2015/07/14 23:30:02 florian Exp $
+.\" $OpenBSD: signify.1,v 1.33 2016/01/06 23:14:05 benno Exp $
 .\"
 .\"Copyright (c) 2013 Marc Espie <espie@openbsd.org>
 .\"Copyright (c) 2013 Ted Unangst <tedu@openbsd.org>
@@ -14,7 +14,7 @@
 .\"WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 .\"ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 .\"OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-.Dd $Mdocdate: July 14 2015 $
+.Dd $Mdocdate: January 6 2016 $
 .Dt SIGNIFY 1
 .Os
 .Sh NAME
@@ -148,12 +148,12 @@ Verify a release directory containing
 .Pa SHA256.sig
 and a full set of release files:
 .Bd -literal -offset indent -compact
-$ signify -C -p /etc/signify/openbsd-58-base.pub -x SHA256.sig
+$ signify -C -p /etc/signify/openbsd-60-base.pub -x SHA256.sig
 .Ed
 .Pp
 Verify a bsd.rd before an upgrade:
 .Bd -literal -offset indent -compact
-$ signify -C -p /etc/signify/openbsd-58-base.pub -x SHA256.sig bsd.rd
+$ signify -C -p /etc/signify/openbsd-60-base.pub -x SHA256.sig bsd.rd
 .Ed
 .Sh SEE ALSO
 .Xr fw_update 1 ,
diff --git a/src/usr.bin/signify/signify.c b/src/usr.bin/signify/signify.c
index 3bc4c6c..a4cb84a 100644
--- a/src/usr.bin/signify/signify.c
+++ b/src/usr.bin/signify/signify.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: signify.c,v 1.104 2015/11/02 22:01:10 bluhm Exp $ */
+/* $OpenBSD: signify.c,v 1.105 2015/12/04 11:05:22 tedu Exp $ */
 /*
  * Copyright (c) 2013 Ted Unangst <tedu@openbsd.org>
  *
@@ -367,7 +367,7 @@ sign(const char *seckeyfile, const char *msgfile, const char *sigfile,
 	SHA512Update(&ctx, enckey.seckey, sizeof(enckey.seckey));
 	SHA512Final(digest, &ctx);
 	if (memcmp(enckey.checksum, digest, sizeof(enckey.checksum)) != 0)
-	    errx(1, "incorrect passphrase");
+		errx(1, "incorrect passphrase");
 	explicit_bzero(digest, sizeof(digest));
 
 	msg = readmsg(msgfile, &msglen);
@@ -559,9 +559,8 @@ verifychecksum(struct checksum *c, int quiet)
 	} else {
 		errx(1, "can't handle algorithm %s", c->algo);
 	}
-	if (strcmp(c->hash, buf) != 0) {
+	if (strcmp(c->hash, buf) != 0)
 		return 0;
-	}
 	if (!quiet)
 		printf("%s: OK\n", c->file);
 	return 1;