Commit b2388fb
committed
stty: verify tcsetattr applied all settings
POSIX allows tcsetattr() to return success while only partially
applying the requested settings. This change adds verification by
reading back the terminal settings after tcsetattr() and comparing
them with the requested configuration.
If the settings don't match, stty now exits with an error message:
"<device>: unable to perform all requested operations"
This matches GNU stty behavior, which uses tcgetattr() after setting
and compares with eq_mode() to detect partial application.
Changes:
- Added verify_termios_changes() function to compare termios structs
- Uses from_bits_truncate() to normalize flags for portable comparison
- Only verifies fields that were actually changed (requested != original)
- Added integration test for multiple settings verification
Fixes #103241 parent c8aa3fc commit b2388fb
3 files changed
Lines changed: 202 additions & 89 deletions
File tree
- .vscode/cspell.dictionaries
- src/uu/stty/src
- tests/by-util
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
1 | 12 | | |
2 | | - | |
| 13 | + | |
| 14 | + | |
3 | 15 | | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
4 | 36 | | |
| 37 | + | |
5 | 38 | | |
| 39 | + | |
| 40 | + | |
6 | 41 | | |
7 | 42 | | |
8 | 43 | | |
| |||
14 | 49 | | |
15 | 50 | | |
16 | 51 | | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
17 | 55 | | |
18 | 56 | | |
19 | 57 | | |
20 | | - | |
21 | 58 | | |
22 | 59 | | |
23 | | - | |
| 60 | + | |
24 | 61 | | |
25 | 62 | | |
| 63 | + | |
26 | 64 | | |
27 | 65 | | |
28 | 66 | | |
| 67 | + | |
29 | 68 | | |
30 | 69 | | |
| 70 | + | |
31 | 71 | | |
32 | 72 | | |
33 | 73 | | |
34 | | - | |
35 | | - | |
36 | | - | |
37 | | - | |
38 | | - | |
39 | | - | |
| 74 | + | |
40 | 75 | | |
41 | 76 | | |
42 | | - | |
43 | 77 | | |
| 78 | + | |
| 79 | + | |
44 | 80 | | |
| 81 | + | |
45 | 82 | | |
46 | | - | |
| 83 | + | |
47 | 84 | | |
| 85 | + | |
| 86 | + | |
48 | 87 | | |
49 | 88 | | |
50 | 89 | | |
51 | | - | |
52 | | - | |
53 | 90 | | |
| 91 | + | |
54 | 92 | | |
55 | 93 | | |
56 | 94 | | |
| |||
74 | 112 | | |
75 | 113 | | |
76 | 114 | | |
| 115 | + | |
| 116 | + | |
77 | 117 | | |
78 | | - | |
79 | 118 | | |
80 | 119 | | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
81 | 123 | | |
82 | 124 | | |
83 | 125 | | |
84 | | - | |
85 | 126 | | |
| 127 | + | |
86 | 128 | | |
87 | 129 | | |
88 | 130 | | |
89 | 131 | | |
| 132 | + | |
90 | 133 | | |
91 | 134 | | |
92 | 135 | | |
93 | 136 | | |
94 | 137 | | |
95 | | - | |
96 | 138 | | |
| 139 | + | |
97 | 140 | | |
98 | 141 | | |
| 142 | + | |
99 | 143 | | |
| 144 | + | |
100 | 145 | | |
101 | 146 | | |
102 | 147 | | |
103 | 148 | | |
104 | 149 | | |
105 | 150 | | |
106 | 151 | | |
| 152 | + | |
107 | 153 | | |
108 | 154 | | |
109 | 155 | | |
| 156 | + | |
110 | 157 | | |
111 | 158 | | |
| 159 | + | |
112 | 160 | | |
113 | 161 | | |
114 | 162 | | |
| |||
117 | 165 | | |
118 | 166 | | |
119 | 167 | | |
| 168 | + | |
| 169 | + | |
120 | 170 | | |
121 | 171 | | |
122 | 172 | | |
| 173 | + | |
123 | 174 | | |
124 | 175 | | |
125 | 176 | | |
126 | 177 | | |
127 | 178 | | |
128 | 179 | | |
129 | 180 | | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
130 | 184 | | |
131 | 185 | | |
132 | 186 | | |
133 | 187 | | |
134 | | - | |
135 | 188 | | |
| 189 | + | |
| 190 | + | |
136 | 191 | | |
137 | 192 | | |
138 | | - | |
139 | 193 | | |
140 | 194 | | |
| 195 | + | |
141 | 196 | | |
142 | 197 | | |
143 | 198 | | |
144 | | - | |
145 | 199 | | |
| 200 | + | |
146 | 201 | | |
147 | 202 | | |
148 | | - | |
149 | 203 | | |
150 | | - | |
151 | | - | |
152 | | - | |
153 | 204 | | |
154 | 205 | | |
155 | | - | |
156 | 206 | | |
157 | | - | |
158 | 207 | | |
159 | 208 | | |
160 | 209 | | |
161 | 210 | | |
| 211 | + | |
162 | 212 | | |
163 | 213 | | |
164 | | - | |
165 | 214 | | |
166 | 215 | | |
| 216 | + | |
167 | 217 | | |
168 | 218 | | |
169 | 219 | | |
| 220 | + | |
| 221 | + | |
170 | 222 | | |
171 | 223 | | |
172 | 224 | | |
173 | 225 | | |
174 | 226 | | |
175 | | - | |
| 227 | + | |
176 | 228 | | |
177 | | - | |
178 | 229 | | |
| 230 | + | |
179 | 231 | | |
| 232 | + | |
180 | 233 | | |
181 | | - | |
182 | 234 | | |
| 235 | + | |
183 | 236 | | |
184 | 237 | | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
185 | 241 | | |
186 | 242 | | |
187 | 243 | | |
188 | 244 | | |
189 | | - | |
190 | | - | |
191 | | - | |
192 | | - | |
193 | | - | |
194 | | - | |
195 | | - | |
196 | | - | |
197 | | - | |
198 | | - | |
199 | | - | |
200 | | - | |
201 | | - | |
202 | | - | |
203 | | - | |
204 | | - | |
205 | 245 | | |
206 | | - | |
207 | | - | |
208 | | - | |
209 | | - | |
210 | | - | |
211 | | - | |
212 | | - | |
213 | | - | |
214 | | - | |
215 | | - | |
216 | | - | |
217 | | - | |
218 | | - | |
219 | | - | |
220 | | - | |
221 | | - | |
222 | | - | |
223 | | - | |
224 | | - | |
225 | | - | |
226 | | - | |
227 | | - | |
228 | | - | |
229 | | - | |
230 | | - | |
231 | | - | |
232 | | - | |
233 | | - | |
234 | | - | |
235 | | - | |
236 | | - | |
237 | | - | |
238 | | - | |
239 | | - | |
240 | | - | |
241 | | - | |
242 | | - | |
243 | | - | |
244 | | - | |
245 | | - | |
| 246 | + | |
0 commit comments