aboutsummaryrefslogtreecommitdiff
path: root/sbin
diff options
context:
space:
mode:
authorAndrey A. Chernov <ache@FreeBSD.org>2000-05-01 12:14:30 +0000
committerAndrey A. Chernov <ache@FreeBSD.org>2000-05-01 12:14:30 +0000
commit09dd94d856d0275983fe127e967947fc01322d41 (patch)
tree32afdaa7466b3f31300264bf2a668b8219beb535 /sbin
parent2553c04ce2b68f70f891b02692af57a1d7d80f0a (diff)
downloadsrc-09dd94d856d0275983fe127e967947fc01322d41.tar.gz
src-09dd94d856d0275983fe127e967947fc01322d41.zip
Print options only supported by device, back out printing options separately
Pointed-by: bde
Notes
Notes: svn path=/head/; revision=59838
Diffstat (limited to 'sbin')
-rw-r--r--sbin/comcontrol/comcontrol.810
-rw-r--r--sbin/comcontrol/comcontrol.c56
2 files changed, 25 insertions, 41 deletions
diff --git a/sbin/comcontrol/comcontrol.8 b/sbin/comcontrol/comcontrol.8
index 84ef5b5817c3..7e5d1ad0dbbd 100644
--- a/sbin/comcontrol/comcontrol.8
+++ b/sbin/comcontrol/comcontrol.8
@@ -7,9 +7,9 @@
.Nd control an special tty device.
.Sh SYNOPSIS
.Nm comcontrol
-.Ar special_device | -
-.Op dtrwait Op number
-.Op drainwait Op number
+.Ar special_device | Fl
+.Op dtrwait Ar number
+.Op drainwait Ar number
.Sh DESCRIPTION
.Nm Comcontrol
is used to examine and modify some of the special characteristics
@@ -22,8 +22,6 @@ Only the superuser can change the settings.
.Pp
The following options are available:
.Bl -tag -width indent
-.It Cm dtrwait
-Print current DTR wait time.
.It Cm dtrwait Ar number
Set the time to wait after dropping DTR
to the given number.
@@ -31,8 +29,6 @@ The units are hundredths of a second.
The default is 300 hundredths, i.e., 3 seconds.
This option needed mainly to set proper recover time after
modem reset.
-.It Cm drainwait
-Print current output drain timeout.
.It Cm drainwait Ar number
Set the time to wait for output drain
to the given number.
diff --git a/sbin/comcontrol/comcontrol.c b/sbin/comcontrol/comcontrol.c
index 7de222513b28..ad77b988b70c 100644
--- a/sbin/comcontrol/comcontrol.c
+++ b/sbin/comcontrol/comcontrol.c
@@ -33,6 +33,7 @@ static const char rcsid[] =
#include <ctype.h>
#include <err.h>
+#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
@@ -44,7 +45,7 @@ static void
usage()
{
fprintf(stderr,
- "usage: comcontrol <filename|-> [dtrwait [<n>]] [drainwait [<n>]]\n");
+ "usage: comcontrol <filename>|- [dtrwait <n>] [drainwait <n>]\n");
exit(1);
}
@@ -53,9 +54,8 @@ main(int argc, char *argv[])
{
int fd;
int res = 0;
+ int print_dtrwait = 1, print_drainwait = 1;
int dtrwait = -1, drainwait = -1;
- int temp;
- int output = 0;
if (argc < 2)
usage();
@@ -69,50 +69,40 @@ main(int argc, char *argv[])
return 1;
}
}
-
if (argc == 2) {
if (ioctl(fd, TIOCMGDTRWAIT, &dtrwait) < 0) {
- res = 1;
- warn("TIOCMGDTRWAIT");
+ print_dtrwait = 0;
+ if (errno != ENOTTY) {
+ res = 1;
+ warn("TIOCMGDTRWAIT");
+ }
}
if (ioctl(fd, TIOCGDRAINWAIT, &drainwait) < 0) {
- res = 1;
- warn("TIOCGDRAINWAIT");
+ print_drainwait = 0;
+ if (errno != ENOTTY) {
+ res = 1;
+ warn("TIOCGDRAINWAIT");
+ }
}
- printf("dtrwait %d drainwait %d ", dtrwait, drainwait);
- output = 1;
+ if (print_dtrwait)
+ printf("dtrwait %d ", dtrwait);
+ if (print_drainwait)
+ printf("drainwait %d ", drainwait);
+ printf("\n");
} else {
while (argv[2] != NULL) {
if (!strcmp(argv[2],"dtrwait")) {
- if (argv[3] == NULL || !isdigit(argv[3][0])) {
- if (ioctl(fd, TIOCMGDTRWAIT, &temp) < 0) {
- res = 1;
- temp = -1;
- warn("TIOCMGDTRWAIT");
- }
- printf("dtrwait %d ", temp);
- output = 1;
- argv++;
- continue;
- }
if (dtrwait >= 0)
usage();
+ if (argv[3] == NULL || !isdigit(argv[3][0]))
+ usage();
dtrwait = atoi(argv[3]);
argv += 2;
} else if (!strcmp(argv[2],"drainwait")) {
- if (argv[3] == NULL || !isdigit(argv[3][0])) {
- if (ioctl(fd, TIOCGDRAINWAIT, &temp) < 0) {
- res = 1;
- temp = -1;
- warn("TIOCGDRAINWAIT");
- }
- printf("drainwait %d ", temp);
- argv++;
- output = 1;
- continue;
- }
if (drainwait >= 0)
usage();
+ if (argv[3] == NULL || !isdigit(argv[3][0]))
+ usage();
drainwait = atoi(argv[3]);
argv += 2;
} else
@@ -133,7 +123,5 @@ main(int argc, char *argv[])
}
close(fd);
- if (output)
- printf("\n");
return res;
}