File: | src/bin/stty/stty.c |
Warning: | line 82, column 7 Value stored to 'argc' is never read |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
1 | /* $OpenBSD: stty.c,v 1.22 2021/10/23 16:45:32 mestre Exp $ */ |
2 | /* $NetBSD: stty.c,v 1.11 1995/03/21 09:11:30 cgd Exp $ */ |
3 | |
4 | /*- |
5 | * Copyright (c) 1989, 1991, 1993, 1994 |
6 | * The Regents of the University of California. All rights reserved. |
7 | * |
8 | * Redistribution and use in source and binary forms, with or without |
9 | * modification, are permitted provided that the following conditions |
10 | * are met: |
11 | * 1. Redistributions of source code must retain the above copyright |
12 | * notice, this list of conditions and the following disclaimer. |
13 | * 2. Redistributions in binary form must reproduce the above copyright |
14 | * notice, this list of conditions and the following disclaimer in the |
15 | * documentation and/or other materials provided with the distribution. |
16 | * 3. Neither the name of the University nor the names of its contributors |
17 | * may be used to endorse or promote products derived from this software |
18 | * without specific prior written permission. |
19 | * |
20 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
21 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
22 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
23 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
24 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
25 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
26 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
27 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
28 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
29 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
30 | * SUCH DAMAGE. |
31 | */ |
32 | |
33 | #include <sys/types.h> |
34 | #include <sys/ioctl.h> |
35 | |
36 | #include <ctype.h> |
37 | #include <err.h> |
38 | #include <errno(*__errno()).h> |
39 | #include <fcntl.h> |
40 | #include <limits.h> |
41 | #include <stdio.h> |
42 | #include <stdlib.h> |
43 | #include <string.h> |
44 | #include <termios.h> |
45 | #include <unistd.h> |
46 | |
47 | #include "stty.h" |
48 | #include "extern.h" |
49 | |
50 | int |
51 | main(int argc, char *argv[]) |
52 | { |
53 | struct info i; |
54 | enum FMT fmt; |
55 | int ch; |
56 | |
57 | fmt = NOTSET; |
58 | i.fd = STDIN_FILENO0; |
59 | |
60 | opterr = 0; |
61 | while (optind < argc && |
62 | strspn(argv[optind], "-aefg") == strlen(argv[optind]) && |
63 | (ch = getopt(argc, argv, "aef:g")) != -1) |
64 | switch(ch) { |
65 | case 'a': |
66 | fmt = POSIX; |
67 | break; |
68 | case 'e': |
69 | fmt = BSD; |
70 | break; |
71 | case 'f': |
72 | if ((i.fd = open(optarg, O_RDONLY0x0000 | O_NONBLOCK0x0004)) == -1) |
73 | err(1, "%s", optarg); |
74 | break; |
75 | case 'g': |
76 | fmt = GFLAG; |
77 | break; |
78 | default: |
79 | goto args; |
80 | } |
81 | |
82 | args: argc -= optind; |
Value stored to 'argc' is never read | |
83 | argv += optind; |
84 | |
85 | if (unveil("/", "") == -1) |
86 | err(1, "unveil /"); |
87 | if (unveil(NULL((void *)0), NULL((void *)0)) == -1) |
88 | err(1, "unveil"); |
89 | |
90 | if (ioctl(i.fd, TIOCGETD((unsigned long)0x40000000 | ((sizeof(int) & 0x1fff) << 16) | ((('t')) << 8) | ((26))), &i.ldisc) == -1) |
91 | err(1, "TIOCGETD"); |
92 | |
93 | if (tcgetattr(i.fd, &i.t) == -1) |
94 | errx(1, "not a terminal"); |
95 | if (ioctl(i.fd, TIOCGWINSZ((unsigned long)0x40000000 | ((sizeof(struct winsize) & 0x1fff ) << 16) | ((('t')) << 8) | ((104))), &i.win) == -1) |
96 | warn("TIOCGWINSZ"); |
97 | |
98 | switch(fmt) { |
99 | case NOTSET: |
100 | if (*argv) |
101 | break; |
102 | /* FALLTHROUGH */ |
103 | case BSD: |
104 | case POSIX: |
105 | if (*argv) |
106 | errx(1, "either display or modify"); |
107 | if (pledge("stdio", NULL((void *)0)) == -1) |
108 | err(1, "pledge"); |
109 | print(&i.t, &i.win, i.ldisc, fmt); |
110 | break; |
111 | case GFLAG: |
112 | if (*argv) |
113 | errx(1, "either display or modify"); |
114 | if (pledge("stdio", NULL((void *)0)) == -1) |
115 | err(1, "pledge"); |
116 | gprint(&i.t, &i.win, i.ldisc); |
117 | break; |
118 | } |
119 | |
120 | /* |
121 | * Cannot pledge, because of "extproc", "ostart" and "ostop" |
122 | */ |
123 | |
124 | for (i.set = i.wset = 0; *argv; ++argv) { |
125 | if (ksearch(&argv, &i)) |
126 | continue; |
127 | |
128 | if (csearch(&argv, &i)) |
129 | continue; |
130 | |
131 | if (msearch(&argv, &i)) |
132 | continue; |
133 | |
134 | if (isdigit((unsigned char)**argv)) { |
135 | const char *error; |
136 | int speed; |
137 | |
138 | speed = strtonum(*argv, 0, INT_MAX0x7fffffff, &error); |
139 | if (error) |
140 | err(1, "%s", *argv); |
141 | cfsetospeed(&i.t, speed); |
142 | cfsetispeed(&i.t, speed); |
143 | i.set = 1; |
144 | continue; |
145 | } |
146 | |
147 | if (!strncmp(*argv, "gfmt1", sizeof("gfmt1") - 1)) { |
148 | gread(&i.t, *argv + sizeof("gfmt1") - 1); |
149 | i.set = 1; |
150 | continue; |
151 | } |
152 | |
153 | warnx("illegal option -- %s", *argv); |
154 | usage(); |
155 | } |
156 | |
157 | if (i.set && tcsetattr(i.fd, 0, &i.t) == -1) |
158 | err(1, "tcsetattr"); |
159 | if (i.wset && ioctl(i.fd, TIOCSWINSZ((unsigned long)0x80000000 | ((sizeof(struct winsize) & 0x1fff ) << 16) | ((('t')) << 8) | ((103))), &i.win) == -1) |
160 | warn("TIOCSWINSZ"); |
161 | return (0); |
162 | } |
163 | |
164 | void |
165 | usage(void) |
166 | { |
167 | fprintf(stderr(&__sF[2]), "usage: %s [-a | -e | -g] [-f file] [operands]\n", |
168 | __progname); |
169 | exit (1); |
170 | } |