@@ -160,12 +160,43 @@ static char **parse_args(char *line, int *argcp)
160
160
return argv ;
161
161
}
162
162
163
+ /* Handles forced console termination for record_error and do_quit */
164
+ static bool force_quit (int argc , char * argv [])
165
+ {
166
+ cmd_element_t * c = cmd_list ;
167
+ bool ok = true;
168
+ while (c ) {
169
+ cmd_element_t * ele = c ;
170
+ c = c -> next ;
171
+ free_block (ele , sizeof (cmd_element_t ));
172
+ }
173
+
174
+ param_element_t * p = param_list ;
175
+ while (p ) {
176
+ param_element_t * ele = p ;
177
+ p = p -> next ;
178
+ free_block (ele , sizeof (param_element_t ));
179
+ }
180
+
181
+ while (buf_stack )
182
+ pop_file ();
183
+
184
+ for (int i = 0 ; i < quit_helper_cnt ; i ++ ) {
185
+ ok = ok && quit_helpers [i ](argc , argv );
186
+ }
187
+
188
+ quit_flag = true;
189
+ return ok ;
190
+ }
191
+
163
192
static void record_error ()
164
193
{
165
194
err_cnt ++ ;
166
195
if (err_cnt >= err_limit ) {
167
- report (1 , "Error limit exceeded. Stopping command execution" );
168
- quit_flag = true;
196
+ report (
197
+ 1 ,
198
+ "Error limit exceeded. Stopping command execution, and quitting" );
199
+ force_quit (0 , NULL );
169
200
}
170
201
}
171
202
@@ -226,30 +257,7 @@ void set_echo(bool on)
226
257
/* Built-in commands */
227
258
static bool do_quit (int argc , char * argv [])
228
259
{
229
- cmd_element_t * c = cmd_list ;
230
- bool ok = true;
231
- while (c ) {
232
- cmd_element_t * ele = c ;
233
- c = c -> next ;
234
- free_block (ele , sizeof (cmd_element_t ));
235
- }
236
-
237
- param_element_t * p = param_list ;
238
- while (p ) {
239
- param_element_t * ele = p ;
240
- p = p -> next ;
241
- free_block (ele , sizeof (param_element_t ));
242
- }
243
-
244
- while (buf_stack )
245
- pop_file ();
246
-
247
- for (int i = 0 ; i < quit_helper_cnt ; i ++ ) {
248
- ok = ok && quit_helpers [i ](argc , argv );
249
- }
250
-
251
- quit_flag = true;
252
- return ok ;
260
+ return force_quit (argc , argv );
253
261
}
254
262
255
263
static bool do_help (int argc , char * argv [])
0 commit comments