svn commit: r317934 - head/usr.bin/resizewin

Edward Tomasz Napierala trasz at FreeBSD.org
Mon May 8 08:58:53 UTC 2017


Author: trasz
Date: Mon May  8 08:58:51 2017
New Revision: 317934
URL: https://svnweb.freebsd.org/changeset/base/317934

Log:
  Add resizewin -z. It makes resizewin not do anything if the terminal
  size is already set to something other than zero. It's supposed to be
  called from eg /etc/profile - it's not neccessary to query terminal
  size when logging in over the network, because the protocol used already
  takes care of this, but it's neccessary when logging over a serial line.
  
  Reviewed by:	cem, Daniel O'Connor <darius at dons.net.au>
  MFC after:	2 weeks
  Sponsored by:	DARPA, AFRL
  Differential Revision:	https://reviews.freebsd.org/D10637

Modified:
  head/usr.bin/resizewin/resizewin.1
  head/usr.bin/resizewin/resizewin.c

Modified: head/usr.bin/resizewin/resizewin.1
==============================================================================
--- head/usr.bin/resizewin/resizewin.1	Mon May  8 08:34:50 2017	(r317933)
+++ head/usr.bin/resizewin/resizewin.1	Mon May  8 08:58:51 2017	(r317934)
@@ -27,17 +27,27 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd July 9, 2016
+.Dd May 8, 2017
 .Dt RESIZEWIN 1
 .Os
 .Sh NAME
 .Nm resizewin
 .Nd update the kernel window size for the current TTY
+.Sh SYNOPSIS
+.Nm
+.Op Fl z
 .Sh DESCRIPTION
 Query the terminal emulator window size with the
 .Dv TIOCSWINSZ
 ioctl and set the window size known by the kernel to the new values.
 The terminal is assumed to be VT100/ANSI compatible.
+.Pp
+The following options are available:
+.Bl -tag -width ".Fl z"
+.It Fl z
+Do nothing unless the current kernel terminal size is zero.
+.El
+.Pp
 .Nm
 is functionally similar to
 .Xr resize 1 ,

Modified: head/usr.bin/resizewin/resizewin.c
==============================================================================
--- head/usr.bin/resizewin/resizewin.c	Mon May  8 08:34:50 2017	(r317933)
+++ head/usr.bin/resizewin/resizewin.c	Mon May  8 08:58:51 2017	(r317934)
@@ -47,20 +47,50 @@ static const char query[] =
     "\033[999;999H"	/* Move cursor */
     "\033[6n"		/* Get cursor position */
     "\0338";		/* Restore cursor position */
+
+static void
+usage(void)
+{
+
+	fprintf(stderr, "usage: resizewin [-z]\n");
+	exit(1);
+}
+
 int
-main(__unused int argc, __unused char **argv)
+main(int argc, char **argv)
 {
 	struct termios old, new;
 	struct winsize w;
-	int ret, fd, cnt, error;
+	int ret, fd, ch, cnt, error, zflag;
 	char data[20];
 	struct timeval then, now;
 
 	error = 0;
+	zflag = 0;
+	while ((ch = getopt(argc, argv, "z")) != -1) {
+		switch (ch) {
+		case 'z':
+			zflag = 1;
+			break;
+		case '?':
+		default:
+			usage();
+		}
+	}
+	argc -= optind;
+	if (argc != 0)
+		usage();
 
 	if ((fd = open("/dev/tty", O_RDWR | O_NONBLOCK)) == -1)
 		exit(1);
 
+	if (zflag) {
+		if (ioctl(fd, TIOCGWINSZ, &w) == -1)
+			exit(1);
+		if (w.ws_row != 0 && w.ws_col != 0)
+			exit(0);
+	}
+
 	/* Disable echo */
 	if (tcgetattr(fd, &old) == -1)
 		exit(1);


More information about the svn-src-all mailing list