gdb/remote: Use true/false instead of 1/0
[deliverable/binutils-gdb.git] / gdb / utils.c
CommitLineData
c906108c 1/* General utility routines for GDB, the GNU debugger.
1bac305b 2
3666a048 3 Copyright (C) 1986-2021 Free Software Foundation, Inc.
c906108c 4
c5aa993b 5 This file is part of GDB.
c906108c 6
c5aa993b
JM
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
a9762ec7 9 the Free Software Foundation; either version 3 of the License, or
c5aa993b 10 (at your option) any later version.
c906108c 11
c5aa993b
JM
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
c906108c 16
c5aa993b 17 You should have received a copy of the GNU General Public License
a9762ec7 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c 19
4e8f7a8b 20#include "defs.h"
4e8f7a8b 21#include <ctype.h>
268a13a5 22#include "gdbsupport/gdb_wait.h"
4e8f7a8b 23#include "event-top.h"
95e54da7 24#include "gdbthread.h"
202cbf1c 25#include "fnmatch.h"
cbb099e8 26#include "gdb_bfd.h"
7991dee7
JK
27#ifdef HAVE_SYS_RESOURCE_H
28#include <sys/resource.h>
29#endif /* HAVE_SYS_RESOURCE_H */
4e8f7a8b 30
6a83354a
AC
31#ifdef TUI
32#include "tui/tui.h" /* For tui_get_command_dimension. */
33#endif
34
9d271fd8
AC
35#ifdef __GO32__
36#include <pc.h>
37#endif
38
042be3a9 39#include <signal.h>
c906108c
SS
40#include "gdbcmd.h"
41#include "serial.h"
42#include "bfd.h"
43#include "target.h"
50f182aa 44#include "gdb-demangle.h"
c906108c
SS
45#include "expression.h"
46#include "language.h"
234b45d4 47#include "charset.h"
c906108c 48#include "annotate.h"
303c8ebd 49#include "filenames.h"
7b90c3f9 50#include "symfile.h"
ae5a43e0 51#include "gdb_obstack.h"
9544c605 52#include "gdbcore.h"
698ba934 53#include "top.h"
7c953934 54#include "main.h"
cb08cc53 55#include "solist.h"
c906108c 56
8731e58e 57#include "inferior.h" /* for signed_pointer_to_address */
ac2e2ef7 58
3b78cdbb 59#include "gdb_curses.h"
020cc13c 60
dbda9972 61#include "readline/readline.h"
c906108c 62
dcb07cfa 63#include <chrono>
75feb17d 64
390a8aca 65#include "interps.h"
db1ff28b 66#include "gdb_regex.h"
268a13a5
TT
67#include "gdbsupport/job-control.h"
68#include "gdbsupport/selftest.h"
69#include "gdbsupport/gdb_optional.h"
0662b6a7
PA
70#include "cp-support.h"
71#include <algorithm>
268a13a5 72#include "gdbsupport/pathstuff.h"
cbe56571 73#include "cli/cli-style.h"
268a13a5 74#include "gdbsupport/scope-exit.h"
0d12e84c 75#include "gdbarch.h"
2a3c1174 76#include "cli-out.h"
51e2cfa2 77#include "gdbsupport/gdb-safe-ctype.h"
8626589c 78
9a4105ab 79void (*deprecated_error_begin_hook) (void);
c906108c
SS
80
81/* Prototypes for local functions */
82
d9fcf2fb 83static void vfprintf_maybe_filtered (struct ui_file *, const char *,
2a3c1174
PA
84 va_list, bool, bool)
85 ATTRIBUTE_PRINTF (2, 0);
c906108c 86
d9fcf2fb 87static void fputs_maybe_filtered (const char *, struct ui_file *, int);
c906108c 88
a14ed312 89static void prompt_for_continue (void);
c906108c 90
eb0d3137 91static void set_screen_size (void);
a14ed312 92static void set_width (void);
c906108c 93
260c0b2a
DE
94/* Time spent in prompt_for_continue in the currently executing command
95 waiting for user to respond.
96 Initialized in make_command_stats_cleanup.
97 Modified in prompt_for_continue and defaulted_query.
98 Used in report_command_stats. */
99
dcb07cfa 100static std::chrono::steady_clock::duration prompt_for_continue_wait_time;
260c0b2a 101
75feb17d
DJ
102/* A flag indicating whether to timestamp debugging messages. */
103
491144b5 104static bool debug_timestamp = false;
75feb17d 105
491144b5
CB
106/* True means that strings with character values >0x7F should be printed
107 as octal escapes. False means just print the value (e.g. it's an
c906108c
SS
108 international character, and the terminal or window can cope.) */
109
491144b5 110bool sevenbit_strings = false;
920d2a44
AC
111static void
112show_sevenbit_strings (struct ui_file *file, int from_tty,
113 struct cmd_list_element *c, const char *value)
114{
3e43a32a
MS
115 fprintf_filtered (file, _("Printing of 8-bit characters "
116 "in strings as \\nnn is %s.\n"),
920d2a44
AC
117 value);
118}
c906108c 119
c906108c
SS
120/* String to be printed before warning messages, if any. */
121
69bbf465 122const char *warning_pre_print = "\nwarning: ";
c906108c 123
491144b5 124bool pagination_enabled = true;
920d2a44
AC
125static void
126show_pagination_enabled (struct ui_file *file, int from_tty,
127 struct cmd_list_element *c, const char *value)
128{
129 fprintf_filtered (file, _("State of pagination is %s.\n"), value);
130}
131
c906108c 132\f
c5aa993b 133
8731e58e 134
f5a96129
AC
135/* Print a warning message. The first argument STRING is the warning
136 message, used as an fprintf format string, the second is the
137 va_list of arguments for that string. A warning is unfiltered (not
138 paginated) so that the user does not need to page through each
139 screen full of warnings when there are lots of them. */
c906108c
SS
140
141void
f5a96129 142vwarning (const char *string, va_list args)
c906108c 143{
9a4105ab
AC
144 if (deprecated_warning_hook)
145 (*deprecated_warning_hook) (string, args);
f5a96129
AC
146 else
147 {
223ffa71 148 gdb::optional<target_terminal::scoped_restore_terminal_state> term_state;
0d2f5c07 149 if (target_supports_terminal_ours ())
c5ac1540 150 {
223ffa71
TT
151 term_state.emplace ();
152 target_terminal::ours_for_output ();
c5ac1540 153 }
0d2f5c07
GB
154 if (filtered_printing_initialized ())
155 wrap_here (""); /* Force out any buffered output. */
f5a96129
AC
156 gdb_flush (gdb_stdout);
157 if (warning_pre_print)
306d9ac5 158 fputs_unfiltered (warning_pre_print, gdb_stderr);
f5a96129
AC
159 vfprintf_unfiltered (gdb_stderr, string, args);
160 fprintf_unfiltered (gdb_stderr, "\n");
f5a96129 161 }
c906108c
SS
162}
163
c906108c
SS
164/* Print an error message and return to command level.
165 The first argument STRING is the error message, used as a fprintf string,
166 and the remaining args are passed as arguments to it. */
167
c25c4a8b 168void
4ce44c66
JM
169verror (const char *string, va_list args)
170{
6b1b7650 171 throw_verror (GENERIC_ERROR, string, args);
4ce44c66
JM
172}
173
c25c4a8b 174void
d7e74731 175error_stream (const string_file &stream)
2acceee2 176{
d7e74731 177 error (("%s"), stream.c_str ());
2acceee2 178}
c906108c 179
2437fd32
GB
180/* Emit a message and abort. */
181
182static void ATTRIBUTE_NORETURN
183abort_with_message (const char *msg)
184{
72542b8e 185 if (current_ui == NULL)
2437fd32
GB
186 fputs (msg, stderr);
187 else
188 fputs_unfiltered (msg, gdb_stderr);
189
036003a6 190 abort (); /* ARI: abort */
2437fd32
GB
191}
192
7991dee7
JK
193/* Dump core trying to increase the core soft limit to hard limit first. */
194
eae7090b 195void
7991dee7
JK
196dump_core (void)
197{
198#ifdef HAVE_SETRLIMIT
206c1947 199 struct rlimit rlim = { (rlim_t) RLIM_INFINITY, (rlim_t) RLIM_INFINITY };
7991dee7
JK
200
201 setrlimit (RLIMIT_CORE, &rlim);
202#endif /* HAVE_SETRLIMIT */
203
036003a6 204 abort (); /* ARI: abort */
7991dee7
JK
205}
206
3e43a32a 207/* Check whether GDB will be able to dump core using the dump_core
eae7090b
GB
208 function. Returns zero if GDB cannot or should not dump core.
209 If LIMIT_KIND is LIMIT_CUR the user's soft limit will be respected.
210 If LIMIT_KIND is LIMIT_MAX only the hard limit will be respected. */
7991dee7 211
eae7090b
GB
212int
213can_dump_core (enum resource_limit_kind limit_kind)
7991dee7
JK
214{
215#ifdef HAVE_GETRLIMIT
216 struct rlimit rlim;
217
218 /* Be quiet and assume we can dump if an error is returned. */
219 if (getrlimit (RLIMIT_CORE, &rlim) != 0)
220 return 1;
221
eae7090b 222 switch (limit_kind)
7991dee7 223 {
eae7090b
GB
224 case LIMIT_CUR:
225 if (rlim.rlim_cur == 0)
226 return 0;
565e0eda 227 /* Fall through. */
eae7090b
GB
228
229 case LIMIT_MAX:
230 if (rlim.rlim_max == 0)
231 return 0;
7991dee7
JK
232 }
233#endif /* HAVE_GETRLIMIT */
234
235 return 1;
236}
237
eae7090b
GB
238/* Print a warning that we cannot dump core. */
239
240void
241warn_cant_dump_core (const char *reason)
242{
243 fprintf_unfiltered (gdb_stderr,
244 _("%s\nUnable to dump core, use `ulimit -c"
245 " unlimited' before executing GDB next time.\n"),
246 reason);
247}
248
249/* Check whether GDB will be able to dump core using the dump_core
250 function, and print a warning if we cannot. */
251
252static int
253can_dump_core_warn (enum resource_limit_kind limit_kind,
254 const char *reason)
255{
256 int core_dump_allowed = can_dump_core (limit_kind);
257
258 if (!core_dump_allowed)
259 warn_cant_dump_core (reason);
260
261 return core_dump_allowed;
262}
263
3c16cced
PA
264/* Allow the user to configure the debugger behavior with respect to
265 what to do when an internal problem is detected. */
266
267const char internal_problem_ask[] = "ask";
268const char internal_problem_yes[] = "yes";
269const char internal_problem_no[] = "no";
40478521 270static const char *const internal_problem_modes[] =
3c16cced
PA
271{
272 internal_problem_ask,
273 internal_problem_yes,
274 internal_problem_no,
275 NULL
276};
3c16cced 277
581e13c1 278/* Print a message reporting an internal error/warning. Ask the user
dec43320
AC
279 if they want to continue, dump core, or just exit. Return
280 something to indicate a quit. */
c906108c 281
dec43320 282struct internal_problem
c906108c 283{
dec43320 284 const char *name;
57fcfb1b 285 int user_settable_should_quit;
3c16cced 286 const char *should_quit;
57fcfb1b 287 int user_settable_should_dump_core;
3c16cced 288 const char *should_dump_core;
dec43320
AC
289};
290
291/* Report a problem, internal to GDB, to the user. Once the problem
292 has been reported, and assuming GDB didn't quit, the caller can
293 either allow execution to resume or throw an error. */
294
a0b31db1 295static void ATTRIBUTE_PRINTF (4, 0)
dec43320 296internal_vproblem (struct internal_problem *problem,
8731e58e 297 const char *file, int line, const char *fmt, va_list ap)
dec43320 298{
dec43320 299 static int dejavu;
375fc983 300 int quit_p;
7be570e7 301 int dump_core_p;
e05550d7 302 std::string reason;
c906108c 303
dec43320 304 /* Don't allow infinite error/warning recursion. */
714b1282 305 {
02cf60c7 306 static const char msg[] = "Recursive internal problem.\n";
5d502164 307
714b1282
AC
308 switch (dejavu)
309 {
310 case 0:
311 dejavu = 1;
312 break;
313 case 1:
314 dejavu = 2;
2437fd32 315 abort_with_message (msg);
714b1282
AC
316 default:
317 dejavu = 3;
dda83cd7
SM
318 /* Newer GLIBC versions put the warn_unused_result attribute
319 on write, but this is one of those rare cases where
320 ignoring the return value is correct. Casting to (void)
321 does not fix this problem. This is the solution suggested
322 at http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25509. */
bf1d7d9c 323 if (write (STDERR_FILENO, msg, sizeof (msg)) != sizeof (msg))
dda83cd7 324 abort (); /* ARI: abort */
714b1282
AC
325 exit (1);
326 }
327 }
c906108c 328
714b1282
AC
329 /* Create a string containing the full error/warning message. Need
330 to call query with this full string, as otherwize the reason
331 (error/warning) and question become separated. Format using a
332 style similar to a compiler error message. Include extra detail
333 so that the user knows that they are living on the edge. */
334 {
f8bfbf22 335 std::string msg = string_vprintf (fmt, ap);
e05550d7
TT
336 reason = string_printf ("%s:%d: %s: %s\n"
337 "A problem internal to GDB has been detected,\n"
338 "further debugging may prove unreliable.",
339 file, line, problem->name, msg.c_str ());
714b1282 340 }
7be570e7 341
2437fd32 342 /* Fall back to abort_with_message if gdb_stderr is not set up. */
72542b8e 343 if (current_ui == NULL)
2437fd32 344 {
e05550d7 345 fputs (reason.c_str (), stderr);
2437fd32
GB
346 abort_with_message ("\n");
347 }
348
349 /* Try to get the message out and at the start of a new line. */
223ffa71 350 gdb::optional<target_terminal::scoped_restore_terminal_state> term_state;
2437fd32 351 if (target_supports_terminal_ours ())
c5ac1540 352 {
223ffa71
TT
353 term_state.emplace ();
354 target_terminal::ours_for_output ();
c5ac1540 355 }
2437fd32
GB
356 if (filtered_printing_initialized ())
357 begin_line ();
358
196a707b 359 /* Emit the message unless query will emit it below. */
2437fd32
GB
360 if (problem->should_quit != internal_problem_ask
361 || !confirm
362 || !filtered_printing_initialized ())
e05550d7 363 fprintf_unfiltered (gdb_stderr, "%s\n", reason.c_str ());
196a707b 364
3c16cced 365 if (problem->should_quit == internal_problem_ask)
dec43320 366 {
dec43320 367 /* Default (yes/batch case) is to quit GDB. When in batch mode
3c16cced
PA
368 this lessens the likelihood of GDB going into an infinite
369 loop. */
2437fd32 370 if (!confirm || !filtered_printing_initialized ())
196a707b 371 quit_p = 1;
26bb68be 372 else
dda83cd7 373 quit_p = query (_("%s\nQuit this debugging session? "),
e05550d7 374 reason.c_str ());
dec43320 375 }
3c16cced
PA
376 else if (problem->should_quit == internal_problem_yes)
377 quit_p = 1;
378 else if (problem->should_quit == internal_problem_no)
379 quit_p = 0;
380 else
381 internal_error (__FILE__, __LINE__, _("bad switch"));
dec43320 382
add6c04d
GB
383 fputs_unfiltered (_("\nThis is a bug, please report it."), gdb_stderr);
384 if (REPORT_BUGS_TO[0])
385 fprintf_unfiltered (gdb_stderr, _(" For instructions, see:\n%s."),
386 REPORT_BUGS_TO);
387 fputs_unfiltered ("\n\n", gdb_stderr);
388
3c16cced 389 if (problem->should_dump_core == internal_problem_ask)
dec43320 390 {
e05550d7 391 if (!can_dump_core_warn (LIMIT_MAX, reason.c_str ()))
7991dee7 392 dump_core_p = 0;
2437fd32
GB
393 else if (!filtered_printing_initialized ())
394 dump_core_p = 1;
7991dee7
JK
395 else
396 {
397 /* Default (yes/batch case) is to dump core. This leaves a GDB
398 `dropping' so that it is easier to see that something went
399 wrong in GDB. */
e05550d7
TT
400 dump_core_p = query (_("%s\nCreate a core file of GDB? "),
401 reason.c_str ());
7991dee7 402 }
dec43320 403 }
3c16cced 404 else if (problem->should_dump_core == internal_problem_yes)
e05550d7 405 dump_core_p = can_dump_core_warn (LIMIT_MAX, reason.c_str ());
3c16cced
PA
406 else if (problem->should_dump_core == internal_problem_no)
407 dump_core_p = 0;
408 else
409 internal_error (__FILE__, __LINE__, _("bad switch"));
7be570e7 410
375fc983 411 if (quit_p)
7be570e7
JM
412 {
413 if (dump_core_p)
7991dee7 414 dump_core ();
375fc983
AC
415 else
416 exit (1);
7be570e7
JM
417 }
418 else
419 {
420 if (dump_core_p)
375fc983 421 {
9b265ec2 422#ifdef HAVE_WORKING_FORK
375fc983 423 if (fork () == 0)
7991dee7 424 dump_core ();
9b265ec2 425#endif
375fc983 426 }
7be570e7 427 }
96baa820
JM
428
429 dejavu = 0;
dec43320
AC
430}
431
432static struct internal_problem internal_error_problem = {
57fcfb1b 433 "internal-error", 1, internal_problem_ask, 1, internal_problem_ask
dec43320
AC
434};
435
c25c4a8b 436void
8731e58e 437internal_verror (const char *file, int line, const char *fmt, va_list ap)
dec43320
AC
438{
439 internal_vproblem (&internal_error_problem, file, line, fmt, ap);
2c51604d 440 throw_quit (_("Command aborted."));
c906108c
SS
441}
442
dec43320 443static struct internal_problem internal_warning_problem = {
57fcfb1b 444 "internal-warning", 1, internal_problem_ask, 1, internal_problem_ask
dec43320
AC
445};
446
447void
8731e58e 448internal_vwarning (const char *file, int line, const char *fmt, va_list ap)
dec43320
AC
449{
450 internal_vproblem (&internal_warning_problem, file, line, fmt, ap);
451}
452
57fcfb1b
GB
453static struct internal_problem demangler_warning_problem = {
454 "demangler-warning", 1, internal_problem_ask, 0, internal_problem_no
455};
456
457void
458demangler_vwarning (const char *file, int line, const char *fmt, va_list ap)
459{
460 internal_vproblem (&demangler_warning_problem, file, line, fmt, ap);
461}
462
463void
464demangler_warning (const char *file, int line, const char *string, ...)
465{
466 va_list ap;
467
468 va_start (ap, string);
469 demangler_vwarning (file, line, string, ap);
470 va_end (ap);
471}
472
3c16cced
PA
473/* When GDB reports an internal problem (error or warning) it gives
474 the user the opportunity to quit GDB and/or create a core file of
475 the current debug session. This function registers a few commands
476 that make it possible to specify that GDB should always or never
477 quit or create a core file, without asking. The commands look
478 like:
479
480 maint set PROBLEM-NAME quit ask|yes|no
481 maint show PROBLEM-NAME quit
482 maint set PROBLEM-NAME corefile ask|yes|no
483 maint show PROBLEM-NAME corefile
484
485 Where PROBLEM-NAME is currently "internal-error" or
486 "internal-warning". */
487
488static void
489add_internal_problem_command (struct internal_problem *problem)
490{
491 struct cmd_list_element **set_cmd_list;
492 struct cmd_list_element **show_cmd_list;
493 char *set_doc;
494 char *show_doc;
495
8d749320
SM
496 set_cmd_list = XNEW (struct cmd_list_element *);
497 show_cmd_list = XNEW (struct cmd_list_element *);
3c16cced
PA
498 *set_cmd_list = NULL;
499 *show_cmd_list = NULL;
500
501 set_doc = xstrprintf (_("Configure what GDB does when %s is detected."),
502 problem->name);
503
504 show_doc = xstrprintf (_("Show what GDB does when %s is detected."),
505 problem->name);
506
3b6acaee
TT
507 add_basic_prefix_cmd (problem->name, class_maintenance, set_doc,
508 set_cmd_list,
3b6acaee
TT
509 0/*allow-unknown*/, &maintenance_set_cmdlist);
510
511 add_show_prefix_cmd (problem->name, class_maintenance, show_doc,
512 show_cmd_list,
3b6acaee 513 0/*allow-unknown*/, &maintenance_show_cmdlist);
3c16cced 514
57fcfb1b
GB
515 if (problem->user_settable_should_quit)
516 {
517 set_doc = xstrprintf (_("Set whether GDB should quit "
590042fc 518 "when an %s is detected."),
57fcfb1b
GB
519 problem->name);
520 show_doc = xstrprintf (_("Show whether GDB will quit "
590042fc 521 "when an %s is detected."),
57fcfb1b
GB
522 problem->name);
523 add_setshow_enum_cmd ("quit", class_maintenance,
524 internal_problem_modes,
525 &problem->should_quit,
526 set_doc,
527 show_doc,
528 NULL, /* help_doc */
529 NULL, /* setfunc */
530 NULL, /* showfunc */
531 set_cmd_list,
532 show_cmd_list);
533
534 xfree (set_doc);
535 xfree (show_doc);
536 }
1eefb858 537
57fcfb1b
GB
538 if (problem->user_settable_should_dump_core)
539 {
540 set_doc = xstrprintf (_("Set whether GDB should create a core "
590042fc 541 "file of GDB when %s is detected."),
57fcfb1b
GB
542 problem->name);
543 show_doc = xstrprintf (_("Show whether GDB will create a core "
590042fc 544 "file of GDB when %s is detected."),
57fcfb1b
GB
545 problem->name);
546 add_setshow_enum_cmd ("corefile", class_maintenance,
547 internal_problem_modes,
548 &problem->should_dump_core,
549 set_doc,
550 show_doc,
551 NULL, /* help_doc */
552 NULL, /* setfunc */
553 NULL, /* showfunc */
554 set_cmd_list,
555 show_cmd_list);
556
557 xfree (set_doc);
558 xfree (show_doc);
559 }
3c16cced
PA
560}
561
0cf4063e 562/* Return a newly allocated string, containing the PREFIX followed
18e9961f 563 by the system error message for errno (separated by a colon). */
0cf4063e 564
18e9961f 565static std::string
0cf4063e
JB
566perror_string (const char *prefix)
567{
b231e86a 568 const char *err = safe_strerror (errno);
18e9961f 569 return std::string (prefix) + ": " + err;
0cf4063e
JB
570}
571
c906108c 572/* Print the system error message for errno, and also mention STRING
598d3636
JK
573 as the file name for which the error was encountered. Use ERRCODE
574 for the thrown exception. Then return to command level. */
c906108c 575
c25c4a8b 576void
598d3636 577throw_perror_with_name (enum errors errcode, const char *string)
c906108c 578{
18e9961f 579 std::string combined = perror_string (string);
c906108c
SS
580
581 /* I understand setting these is a matter of taste. Still, some people
582 may clear errno but not know about bfd_error. Doing this here is not
581e13c1 583 unreasonable. */
c906108c
SS
584 bfd_set_error (bfd_error_no_error);
585 errno = 0;
586
18e9961f 587 throw_error (errcode, _("%s."), combined.c_str ());
598d3636
JK
588}
589
590/* See throw_perror_with_name, ERRCODE defaults here to GENERIC_ERROR. */
591
592void
593perror_with_name (const char *string)
594{
595 throw_perror_with_name (GENERIC_ERROR, string);
c906108c
SS
596}
597
7c647d61
JB
598/* Same as perror_with_name except that it prints a warning instead
599 of throwing an error. */
600
601void
602perror_warning_with_name (const char *string)
603{
18e9961f
TT
604 std::string combined = perror_string (string);
605 warning (_("%s"), combined.c_str ());
7c647d61
JB
606}
607
c906108c
SS
608/* Print the system error message for ERRCODE, and also mention STRING
609 as the file name for which the error was encountered. */
610
611void
6972bc8b 612print_sys_errmsg (const char *string, int errcode)
c906108c 613{
b231e86a 614 const char *err = safe_strerror (errcode);
c906108c
SS
615 /* We want anything which was printed on stdout to come out first, before
616 this message. */
617 gdb_flush (gdb_stdout);
5df96a4e 618 fprintf_unfiltered (gdb_stderr, "%s: %s.\n", string, err);
c906108c
SS
619}
620
621/* Control C eventually causes this to be called, at a convenient time. */
622
623void
fba45db2 624quit (void)
c906108c 625{
06c868a8
JK
626 if (sync_quit_force_run)
627 {
628 sync_quit_force_run = 0;
268a799a 629 quit_force (NULL, 0);
06c868a8
JK
630 }
631
7be570e7
JM
632#ifdef __MSDOS__
633 /* No steenking SIGINT will ever be coming our way when the
634 program is resumed. Don't lie. */
2c51604d 635 throw_quit ("Quit");
7be570e7 636#else
c906108c 637 if (job_control
8731e58e 638 /* If there is no terminal switching for this target, then we can't
dda83cd7 639 possibly get screwed by the lack of job control. */
b0ed115f 640 || !target_supports_terminal_ours ())
2c51604d 641 throw_quit ("Quit");
c906108c 642 else
2c51604d 643 throw_quit ("Quit (expect signal SIGINT when the program is resumed)");
7be570e7 644#endif
c906108c
SS
645}
646
abc56d60
PA
647/* See defs.h. */
648
649void
650maybe_quit (void)
651{
048094ac 652 if (sync_quit_force_run)
abc56d60 653 quit ();
048094ac
PA
654
655 quit_handler ();
abc56d60
PA
656}
657
c906108c 658\f
c906108c 659/* Called when a memory allocation fails, with the number of bytes of
581e13c1 660 memory requested in SIZE. */
c906108c 661
c25c4a8b 662void
d26e3629 663malloc_failure (long size)
c906108c
SS
664{
665 if (size > 0)
666 {
8e65ff28 667 internal_error (__FILE__, __LINE__,
e2e0b3e5 668 _("virtual memory exhausted: can't allocate %ld bytes."),
8731e58e 669 size);
c906108c
SS
670 }
671 else
672 {
e2e0b3e5 673 internal_error (__FILE__, __LINE__, _("virtual memory exhausted."));
c906108c
SS
674 }
675}
676
c1cd3163
TT
677/* See common/errors.h. */
678
679void
680flush_streams ()
681{
682 gdb_stdout->flush ();
683 gdb_stderr->flush ();
684}
685
c906108c
SS
686/* My replacement for the read system call.
687 Used like `read' but keeps going if `read' returns too soon. */
688
689int
fba45db2 690myread (int desc, char *addr, int len)
c906108c 691{
52f0bd74 692 int val;
c906108c
SS
693 int orglen = len;
694
695 while (len > 0)
696 {
697 val = read (desc, addr, len);
698 if (val < 0)
699 return val;
700 if (val == 0)
701 return orglen - len;
702 len -= val;
703 addr += val;
704 }
705 return orglen;
706}
d26e3629 707
e55c6530
JB
708/* See utils.h. */
709
710ULONGEST
711uinteger_pow (ULONGEST v1, LONGEST v2)
712{
713 if (v2 < 0)
714 {
715 if (v1 == 0)
716 error (_("Attempt to raise 0 to negative power."));
717 else
718 return 0;
719 }
720 else
721 {
722 /* The Russian Peasant's Algorithm. */
723 ULONGEST v;
724
725 v = 1;
726 for (;;)
727 {
728 if (v2 & 1L)
729 v *= v1;
730 v2 >>= 1;
731 if (v2 == 0)
732 return v;
733 v1 *= v1;
734 }
735 }
736}
737
c906108c 738void
aa1ee363 739print_spaces (int n, struct ui_file *file)
c906108c 740{
392a587b 741 fputs_unfiltered (n_spaces (n), file);
c906108c
SS
742}
743
744/* Print a host address. */
745
746void
b80c3053 747gdb_print_host_address_1 (const void *addr, struct ui_file *stream)
c906108c 748{
ea8992ce 749 fprintf_filtered (stream, "%s", host_address_to_string (addr));
c906108c 750}
7c50a931 751
c906108c 752\f
c5aa993b 753
223ffa71
TT
754/* An RAII class that sets up to handle input and then tears down
755 during destruction. */
3eb7562a 756
223ffa71 757class scoped_input_handler
3eb7562a 758{
223ffa71 759public:
3eb7562a 760
223ffa71 761 scoped_input_handler ()
c2f97536 762 : m_quit_handler (&quit_handler, default_quit_handler),
223ffa71
TT
763 m_ui (NULL)
764 {
765 target_terminal::ours ();
766 ui_register_input_event_handler (current_ui);
767 if (current_ui->prompt_state == PROMPT_BLOCKED)
768 m_ui = current_ui;
769 }
3eb7562a 770
223ffa71
TT
771 ~scoped_input_handler ()
772 {
773 if (m_ui != NULL)
774 ui_unregister_input_event_handler (m_ui);
775 }
3eb7562a 776
223ffa71 777 DISABLE_COPY_AND_ASSIGN (scoped_input_handler);
3eb7562a 778
223ffa71 779private:
3eb7562a 780
223ffa71
TT
781 /* Save and restore the terminal state. */
782 target_terminal::scoped_restore_terminal_state m_term_state;
3eb7562a 783
223ffa71 784 /* Save and restore the quit handler. */
c2f97536 785 scoped_restore_tmpl<quit_handler_ftype *> m_quit_handler;
223ffa71
TT
786
787 /* The saved UI, if non-NULL. */
788 struct ui *m_ui;
789};
3eb7562a 790
db1ff28b
JK
791\f
792
981c7f5a 793/* This function supports the query, nquery, and yquery functions.
cbdeadca 794 Ask user a y-or-n question and return 0 if answer is no, 1 if
981c7f5a
DJ
795 answer is yes, or default the answer to the specified default
796 (for yquery or nquery). DEFCHAR may be 'y' or 'n' to provide a
797 default answer, or '\0' for no default.
cbdeadca
JJ
798 CTLSTR is the control string and should end in "? ". It should
799 not say how to answer, because we do that.
800 ARGS are the arguments passed along with the CTLSTR argument to
801 printf. */
802
a0b31db1 803static int ATTRIBUTE_PRINTF (1, 0)
cbdeadca
JJ
804defaulted_query (const char *ctlstr, const char defchar, va_list args)
805{
cbdeadca
JJ
806 int retval;
807 int def_value;
808 char def_answer, not_def_answer;
a121b7c1 809 const char *y_string, *n_string;
cbdeadca
JJ
810
811 /* Set up according to which answer is the default. */
981c7f5a
DJ
812 if (defchar == '\0')
813 {
814 def_value = 1;
815 def_answer = 'Y';
816 not_def_answer = 'N';
817 y_string = "y";
818 n_string = "n";
819 }
820 else if (defchar == 'y')
cbdeadca
JJ
821 {
822 def_value = 1;
823 def_answer = 'Y';
824 not_def_answer = 'N';
825 y_string = "[y]";
826 n_string = "n";
827 }
828 else
829 {
830 def_value = 0;
831 def_answer = 'N';
832 not_def_answer = 'Y';
833 y_string = "y";
834 n_string = "[n]";
835 }
836
981c7f5a 837 /* Automatically answer the default value if the user did not want
a502cf95 838 prompts or the command was issued with the server prefix. */
e360902b 839 if (!confirm || server_command)
981c7f5a
DJ
840 return def_value;
841
842 /* If input isn't coming from the user directly, just say what
7a01c6e0 843 question we're asking, and then answer the default automatically. This
981c7f5a
DJ
844 way, important error messages don't get lost when talking to GDB
845 over a pipe. */
268a799a 846 if (current_ui->instream != current_ui->stdin_stream
26a06916
SM
847 || !input_interactive_p (current_ui)
848 /* Restrict queries to the main UI. */
849 || current_ui != main_ui)
981c7f5a 850 {
223ffa71
TT
851 target_terminal::scoped_restore_terminal_state term_state;
852 target_terminal::ours_for_output ();
981c7f5a
DJ
853 wrap_here ("");
854 vfprintf_filtered (gdb_stdout, ctlstr, args);
855
3e43a32a
MS
856 printf_filtered (_("(%s or %s) [answered %c; "
857 "input not from terminal]\n"),
981c7f5a 858 y_string, n_string, def_answer);
981c7f5a
DJ
859
860 return def_value;
861 }
862
9a4105ab 863 if (deprecated_query_hook)
cbdeadca 864 {
223ffa71
TT
865 target_terminal::scoped_restore_terminal_state term_state;
866 return deprecated_query_hook (ctlstr, args);
651ce16a 867 }
80dbc9fd 868
981c7f5a 869 /* Format the question outside of the loop, to avoid reusing args. */
e05550d7
TT
870 std::string question = string_vprintf (ctlstr, args);
871 std::string prompt
872 = string_printf (_("%s%s(%s or %s) %s"),
873 annotation_level > 1 ? "\n\032\032pre-query\n" : "",
874 question.c_str (), y_string, n_string,
875 annotation_level > 1 ? "\n\032\032query\n" : "");
981c7f5a 876
dcb07cfa
PA
877 /* Used to add duration we waited for user to respond to
878 prompt_for_continue_wait_time. */
879 using namespace std::chrono;
880 steady_clock::time_point prompt_started = steady_clock::now ();
260c0b2a 881
223ffa71 882 scoped_input_handler prepare_input;
651ce16a 883
cbdeadca
JJ
884 while (1)
885 {
588dcc3e 886 char *response, answer;
cbdeadca 887
cbdeadca 888 gdb_flush (gdb_stdout);
e05550d7 889 response = gdb_readline_wrapper (prompt.c_str ());
cbdeadca 890
588dcc3e 891 if (response == NULL) /* C-d */
cbdeadca 892 {
fa3fd85b 893 printf_filtered ("EOF [assumed %c]\n", def_answer);
cbdeadca
JJ
894 retval = def_value;
895 break;
896 }
588dcc3e
PP
897
898 answer = response[0];
899 xfree (response);
cbdeadca
JJ
900
901 if (answer >= 'a')
902 answer -= 040;
903 /* Check answer. For the non-default, the user must specify
dda83cd7 904 the non-default explicitly. */
cbdeadca
JJ
905 if (answer == not_def_answer)
906 {
907 retval = !def_value;
908 break;
909 }
981c7f5a 910 /* Otherwise, if a default was specified, the user may either
dda83cd7
SM
911 specify the required input or have it default by entering
912 nothing. */
981c7f5a 913 if (answer == def_answer
588dcc3e 914 || (defchar != '\0' && answer == '\0'))
cbdeadca
JJ
915 {
916 retval = def_value;
917 break;
918 }
919 /* Invalid entries are not defaulted and require another selection. */
a3f17187 920 printf_filtered (_("Please answer %s or %s.\n"),
cbdeadca
JJ
921 y_string, n_string);
922 }
923
260c0b2a 924 /* Add time spend in this routine to prompt_for_continue_wait_time. */
dcb07cfa 925 prompt_for_continue_wait_time += steady_clock::now () - prompt_started;
260c0b2a 926
cbdeadca 927 if (annotation_level > 1)
a3f17187 928 printf_filtered (("\n\032\032post-query\n"));
cbdeadca
JJ
929 return retval;
930}
931\f
932
933/* Ask user a y-or-n question and return 0 if answer is no, 1 if
934 answer is yes, or 0 if answer is defaulted.
935 Takes three args which are given to printf to print the question.
936 The first, a control string, should end in "? ".
937 It should not say how to answer, because we do that. */
938
939int
940nquery (const char *ctlstr, ...)
941{
942 va_list args;
899500d6 943 int ret;
cbdeadca
JJ
944
945 va_start (args, ctlstr);
899500d6 946 ret = defaulted_query (ctlstr, 'n', args);
cbdeadca 947 va_end (args);
899500d6 948 return ret;
cbdeadca
JJ
949}
950
951/* Ask user a y-or-n question and return 0 if answer is no, 1 if
952 answer is yes, or 1 if answer is defaulted.
953 Takes three args which are given to printf to print the question.
954 The first, a control string, should end in "? ".
955 It should not say how to answer, because we do that. */
956
957int
958yquery (const char *ctlstr, ...)
959{
960 va_list args;
899500d6 961 int ret;
cbdeadca
JJ
962
963 va_start (args, ctlstr);
899500d6 964 ret = defaulted_query (ctlstr, 'y', args);
cbdeadca 965 va_end (args);
899500d6 966 return ret;
cbdeadca
JJ
967}
968
981c7f5a
DJ
969/* Ask user a y-or-n question and return 1 iff answer is yes.
970 Takes three args which are given to printf to print the question.
971 The first, a control string, should end in "? ".
972 It should not say how to answer, because we do that. */
973
974int
975query (const char *ctlstr, ...)
976{
977 va_list args;
899500d6 978 int ret;
981c7f5a
DJ
979
980 va_start (args, ctlstr);
899500d6 981 ret = defaulted_query (ctlstr, '\0', args);
981c7f5a 982 va_end (args);
899500d6 983 return ret;
981c7f5a
DJ
984}
985
6c7a06a3
TT
986/* A helper for parse_escape that converts a host character to a
987 target character. C is the host character. If conversion is
988 possible, then the target character is stored in *TARGET_C and the
989 function returns 1. Otherwise, the function returns 0. */
990
991static int
f870a310 992host_char_to_target (struct gdbarch *gdbarch, int c, int *target_c)
234b45d4 993{
6c7a06a3 994 char the_char = c;
6c7a06a3 995 int result = 0;
234b45d4 996
8268c778 997 auto_obstack host_data;
234b45d4 998
f870a310 999 convert_between_encodings (target_charset (gdbarch), host_charset (),
ac91cd70
PA
1000 (gdb_byte *) &the_char, 1, 1,
1001 &host_data, translit_none);
6c7a06a3
TT
1002
1003 if (obstack_object_size (&host_data) == 1)
1004 {
1005 result = 1;
1006 *target_c = *(char *) obstack_base (&host_data);
1007 }
1008
6c7a06a3 1009 return result;
234b45d4
KB
1010}
1011
c906108c
SS
1012/* Parse a C escape sequence. STRING_PTR points to a variable
1013 containing a pointer to the string to parse. That pointer
1014 should point to the character after the \. That pointer
1015 is updated past the characters we use. The value of the
1016 escape sequence is returned.
1017
1018 A negative value means the sequence \ newline was seen,
1019 which is supposed to be equivalent to nothing at all.
1020
1021 If \ is followed by a null character, we return a negative
1022 value and leave the string pointer pointing at the null character.
1023
1024 If \ is followed by 000, we return 0 and leave the string pointer
1025 after the zeros. A value of 0 does not mean end of string. */
1026
1027int
d7561cbb 1028parse_escape (struct gdbarch *gdbarch, const char **string_ptr)
c906108c 1029{
581e13c1 1030 int target_char = -2; /* Initialize to avoid GCC warnings. */
52f0bd74 1031 int c = *(*string_ptr)++;
e0627e85 1032
6c7a06a3
TT
1033 switch (c)
1034 {
8731e58e
AC
1035 case '\n':
1036 return -2;
1037 case 0:
1038 (*string_ptr)--;
1039 return 0;
8731e58e
AC
1040
1041 case '0':
1042 case '1':
1043 case '2':
1044 case '3':
1045 case '4':
1046 case '5':
1047 case '6':
1048 case '7':
1049 {
6c7a06a3 1050 int i = host_hex_value (c);
aa1ee363 1051 int count = 0;
8731e58e
AC
1052 while (++count < 3)
1053 {
5cb316ef 1054 c = (**string_ptr);
51e2cfa2 1055 if (ISDIGIT (c) && c != '8' && c != '9')
8731e58e 1056 {
5cb316ef 1057 (*string_ptr)++;
8731e58e 1058 i *= 8;
6c7a06a3 1059 i += host_hex_value (c);
8731e58e
AC
1060 }
1061 else
1062 {
8731e58e
AC
1063 break;
1064 }
1065 }
1066 return i;
1067 }
6c7a06a3
TT
1068
1069 case 'a':
1070 c = '\a';
1071 break;
1072 case 'b':
1073 c = '\b';
1074 break;
1075 case 'f':
1076 c = '\f';
1077 break;
1078 case 'n':
1079 c = '\n';
1080 break;
1081 case 'r':
1082 c = '\r';
1083 break;
1084 case 't':
1085 c = '\t';
1086 break;
1087 case 'v':
1088 c = '\v';
1089 break;
1090
1091 default:
1092 break;
1093 }
1094
f870a310 1095 if (!host_char_to_target (gdbarch, c, &target_char))
3351ea09
JB
1096 error (_("The escape sequence `\\%c' is equivalent to plain `%c',"
1097 " which has no equivalent\nin the `%s' character set."),
905b671b 1098 c, c, target_charset (gdbarch));
6c7a06a3 1099 return target_char;
c906108c
SS
1100}
1101\f
1102/* Print the character C on STREAM as part of the contents of a literal
1103 string whose delimiter is QUOTER. Note that this routine should only
f9acce4a 1104 be called for printing things which are independent of the language
6ef284bd
SM
1105 of the program being debugged.
1106
1107 printchar will normally escape backslashes and instances of QUOTER. If
1108 QUOTER is 0, printchar won't escape backslashes or any quoting character.
1109 As a side effect, if you pass the backslash character as the QUOTER,
1110 printchar will escape backslashes as usual, but not any other quoting
1111 character. */
c906108c 1112
43e526b9 1113static void
7c4e78cf 1114printchar (int c, do_fputc_ftype do_fputc, ui_file *stream, int quoter)
c906108c 1115{
c906108c
SS
1116 c &= 0xFF; /* Avoid sign bit follies */
1117
c5aa993b
JM
1118 if (c < 0x20 || /* Low control chars */
1119 (c >= 0x7F && c < 0xA0) || /* DEL, High controls */
1120 (sevenbit_strings && c >= 0x80))
1121 { /* high order bit set */
7c4e78cf
SM
1122 do_fputc ('\\', stream);
1123
c5aa993b
JM
1124 switch (c)
1125 {
1126 case '\n':
7c4e78cf 1127 do_fputc ('n', stream);
c5aa993b
JM
1128 break;
1129 case '\b':
7c4e78cf 1130 do_fputc ('b', stream);
c5aa993b
JM
1131 break;
1132 case '\t':
7c4e78cf 1133 do_fputc ('t', stream);
c5aa993b
JM
1134 break;
1135 case '\f':
7c4e78cf 1136 do_fputc ('f', stream);
c5aa993b
JM
1137 break;
1138 case '\r':
7c4e78cf 1139 do_fputc ('r', stream);
c5aa993b
JM
1140 break;
1141 case '\033':
7c4e78cf 1142 do_fputc ('e', stream);
c5aa993b
JM
1143 break;
1144 case '\007':
7c4e78cf 1145 do_fputc ('a', stream);
c5aa993b
JM
1146 break;
1147 default:
7c4e78cf
SM
1148 {
1149 do_fputc ('0' + ((c >> 6) & 0x7), stream);
1150 do_fputc ('0' + ((c >> 3) & 0x7), stream);
1151 do_fputc ('0' + ((c >> 0) & 0x7), stream);
1152 break;
1153 }
c5aa993b
JM
1154 }
1155 }
1156 else
1157 {
6ef284bd 1158 if (quoter != 0 && (c == '\\' || c == quoter))
7c4e78cf
SM
1159 do_fputc ('\\', stream);
1160 do_fputc (c, stream);
c5aa993b 1161 }
c906108c 1162}
43e526b9
JM
1163
1164/* Print the character C on STREAM as part of the contents of a
1165 literal string whose delimiter is QUOTER. Note that these routines
1166 should only be call for printing things which are independent of
581e13c1 1167 the language of the program being debugged. */
43e526b9
JM
1168
1169void
fba45db2 1170fputstr_filtered (const char *str, int quoter, struct ui_file *stream)
43e526b9
JM
1171{
1172 while (*str)
7c4e78cf 1173 printchar (*str++, fputc_filtered, stream, quoter);
43e526b9
JM
1174}
1175
1176void
fba45db2 1177fputstr_unfiltered (const char *str, int quoter, struct ui_file *stream)
43e526b9
JM
1178{
1179 while (*str)
7c4e78cf 1180 printchar (*str++, fputc_unfiltered, stream, quoter);
43e526b9
JM
1181}
1182
0876f84a
DJ
1183void
1184fputstrn_filtered (const char *str, int n, int quoter,
1185 struct ui_file *stream)
1186{
7c4e78cf
SM
1187 for (int i = 0; i < n; i++)
1188 printchar (str[i], fputc_filtered, stream, quoter);
0876f84a
DJ
1189}
1190
43e526b9 1191void
8731e58e 1192fputstrn_unfiltered (const char *str, int n, int quoter,
7c4e78cf 1193 do_fputc_ftype do_fputc, struct ui_file *stream)
43e526b9 1194{
7c4e78cf
SM
1195 for (int i = 0; i < n; i++)
1196 printchar (str[i], do_fputc, stream, quoter);
43e526b9 1197}
c906108c 1198\f
c5aa993b 1199
c906108c
SS
1200/* Number of lines per page or UINT_MAX if paging is disabled. */
1201static unsigned int lines_per_page;
920d2a44
AC
1202static void
1203show_lines_per_page (struct ui_file *file, int from_tty,
1204 struct cmd_list_element *c, const char *value)
1205{
3e43a32a
MS
1206 fprintf_filtered (file,
1207 _("Number of lines gdb thinks are in a page is %s.\n"),
920d2a44
AC
1208 value);
1209}
eb0d3137 1210
cbfbd72a 1211/* Number of chars per line or UINT_MAX if line folding is disabled. */
c906108c 1212static unsigned int chars_per_line;
920d2a44
AC
1213static void
1214show_chars_per_line (struct ui_file *file, int from_tty,
1215 struct cmd_list_element *c, const char *value)
1216{
3e43a32a
MS
1217 fprintf_filtered (file,
1218 _("Number of characters gdb thinks "
1219 "are in a line is %s.\n"),
920d2a44
AC
1220 value);
1221}
eb0d3137 1222
c906108c
SS
1223/* Current count of lines printed on this page, chars on this line. */
1224static unsigned int lines_printed, chars_printed;
1225
eb6af809
TT
1226/* True if pagination is disabled for just one command. */
1227
1228static bool pagination_disabled_for_command;
1229
c906108c
SS
1230/* Buffer and start column of buffered text, for doing smarter word-
1231 wrapping. When someone calls wrap_here(), we start buffering output
1232 that comes through fputs_filtered(). If we see a newline, we just
1233 spit it out and forget about the wrap_here(). If we see another
1234 wrap_here(), we spit it out and remember the newer one. If we see
1235 the end of the line, we spit out a newline, the indent, and then
1236 the buffered output. */
1237
c5603d50 1238static bool filter_initialized = false;
c906108c 1239
c5603d50
TT
1240/* Contains characters which are waiting to be output (they have
1241 already been counted in chars_printed). */
1242static std::string wrap_buffer;
c906108c
SS
1243
1244/* String to indent by if the wrap occurs. Must not be NULL if wrap_column
1245 is non-zero. */
d2c0eef4 1246static const char *wrap_indent;
c906108c
SS
1247
1248/* Column number on the screen where wrap_buffer begins, or 0 if wrapping
1249 is not in effect. */
1250static int wrap_column;
a0087920
TT
1251
1252/* The style applied at the time that wrap_here was called. */
1253static ui_file_style wrap_style;
c906108c 1254\f
c5aa993b 1255
26c4b26f 1256/* Initialize the number of lines per page and chars per line. */
eb0d3137 1257
c906108c 1258void
fba45db2 1259init_page_info (void)
c906108c 1260{
5da1313b
JK
1261 if (batch_flag)
1262 {
1263 lines_per_page = UINT_MAX;
1264 chars_per_line = UINT_MAX;
1265 }
1266 else
c906108c 1267#if defined(TUI)
5ecb1806 1268 if (!tui_get_command_dimension (&chars_per_line, &lines_per_page))
c906108c
SS
1269#endif
1270 {
eb0d3137 1271 int rows, cols;
c906108c 1272
ec145965
EZ
1273#if defined(__GO32__)
1274 rows = ScreenRows ();
1275 cols = ScreenCols ();
1276 lines_per_page = rows;
1277 chars_per_line = cols;
1278#else
eb0d3137
MK
1279 /* Make sure Readline has initialized its terminal settings. */
1280 rl_reset_terminal (NULL);
c906108c 1281
eb0d3137
MK
1282 /* Get the screen size from Readline. */
1283 rl_get_screen_size (&rows, &cols);
1284 lines_per_page = rows;
1285 chars_per_line = cols;
c906108c 1286
1a66331e 1287 /* Readline should have fetched the termcap entry for us.
dda83cd7
SM
1288 Only try to use tgetnum function if rl_get_screen_size
1289 did not return a useful value. */
a121b7c1 1290 if (((rows <= 0) && (tgetnum ((char *) "li") < 0))
e681cf3f
EZ
1291 /* Also disable paging if inside Emacs. $EMACS was used
1292 before Emacs v25.1, $INSIDE_EMACS is used since then. */
1293 || getenv ("EMACS") || getenv ("INSIDE_EMACS"))
eb0d3137 1294 {
1a66331e 1295 /* The number of lines per page is not mentioned in the terminal
30baf67b 1296 description or EMACS environment variable is set. This probably
1a66331e 1297 means that paging is not useful, so disable paging. */
eb0d3137
MK
1298 lines_per_page = UINT_MAX;
1299 }
c906108c 1300
c906108c 1301 /* If the output is not a terminal, don't paginate it. */
da5bd37e 1302 if (!gdb_stdout->isatty ())
c5aa993b 1303 lines_per_page = UINT_MAX;
eb0d3137 1304#endif
ec145965 1305 }
eb0d3137 1306
24b73f8e
PP
1307 /* We handle SIGWINCH ourselves. */
1308 rl_catch_sigwinch = 0;
1309
eb0d3137 1310 set_screen_size ();
c5aa993b 1311 set_width ();
c906108c
SS
1312}
1313
2437fd32
GB
1314/* Return nonzero if filtered printing is initialized. */
1315int
1316filtered_printing_initialized (void)
1317{
c5603d50 1318 return filter_initialized;
2437fd32
GB
1319}
1320
b95de2b7
TT
1321set_batch_flag_and_restore_page_info::set_batch_flag_and_restore_page_info ()
1322 : m_save_lines_per_page (lines_per_page),
1323 m_save_chars_per_line (chars_per_line),
1324 m_save_batch_flag (batch_flag)
5da1313b 1325{
b95de2b7
TT
1326 batch_flag = 1;
1327 init_page_info ();
5da1313b
JK
1328}
1329
b95de2b7 1330set_batch_flag_and_restore_page_info::~set_batch_flag_and_restore_page_info ()
5da1313b 1331{
b95de2b7
TT
1332 batch_flag = m_save_batch_flag;
1333 chars_per_line = m_save_chars_per_line;
1334 lines_per_page = m_save_lines_per_page;
5da1313b 1335
b95de2b7
TT
1336 set_screen_size ();
1337 set_width ();
5da1313b
JK
1338}
1339
eb0d3137
MK
1340/* Set the screen size based on LINES_PER_PAGE and CHARS_PER_LINE. */
1341
1342static void
1343set_screen_size (void)
1344{
1345 int rows = lines_per_page;
1346 int cols = chars_per_line;
1347
23031e31
SJ
1348 /* If we get 0 or negative ROWS or COLS, treat as "infinite" size.
1349 A negative number can be seen here with the "set width/height"
1350 commands and either:
eb0d3137 1351
23031e31 1352 - the user specified "unlimited", which maps to UINT_MAX, or
85102364 1353 - the user specified some number between INT_MAX and UINT_MAX.
23031e31
SJ
1354
1355 Cap "infinity" to approximately sqrt(INT_MAX) so that we don't
1356 overflow in rl_set_screen_size, which multiplies rows and columns
1357 to compute the number of characters on the screen. */
1358
1359 const int sqrt_int_max = INT_MAX >> (sizeof (int) * 8 / 2);
1360
1361 if (rows <= 0 || rows > sqrt_int_max)
8ed25214
PA
1362 {
1363 rows = sqrt_int_max;
1364 lines_per_page = UINT_MAX;
1365 }
23031e31
SJ
1366
1367 if (cols <= 0 || cols > sqrt_int_max)
8ed25214
PA
1368 {
1369 cols = sqrt_int_max;
1370 chars_per_line = UINT_MAX;
1371 }
eb0d3137
MK
1372
1373 /* Update Readline's idea of the terminal size. */
1374 rl_set_screen_size (rows, cols);
1375}
1376
c5603d50 1377/* Reinitialize WRAP_BUFFER. */
eb0d3137 1378
c906108c 1379static void
fba45db2 1380set_width (void)
c906108c
SS
1381{
1382 if (chars_per_line == 0)
c5aa993b 1383 init_page_info ();
c906108c 1384
c5603d50
TT
1385 wrap_buffer.clear ();
1386 filter_initialized = true;
c906108c
SS
1387}
1388
c5aa993b 1389static void
eb4c3f4a 1390set_width_command (const char *args, int from_tty, struct cmd_list_element *c)
c906108c 1391{
eb0d3137 1392 set_screen_size ();
c906108c
SS
1393 set_width ();
1394}
1395
eb0d3137 1396static void
eb4c3f4a 1397set_height_command (const char *args, int from_tty, struct cmd_list_element *c)
eb0d3137
MK
1398{
1399 set_screen_size ();
1400}
1401
d6e5e7f7
PP
1402/* See utils.h. */
1403
1404void
1405set_screen_width_and_height (int width, int height)
1406{
1407 lines_per_page = height;
1408 chars_per_line = width;
1409
1410 set_screen_size ();
1411 set_width ();
1412}
1413
cbe56571
TT
1414/* The currently applied style. */
1415
1416static ui_file_style applied_style;
1417
a0087920
TT
1418/* Emit an ANSI style escape for STYLE. If STREAM is nullptr, emit to
1419 the wrap buffer; otherwise emit to STREAM. */
cbe56571
TT
1420
1421static void
a0087920
TT
1422emit_style_escape (const ui_file_style &style,
1423 struct ui_file *stream = nullptr)
cbe56571 1424{
e7b43072
AB
1425 if (applied_style != style)
1426 {
1427 applied_style = style;
cbe56571 1428
e7b43072
AB
1429 if (stream == nullptr)
1430 wrap_buffer.append (style.to_ansi ());
1431 else
1432 stream->puts (style.to_ansi ().c_str ());
1433 }
cbe56571
TT
1434}
1435
ef1dfa36
TT
1436/* Set the current output style. This will affect future uses of the
1437 _filtered output functions. */
1438
1439static void
1440set_output_style (struct ui_file *stream, const ui_file_style &style)
1441{
8a522c6c 1442 if (!stream->can_emit_style_escape ())
cbe56571
TT
1443 return;
1444
046bebe1 1445 /* Note that we may not pass STREAM here, when we want to emit to
a0087920 1446 the wrap buffer, not directly to STREAM. */
046bebe1
TT
1447 if (stream == gdb_stdout)
1448 stream = nullptr;
1449 emit_style_escape (style, stream);
cbe56571
TT
1450}
1451
ef1dfa36
TT
1452/* See utils.h. */
1453
1454void
1455reset_terminal_style (struct ui_file *stream)
1456{
8a522c6c 1457 if (stream->can_emit_style_escape ())
ef1dfa36
TT
1458 {
1459 /* Force the setting, regardless of what we think the setting
1460 might already be. */
a0087920
TT
1461 applied_style = ui_file_style ();
1462 wrap_buffer.append (applied_style.to_ansi ());
ef1dfa36
TT
1463 }
1464}
1465
c906108c 1466/* Wait, so the user can read what's on the screen. Prompt the user
720d2e96
PA
1467 to continue by pressing RETURN. 'q' is also provided because
1468 telling users what to do in the prompt is more user-friendly than
1469 expecting them to think of Ctrl-C/SIGINT. */
c906108c
SS
1470
1471static void
fba45db2 1472prompt_for_continue (void)
c906108c 1473{
c906108c 1474 char cont_prompt[120];
260c0b2a
DE
1475 /* Used to add duration we waited for user to respond to
1476 prompt_for_continue_wait_time. */
dcb07cfa
PA
1477 using namespace std::chrono;
1478 steady_clock::time_point prompt_started = steady_clock::now ();
eb6af809 1479 bool disable_pagination = pagination_disabled_for_command;
c906108c 1480
cbe56571 1481 /* Clear the current styling. */
8a522c6c 1482 if (gdb_stdout->can_emit_style_escape ())
a0087920 1483 emit_style_escape (ui_file_style (), gdb_stdout);
cbe56571 1484
c906108c 1485 if (annotation_level > 1)
a3f17187 1486 printf_unfiltered (("\n\032\032pre-prompt-for-continue\n"));
c906108c
SS
1487
1488 strcpy (cont_prompt,
eb6af809
TT
1489 "--Type <RET> for more, q to quit, "
1490 "c to continue without paging--");
c906108c
SS
1491 if (annotation_level > 1)
1492 strcat (cont_prompt, "\n\032\032prompt-for-continue\n");
1493
720d2e96
PA
1494 /* We must do this *before* we call gdb_readline_wrapper, else it
1495 will eventually call us -- thinking that we're trying to print
1496 beyond the end of the screen. */
c906108c
SS
1497 reinitialize_more_filter ();
1498
223ffa71 1499 scoped_input_handler prepare_input;
82584158 1500
720d2e96
PA
1501 /* Call gdb_readline_wrapper, not readline, in order to keep an
1502 event loop running. */
5aa89276 1503 gdb::unique_xmalloc_ptr<char> ignore (gdb_readline_wrapper (cont_prompt));
c906108c 1504
260c0b2a 1505 /* Add time spend in this routine to prompt_for_continue_wait_time. */
dcb07cfa 1506 prompt_for_continue_wait_time += steady_clock::now () - prompt_started;
260c0b2a 1507
c906108c 1508 if (annotation_level > 1)
a3f17187 1509 printf_unfiltered (("\n\032\032post-prompt-for-continue\n"));
c906108c 1510
80dbc9fd 1511 if (ignore != NULL)
c906108c 1512 {
5aa89276 1513 char *p = ignore.get ();
5d502164 1514
c906108c
SS
1515 while (*p == ' ' || *p == '\t')
1516 ++p;
1517 if (p[0] == 'q')
1690b616
SL
1518 /* Do not call quit here; there is no possibility of SIGINT. */
1519 throw_quit ("Quit");
eb6af809
TT
1520 if (p[0] == 'c')
1521 disable_pagination = true;
c906108c 1522 }
c906108c
SS
1523
1524 /* Now we have to do this again, so that GDB will know that it doesn't
1525 need to save the ---Type <return>--- line at the top of the screen. */
1526 reinitialize_more_filter ();
eb6af809 1527 pagination_disabled_for_command = disable_pagination;
c906108c 1528
581e13c1 1529 dont_repeat (); /* Forget prev cmd -- CR won't repeat it. */
c906108c
SS
1530}
1531
26c4b26f 1532/* Initialize timer to keep track of how long we waited for the user. */
bd712aed
DE
1533
1534void
1535reset_prompt_for_continue_wait_time (void)
1536{
dcb07cfa 1537 using namespace std::chrono;
bd712aed 1538
dcb07cfa 1539 prompt_for_continue_wait_time = steady_clock::duration::zero ();
bd712aed
DE
1540}
1541
1542/* Fetch the cumulative time spent in prompt_for_continue. */
1543
dcb07cfa
PA
1544std::chrono::steady_clock::duration
1545get_prompt_for_continue_wait_time ()
bd712aed
DE
1546{
1547 return prompt_for_continue_wait_time;
1548}
1549
c906108c
SS
1550/* Reinitialize filter; ie. tell it to reset to original values. */
1551
1552void
fba45db2 1553reinitialize_more_filter (void)
c906108c
SS
1554{
1555 lines_printed = 0;
1556 chars_printed = 0;
eb6af809 1557 pagination_disabled_for_command = false;
c906108c
SS
1558}
1559
c5603d50
TT
1560/* Flush the wrap buffer to STREAM, if necessary. */
1561
1562static void
1563flush_wrap_buffer (struct ui_file *stream)
1564{
a0087920 1565 if (stream == gdb_stdout && !wrap_buffer.empty ())
c5603d50 1566 {
da5bd37e 1567 stream->puts (wrap_buffer.c_str ());
c5603d50
TT
1568 wrap_buffer.clear ();
1569 }
1570}
1571
faa17681
IB
1572/* See utils.h. */
1573
1574void
1575gdb_flush (struct ui_file *stream)
1576{
1577 flush_wrap_buffer (stream);
da5bd37e 1578 stream->flush ();
faa17681
IB
1579}
1580
2f228731
TT
1581/* See utils.h. */
1582
1583int
1584get_chars_per_line ()
1585{
1586 return chars_per_line;
1587}
1588
c906108c 1589/* Indicate that if the next sequence of characters overflows the line,
581e13c1 1590 a newline should be inserted here rather than when it hits the end.
c906108c
SS
1591 If INDENT is non-null, it is a string to be printed to indent the
1592 wrapped part on the next line. INDENT must remain accessible until
1593 the next call to wrap_here() or until a newline is printed through
1594 fputs_filtered().
1595
1596 If the line is already overfull, we immediately print a newline and
1597 the indentation, and disable further wrapping.
1598
1599 If we don't know the width of lines, but we know the page height,
1600 we must not wrap words, but should still keep track of newlines
1601 that were explicitly printed.
1602
1603 INDENT should not contain tabs, as that will mess up the char count
1604 on the next line. FIXME.
1605
1606 This routine is guaranteed to force out any output which has been
1607 squirreled away in the wrap_buffer, so wrap_here ((char *)0) can be
1608 used to force out output from the wrap_buffer. */
1609
1610void
d2c0eef4 1611wrap_here (const char *indent)
c906108c 1612{
581e13c1 1613 /* This should have been allocated, but be paranoid anyway. */
e2ff18a0 1614 gdb_assert (filter_initialized);
c906108c 1615
c5603d50 1616 flush_wrap_buffer (gdb_stdout);
3e43a32a 1617 if (chars_per_line == UINT_MAX) /* No line overflow checking. */
c906108c
SS
1618 {
1619 wrap_column = 0;
1620 }
1621 else if (chars_printed >= chars_per_line)
1622 {
1623 puts_filtered ("\n");
1624 if (indent != NULL)
1625 puts_filtered (indent);
1626 wrap_column = 0;
1627 }
1628 else
1629 {
1630 wrap_column = chars_printed;
1631 if (indent == NULL)
1632 wrap_indent = "";
1633 else
1634 wrap_indent = indent;
a0087920 1635 wrap_style = applied_style;
c906108c
SS
1636 }
1637}
1638
4a351cef 1639/* Print input string to gdb_stdout, filtered, with wrap,
581e13c1 1640 arranging strings in columns of n chars. String can be
4a351cef
AF
1641 right or left justified in the column. Never prints
1642 trailing spaces. String should never be longer than
1643 width. FIXME: this could be useful for the EXAMINE
581e13c1 1644 command, which currently doesn't tabulate very well. */
4a351cef
AF
1645
1646void
1647puts_filtered_tabular (char *string, int width, int right)
1648{
1649 int spaces = 0;
1650 int stringlen;
1651 char *spacebuf;
1652
1653 gdb_assert (chars_per_line > 0);
1654 if (chars_per_line == UINT_MAX)
1655 {
1656 fputs_filtered (string, gdb_stdout);
1657 fputs_filtered ("\n", gdb_stdout);
1658 return;
1659 }
1660
1661 if (((chars_printed - 1) / width + 2) * width >= chars_per_line)
1662 fputs_filtered ("\n", gdb_stdout);
1663
1664 if (width >= chars_per_line)
1665 width = chars_per_line - 1;
1666
1667 stringlen = strlen (string);
1668
1669 if (chars_printed > 0)
1670 spaces = width - (chars_printed - 1) % width - 1;
1671 if (right)
1672 spaces += width - stringlen;
1673
224c3ddb 1674 spacebuf = (char *) alloca (spaces + 1);
4a351cef
AF
1675 spacebuf[spaces] = '\0';
1676 while (spaces--)
1677 spacebuf[spaces] = ' ';
1678
1679 fputs_filtered (spacebuf, gdb_stdout);
1680 fputs_filtered (string, gdb_stdout);
1681}
1682
1683
c906108c 1684/* Ensure that whatever gets printed next, using the filtered output
581e13c1 1685 commands, starts at the beginning of the line. I.e. if there is
c906108c 1686 any pending output for the current line, flush it and start a new
581e13c1 1687 line. Otherwise do nothing. */
c906108c
SS
1688
1689void
fba45db2 1690begin_line (void)
c906108c
SS
1691{
1692 if (chars_printed > 0)
1693 {
1694 puts_filtered ("\n");
1695 }
1696}
1697
ac9a91a7 1698
c906108c
SS
1699/* Like fputs but if FILTER is true, pause after every screenful.
1700
1701 Regardless of FILTER can wrap at points other than the final
1702 character of a line.
1703
1704 Unlike fputs, fputs_maybe_filtered does not return a value.
1705 It is OK for LINEBUFFER to be NULL, in which case just don't print
1706 anything.
1707
1708 Note that a longjmp to top level may occur in this routine (only if
1709 FILTER is true) (since prompt_for_continue may do so) so this
1710 routine should not be called when cleanups are not in place. */
1711
1712static void
fba45db2
KB
1713fputs_maybe_filtered (const char *linebuffer, struct ui_file *stream,
1714 int filter)
c906108c
SS
1715{
1716 const char *lineptr;
1717
1718 if (linebuffer == 0)
1719 return;
1720
1721 /* Don't do any filtering if it is disabled. */
390a8aca 1722 if (stream != gdb_stdout
b2e7f004 1723 || !pagination_enabled
eb6af809 1724 || pagination_disabled_for_command
b2e7f004 1725 || batch_flag
390a8aca 1726 || (lines_per_page == UINT_MAX && chars_per_line == UINT_MAX)
58dadb1b 1727 || top_level_interpreter () == NULL
29f94340 1728 || top_level_interpreter ()->interp_ui_out ()->is_mi_like_p ())
c906108c 1729 {
c5603d50 1730 flush_wrap_buffer (stream);
da5bd37e 1731 stream->puts (linebuffer);
c906108c
SS
1732 return;
1733 }
1734
a0087920
TT
1735 auto buffer_clearer
1736 = make_scope_exit ([&] ()
1737 {
1738 wrap_buffer.clear ();
1739 wrap_column = 0;
1740 wrap_indent = "";
1741 });
1742
c906108c
SS
1743 /* Go through and output each character. Show line extension
1744 when this is necessary; prompt user for new page when this is
1745 necessary. */
c5aa993b 1746
c906108c
SS
1747 lineptr = linebuffer;
1748 while (*lineptr)
1749 {
eb6af809
TT
1750 /* Possible new page. Note that PAGINATION_DISABLED_FOR_COMMAND
1751 might be set during this loop, so we must continue to check
1752 it here. */
1753 if (filter && (lines_printed >= lines_per_page - 1)
1754 && !pagination_disabled_for_command)
c906108c
SS
1755 prompt_for_continue ();
1756
1757 while (*lineptr && *lineptr != '\n')
1758 {
a0087920
TT
1759 int skip_bytes;
1760
c906108c
SS
1761 /* Print a single line. */
1762 if (*lineptr == '\t')
1763 {
c5603d50 1764 wrap_buffer.push_back ('\t');
c906108c 1765 /* Shifting right by 3 produces the number of tab stops
dda83cd7
SM
1766 we have already passed, and then adding one and
1767 shifting left 3 advances to the next tab stop. */
c906108c
SS
1768 chars_printed = ((chars_printed >> 3) + 1) << 3;
1769 lineptr++;
1770 }
a0087920
TT
1771 else if (*lineptr == '\033'
1772 && skip_ansi_escape (lineptr, &skip_bytes))
1773 {
1774 wrap_buffer.append (lineptr, skip_bytes);
1775 /* Note that we don't consider this a character, so we
1776 don't increment chars_printed here. */
1777 lineptr += skip_bytes;
1778 }
2f228731
TT
1779 else if (*lineptr == '\r')
1780 {
1781 wrap_buffer.push_back (*lineptr);
1782 chars_printed = 0;
1783 lineptr++;
1784 }
c906108c
SS
1785 else
1786 {
c5603d50 1787 wrap_buffer.push_back (*lineptr);
c906108c
SS
1788 chars_printed++;
1789 lineptr++;
1790 }
c5aa993b 1791
c906108c
SS
1792 if (chars_printed >= chars_per_line)
1793 {
1794 unsigned int save_chars = chars_printed;
1795
99f20f08
TT
1796 /* If we change the style, below, we'll want to reset it
1797 before continuing to print. If there is no wrap
1798 column, then we'll only reset the style if the pager
1799 prompt is given; and to avoid emitting style
1800 sequences in the middle of a run of text, we track
1801 this as well. */
e7b43072 1802 ui_file_style save_style = applied_style;
99f20f08
TT
1803 bool did_paginate = false;
1804
c906108c
SS
1805 chars_printed = 0;
1806 lines_printed++;
c906108c 1807 if (wrap_column)
cbe56571 1808 {
e7b43072
AB
1809 /* We are about to insert a newline at an historic
1810 location in the WRAP_BUFFER. Before we do we want to
1811 restore the default style. To know if we actually
1812 need to insert an escape sequence we must restore the
1813 current applied style to how it was at the WRAP_COLUMN
1814 location. */
1815 applied_style = wrap_style;
8a522c6c 1816 if (stream->can_emit_style_escape ())
a0087920
TT
1817 emit_style_escape (ui_file_style (), stream);
1818 /* If we aren't actually wrapping, don't output
1819 newline -- if chars_per_line is right, we
1820 probably just overflowed anyway; if it's wrong,
1821 let us keep going. */
3f702acd
SDJ
1822 /* XXX: The ideal thing would be to call
1823 'stream->putc' here, but we can't because it
1824 currently calls 'fputc_unfiltered', which ends up
1825 calling us, which generates an infinite
1826 recursion. */
1827 stream->puts ("\n");
cbe56571 1828 }
a0087920 1829 else
e7b43072 1830 flush_wrap_buffer (stream);
c906108c 1831
eb6af809
TT
1832 /* Possible new page. Note that
1833 PAGINATION_DISABLED_FOR_COMMAND might be set during
1834 this loop, so we must continue to check it here. */
1835 if (lines_printed >= lines_per_page - 1
1836 && !pagination_disabled_for_command)
99f20f08
TT
1837 {
1838 prompt_for_continue ();
1839 did_paginate = true;
1840 }
c906108c 1841
581e13c1 1842 /* Now output indentation and wrapped string. */
c906108c
SS
1843 if (wrap_column)
1844 {
da5bd37e 1845 stream->puts (wrap_indent);
e7b43072
AB
1846
1847 /* Having finished inserting the wrapping we should
1848 restore the style as it was at the WRAP_COLUMN. */
8a522c6c 1849 if (stream->can_emit_style_escape ())
e7b43072
AB
1850 emit_style_escape (wrap_style, stream);
1851
1852 /* The WRAP_BUFFER will still contain content, and that
1853 content might set some alternative style. Restore
1854 APPLIED_STYLE as it was before we started wrapping,
1855 this reflects the current style for the last character
1856 in WRAP_BUFFER. */
1857 applied_style = save_style;
1858
c906108c
SS
1859 /* FIXME, this strlen is what prevents wrap_indent from
1860 containing tabs. However, if we recurse to print it
1861 and count its chars, we risk trouble if wrap_indent is
581e13c1 1862 longer than (the user settable) chars_per_line.
c906108c
SS
1863 Note also that this can set chars_printed > chars_per_line
1864 if we are printing a long string. */
1865 chars_printed = strlen (wrap_indent)
c5aa993b 1866 + (save_chars - wrap_column);
c5aa993b
JM
1867 wrap_column = 0; /* And disable fancy wrap */
1868 }
ca1df239 1869 else if (did_paginate && stream->can_emit_style_escape ())
99f20f08 1870 emit_style_escape (save_style, stream);
c906108c
SS
1871 }
1872 }
1873
1874 if (*lineptr == '\n')
1875 {
1876 chars_printed = 0;
3e43a32a
MS
1877 wrap_here ((char *) 0); /* Spit out chars, cancel
1878 further wraps. */
c906108c 1879 lines_printed++;
3f702acd
SDJ
1880 /* XXX: The ideal thing would be to call
1881 'stream->putc' here, but we can't because it
1882 currently calls 'fputc_unfiltered', which ends up
1883 calling us, which generates an infinite
1884 recursion. */
1885 stream->puts ("\n");
c906108c
SS
1886 lineptr++;
1887 }
1888 }
a0087920
TT
1889
1890 buffer_clearer.release ();
c906108c
SS
1891}
1892
1893void
fba45db2 1894fputs_filtered (const char *linebuffer, struct ui_file *stream)
c906108c
SS
1895{
1896 fputs_maybe_filtered (linebuffer, stream, 1);
1897}
1898
dfcb27e4
IB
1899void
1900fputs_unfiltered (const char *linebuffer, struct ui_file *stream)
1901{
1902 fputs_maybe_filtered (linebuffer, stream, 0);
1903}
1904
cbe56571
TT
1905/* See utils.h. */
1906
1907void
1908fputs_styled (const char *linebuffer, const ui_file_style &style,
1909 struct ui_file *stream)
1910{
e7b43072
AB
1911 set_output_style (stream, style);
1912 fputs_maybe_filtered (linebuffer, stream, 1);
1913 set_output_style (stream, ui_file_style ());
cbe56571
TT
1914}
1915
9303eb2f
PW
1916/* See utils.h. */
1917
2a3c1174
PA
1918void
1919fputs_styled_unfiltered (const char *linebuffer, const ui_file_style &style,
1920 struct ui_file *stream)
1921{
e7b43072
AB
1922 set_output_style (stream, style);
1923 fputs_maybe_filtered (linebuffer, stream, 0);
1924 set_output_style (stream, ui_file_style ());
2a3c1174
PA
1925}
1926
1927/* See utils.h. */
1928
9303eb2f
PW
1929void
1930fputs_highlighted (const char *str, const compiled_regex &highlight,
1931 struct ui_file *stream)
1932{
1933 regmatch_t pmatch;
1934
1935 while (*str && highlight.exec (str, 1, &pmatch, 0) == 0)
1936 {
1937 size_t n_highlight = pmatch.rm_eo - pmatch.rm_so;
1938
1939 /* Output the part before pmatch with current style. */
1940 while (pmatch.rm_so > 0)
1941 {
1942 fputc_filtered (*str, stream);
1943 pmatch.rm_so--;
1944 str++;
1945 }
1946
1947 /* Output pmatch with the highlight style. */
1948 set_output_style (stream, highlight_style.style ());
1949 while (n_highlight > 0)
1950 {
1951 fputc_filtered (*str, stream);
1952 n_highlight--;
1953 str++;
1954 }
1955 set_output_style (stream, ui_file_style ());
1956 }
1957
1958 /* Output the trailing part of STR not matching HIGHLIGHT. */
1959 if (*str)
1960 fputs_filtered (str, stream);
1961}
1962
c906108c 1963int
fba45db2 1964putchar_unfiltered (int c)
c906108c 1965{
3f702acd 1966 return fputc_unfiltered (c, gdb_stdout);
c906108c
SS
1967}
1968
d1f4cff8
AC
1969/* Write character C to gdb_stdout using GDB's paging mechanism and return C.
1970 May return nonlocally. */
1971
1972int
1973putchar_filtered (int c)
1974{
1975 return fputc_filtered (c, gdb_stdout);
1976}
1977
c906108c 1978int
fba45db2 1979fputc_unfiltered (int c, struct ui_file *stream)
c906108c 1980{
3f702acd 1981 char buf[2];
e0627e85 1982
3f702acd
SDJ
1983 buf[0] = c;
1984 buf[1] = 0;
1985 fputs_unfiltered (buf, stream);
c906108c
SS
1986 return c;
1987}
1988
1989int
fba45db2 1990fputc_filtered (int c, struct ui_file *stream)
c906108c
SS
1991{
1992 char buf[2];
1993
1994 buf[0] = c;
1995 buf[1] = 0;
1996 fputs_filtered (buf, stream);
1997 return c;
1998}
1999
2000/* puts_debug is like fputs_unfiltered, except it prints special
2001 characters in printable fashion. */
2002
2003void
fba45db2 2004puts_debug (char *prefix, char *string, char *suffix)
c906108c
SS
2005{
2006 int ch;
2007
2008 /* Print prefix and suffix after each line. */
2009 static int new_line = 1;
2010 static int return_p = 0;
a121b7c1
PA
2011 static const char *prev_prefix = "";
2012 static const char *prev_suffix = "";
c906108c
SS
2013
2014 if (*string == '\n')
2015 return_p = 0;
2016
2017 /* If the prefix is changing, print the previous suffix, a new line,
2018 and the new prefix. */
c5aa993b 2019 if ((return_p || (strcmp (prev_prefix, prefix) != 0)) && !new_line)
c906108c 2020 {
9846de1b
JM
2021 fputs_unfiltered (prev_suffix, gdb_stdlog);
2022 fputs_unfiltered ("\n", gdb_stdlog);
2023 fputs_unfiltered (prefix, gdb_stdlog);
c906108c
SS
2024 }
2025
2026 /* Print prefix if we printed a newline during the previous call. */
2027 if (new_line)
2028 {
2029 new_line = 0;
9846de1b 2030 fputs_unfiltered (prefix, gdb_stdlog);
c906108c
SS
2031 }
2032
2033 prev_prefix = prefix;
2034 prev_suffix = suffix;
2035
2036 /* Output characters in a printable format. */
2037 while ((ch = *string++) != '\0')
2038 {
2039 switch (ch)
c5aa993b 2040 {
c906108c 2041 default:
51e2cfa2 2042 if (gdb_isprint (ch))
9846de1b 2043 fputc_unfiltered (ch, gdb_stdlog);
c906108c
SS
2044
2045 else
9846de1b 2046 fprintf_unfiltered (gdb_stdlog, "\\x%02x", ch & 0xff);
c906108c
SS
2047 break;
2048
c5aa993b
JM
2049 case '\\':
2050 fputs_unfiltered ("\\\\", gdb_stdlog);
2051 break;
2052 case '\b':
2053 fputs_unfiltered ("\\b", gdb_stdlog);
2054 break;
2055 case '\f':
2056 fputs_unfiltered ("\\f", gdb_stdlog);
2057 break;
2058 case '\n':
2059 new_line = 1;
2060 fputs_unfiltered ("\\n", gdb_stdlog);
2061 break;
2062 case '\r':
2063 fputs_unfiltered ("\\r", gdb_stdlog);
2064 break;
2065 case '\t':
2066 fputs_unfiltered ("\\t", gdb_stdlog);
2067 break;
2068 case '\v':
2069 fputs_unfiltered ("\\v", gdb_stdlog);
2070 break;
2071 }
c906108c
SS
2072
2073 return_p = ch == '\r';
2074 }
2075
2076 /* Print suffix if we printed a newline. */
2077 if (new_line)
2078 {
9846de1b
JM
2079 fputs_unfiltered (suffix, gdb_stdlog);
2080 fputs_unfiltered ("\n", gdb_stdlog);
c906108c
SS
2081 }
2082}
2083
2084
2085/* Print a variable number of ARGS using format FORMAT. If this
2086 information is going to put the amount written (since the last call
2087 to REINITIALIZE_MORE_FILTER or the last page break) over the page size,
85102364 2088 call prompt_for_continue to get the users permission to continue.
c906108c
SS
2089
2090 Unlike fprintf, this function does not return a value.
2091
2092 We implement three variants, vfprintf (takes a vararg list and stream),
2093 fprintf (takes a stream to write on), and printf (the usual).
2094
2a3c1174
PA
2095 Note also that this may throw a quit (since prompt_for_continue may
2096 do so). */
c906108c
SS
2097
2098static void
fba45db2 2099vfprintf_maybe_filtered (struct ui_file *stream, const char *format,
2a3c1174 2100 va_list args, bool filter, bool gdbfmt)
c906108c 2101{
2a3c1174
PA
2102 if (gdbfmt)
2103 {
2104 ui_out_flags flags = disallow_ui_out_field;
2105 if (!filter)
2106 flags |= unfiltered_output;
2107 cli_ui_out (stream, flags).vmessage (applied_style, format, args);
2108 }
2109 else
2110 {
2111 std::string str = string_vprintf (format, args);
2112 fputs_maybe_filtered (str.c_str (), stream, filter);
2113 }
c906108c
SS
2114}
2115
2116
2117void
fba45db2 2118vfprintf_filtered (struct ui_file *stream, const char *format, va_list args)
c906108c 2119{
2a3c1174 2120 vfprintf_maybe_filtered (stream, format, args, true, true);
c906108c
SS
2121}
2122
2123void
fba45db2 2124vfprintf_unfiltered (struct ui_file *stream, const char *format, va_list args)
c906108c 2125{
75feb17d
DJ
2126 if (debug_timestamp && stream == gdb_stdlog)
2127 {
335709bc 2128 static bool needs_timestamp = true;
75feb17d 2129
335709bc
SM
2130 /* Print timestamp if previous print ended with a \n. */
2131 if (needs_timestamp)
2132 {
2133 using namespace std::chrono;
2134
2135 steady_clock::time_point now = steady_clock::now ();
2136 seconds s = duration_cast<seconds> (now.time_since_epoch ());
2137 microseconds us = duration_cast<microseconds> (now.time_since_epoch () - s);
2138 std::string timestamp = string_printf ("%ld.%06ld ",
2139 (long) s.count (),
2140 (long) us.count ());
2141 fputs_unfiltered (timestamp.c_str (), stream);
2142 }
2143
2144 /* Print the message. */
2a3c1174
PA
2145 string_file sfile;
2146 cli_ui_out (&sfile, 0).vmessage (ui_file_style (), format, args);
2147 std::string linebuffer = std::move (sfile.string ());
335709bc 2148 fputs_unfiltered (linebuffer.c_str (), stream);
2a3c1174 2149
335709bc
SM
2150 size_t len = linebuffer.length ();
2151 needs_timestamp = (len > 0 && linebuffer[len - 1] == '\n');
75feb17d 2152 }
6e5abd65 2153 else
2a3c1174 2154 vfprintf_maybe_filtered (stream, format, args, false, true);
c906108c
SS
2155}
2156
2157void
fba45db2 2158vprintf_filtered (const char *format, va_list args)
c906108c 2159{
2a3c1174 2160 vfprintf_maybe_filtered (gdb_stdout, format, args, true, false);
c906108c
SS
2161}
2162
2163void
fba45db2 2164vprintf_unfiltered (const char *format, va_list args)
c906108c
SS
2165{
2166 vfprintf_unfiltered (gdb_stdout, format, args);
2167}
2168
c906108c 2169void
8731e58e 2170fprintf_filtered (struct ui_file *stream, const char *format, ...)
c906108c
SS
2171{
2172 va_list args;
e0627e85 2173
c906108c 2174 va_start (args, format);
c906108c
SS
2175 vfprintf_filtered (stream, format, args);
2176 va_end (args);
2177}
2178
c906108c 2179void
8731e58e 2180fprintf_unfiltered (struct ui_file *stream, const char *format, ...)
c906108c
SS
2181{
2182 va_list args;
e0627e85 2183
c906108c 2184 va_start (args, format);
c906108c
SS
2185 vfprintf_unfiltered (stream, format, args);
2186 va_end (args);
2187}
2188
cbe56571
TT
2189/* See utils.h. */
2190
2191void
2192fprintf_styled (struct ui_file *stream, const ui_file_style &style,
2193 const char *format, ...)
2194{
2195 va_list args;
2196
2197 set_output_style (stream, style);
2198 va_start (args, format);
2199 vfprintf_filtered (stream, format, args);
2200 va_end (args);
2201 set_output_style (stream, ui_file_style ());
2202}
2203
2a3c1174
PA
2204/* See utils.h. */
2205
2206void
2207vfprintf_styled (struct ui_file *stream, const ui_file_style &style,
2208 const char *format, va_list args)
2209{
2210 set_output_style (stream, style);
2211 vfprintf_filtered (stream, format, args);
2212 set_output_style (stream, ui_file_style ());
2213}
2214
2215/* See utils.h. */
2216
2217void
2218vfprintf_styled_no_gdbfmt (struct ui_file *stream, const ui_file_style &style,
2219 bool filter, const char *format, va_list args)
2220{
2221 std::string str = string_vprintf (format, args);
2222 if (!str.empty ())
2223 {
e7b43072 2224 set_output_style (stream, style);
2a3c1174 2225 fputs_maybe_filtered (str.c_str (), stream, filter);
e7b43072 2226 set_output_style (stream, ui_file_style ());
2a3c1174
PA
2227 }
2228}
c906108c 2229
c906108c 2230void
8731e58e 2231printf_filtered (const char *format, ...)
c906108c
SS
2232{
2233 va_list args;
e0627e85 2234
c906108c 2235 va_start (args, format);
c906108c
SS
2236 vfprintf_filtered (gdb_stdout, format, args);
2237 va_end (args);
2238}
2239
2240
c906108c 2241void
8731e58e 2242printf_unfiltered (const char *format, ...)
c906108c
SS
2243{
2244 va_list args;
e0627e85 2245
c906108c 2246 va_start (args, format);
c906108c
SS
2247 vfprintf_unfiltered (gdb_stdout, format, args);
2248 va_end (args);
2249}
2250
c906108c
SS
2251/* Easy -- but watch out!
2252
2253 This routine is *not* a replacement for puts()! puts() appends a newline.
2254 This one doesn't, and had better not! */
2255
2256void
fba45db2 2257puts_filtered (const char *string)
c906108c
SS
2258{
2259 fputs_filtered (string, gdb_stdout);
2260}
2261
2262void
fba45db2 2263puts_unfiltered (const char *string)
c906108c
SS
2264{
2265 fputs_unfiltered (string, gdb_stdout);
2266}
2267
2268/* Return a pointer to N spaces and a null. The pointer is good
2269 until the next call to here. */
2270char *
fba45db2 2271n_spaces (int n)
c906108c 2272{
392a587b
JM
2273 char *t;
2274 static char *spaces = 0;
2275 static int max_spaces = -1;
c906108c
SS
2276
2277 if (n > max_spaces)
2278 {
84d53fa9 2279 xfree (spaces);
c5aa993b
JM
2280 spaces = (char *) xmalloc (n + 1);
2281 for (t = spaces + n; t != spaces;)
c906108c
SS
2282 *--t = ' ';
2283 spaces[n] = '\0';
2284 max_spaces = n;
2285 }
2286
2287 return spaces + max_spaces - n;
2288}
2289
2290/* Print N spaces. */
2291void
fba45db2 2292print_spaces_filtered (int n, struct ui_file *stream)
c906108c
SS
2293{
2294 fputs_filtered (n_spaces (n), stream);
2295}
2296\f
4a351cef 2297/* C++/ObjC demangler stuff. */
c906108c 2298
389e51db
AC
2299/* fprintf_symbol_filtered attempts to demangle NAME, a symbol in language
2300 LANG, using demangling args ARG_MODE, and print it filtered to STREAM.
2301 If the name is not mangled, or the language for the name is unknown, or
581e13c1 2302 demangling is off, the name is printed in its "raw" form. */
c906108c
SS
2303
2304void
0d5cff50 2305fprintf_symbol_filtered (struct ui_file *stream, const char *name,
8731e58e 2306 enum language lang, int arg_mode)
c906108c
SS
2307{
2308 char *demangled;
2309
2310 if (name != NULL)
2311 {
2312 /* If user wants to see raw output, no problem. */
2313 if (!demangle)
2314 {
2315 fputs_filtered (name, stream);
2316 }
2317 else
2318 {
9a3d7dfd 2319 demangled = language_demangle (language_def (lang), name, arg_mode);
c906108c
SS
2320 fputs_filtered (demangled ? demangled : name, stream);
2321 if (demangled != NULL)
2322 {
b8c9b27d 2323 xfree (demangled);
c906108c
SS
2324 }
2325 }
2326 }
2327}
2328
0662b6a7
PA
2329/* True if CH is a character that can be part of a symbol name. I.e.,
2330 either a number, a letter, or a '_'. */
2331
2332static bool
2333valid_identifier_name_char (int ch)
2334{
51e2cfa2 2335 return (ISALNUM (ch) || ch == '_');
0662b6a7
PA
2336}
2337
2338/* Skip to end of token, or to END, whatever comes first. Input is
2339 assumed to be a C++ operator name. */
2340
2341static const char *
2342cp_skip_operator_token (const char *token, const char *end)
2343{
2344 const char *p = token;
51e2cfa2 2345 while (p != end && !ISSPACE (*p) && *p != '(')
0662b6a7
PA
2346 {
2347 if (valid_identifier_name_char (*p))
2348 {
2349 while (p != end && valid_identifier_name_char (*p))
2350 p++;
2351 return p;
2352 }
2353 else
2354 {
2355 /* Note, ordered such that among ops that share a prefix,
2356 longer comes first. This is so that the loop below can
2357 bail on first match. */
2358 static const char *ops[] =
2359 {
2360 "[",
2361 "]",
2362 "~",
2363 ",",
2364 "-=", "--", "->", "-",
2365 "+=", "++", "+",
2366 "*=", "*",
2367 "/=", "/",
2368 "%=", "%",
2369 "|=", "||", "|",
2370 "&=", "&&", "&",
2371 "^=", "^",
2372 "!=", "!",
2373 "<<=", "<=", "<<", "<",
2374 ">>=", ">=", ">>", ">",
2375 "==", "=",
2376 };
2377
2378 for (const char *op : ops)
2379 {
2380 size_t oplen = strlen (op);
2381 size_t lencmp = std::min<size_t> (oplen, end - p);
2382
2383 if (strncmp (p, op, lencmp) == 0)
2384 return p + lencmp;
2385 }
2386 /* Some unidentified character. Return it. */
2387 return p + 1;
2388 }
2389 }
2390
2391 return p;
2392}
2393
2394/* Advance STRING1/STRING2 past whitespace. */
2395
2396static void
2397skip_ws (const char *&string1, const char *&string2, const char *end_str2)
2398{
51e2cfa2 2399 while (ISSPACE (*string1))
0662b6a7 2400 string1++;
51e2cfa2 2401 while (string2 < end_str2 && ISSPACE (*string2))
0662b6a7
PA
2402 string2++;
2403}
2404
2405/* True if STRING points at the start of a C++ operator name. START
2406 is the start of the string that STRING points to, hence when
2407 reading backwards, we must not read any character before START. */
2408
2409static bool
2410cp_is_operator (const char *string, const char *start)
2411{
2412 return ((string == start
2413 || !valid_identifier_name_char (string[-1]))
2414 && strncmp (string, CP_OPERATOR_STR, CP_OPERATOR_LEN) == 0
2415 && !valid_identifier_name_char (string[CP_OPERATOR_LEN]));
2416}
2417
bd69330d
PA
2418/* If *NAME points at an ABI tag, skip it and return true. Otherwise
2419 leave *NAME unmodified and return false. (see GCC's abi_tag
2420 attribute), such names are demangled as e.g.,
2421 "function[abi:cxx11]()". */
2422
2423static bool
2424skip_abi_tag (const char **name)
2425{
2426 const char *p = *name;
2427
2428 if (startswith (p, "[abi:"))
2429 {
2430 p += 5;
2431
2432 while (valid_identifier_name_char (*p))
2433 p++;
2434
2435 if (*p == ']')
2436 {
2437 p++;
2438 *name = p;
2439 return true;
2440 }
2441 }
2442 return false;
2443}
2444
b5ec771e 2445/* See utils.h. */
1d550c82 2446
b5ec771e 2447int
1d550c82 2448strncmp_iw_with_mode (const char *string1, const char *string2,
0662b6a7 2449 size_t string2_len, strncmp_iw_mode mode,
bd69330d
PA
2450 enum language language,
2451 completion_match_for_lcd *match_for_lcd)
c906108c 2452{
0662b6a7 2453 const char *string1_start = string1;
1d550c82 2454 const char *end_str2 = string2 + string2_len;
0662b6a7
PA
2455 bool skip_spaces = true;
2456 bool have_colon_op = (language == language_cplus
2457 || language == language_rust
2458 || language == language_fortran);
1d550c82
PA
2459
2460 while (1)
c906108c 2461 {
0662b6a7 2462 if (skip_spaces
51e2cfa2
PA
2463 || ((ISSPACE (*string1) && !valid_identifier_name_char (*string2))
2464 || (ISSPACE (*string2) && !valid_identifier_name_char (*string1))))
0662b6a7
PA
2465 {
2466 skip_ws (string1, string2, end_str2);
2467 skip_spaces = false;
2468 }
2469
bd69330d
PA
2470 /* Skip [abi:cxx11] tags in the symbol name if the lookup name
2471 doesn't include them. E.g.:
2472
2473 string1: function[abi:cxx1](int)
2474 string2: function
2475
2476 string1: function[abi:cxx1](int)
2477 string2: function(int)
2478
2479 string1: Struct[abi:cxx1]::function()
2480 string2: Struct::function()
2481
2482 string1: function(Struct[abi:cxx1], int)
2483 string2: function(Struct, int)
2484 */
2485 if (string2 == end_str2
2486 || (*string2 != '[' && !valid_identifier_name_char (*string2)))
2487 {
2488 const char *abi_start = string1;
2489
2490 /* There can be more than one tag. */
2491 while (*string1 == '[' && skip_abi_tag (&string1))
2492 ;
2493
2494 if (match_for_lcd != NULL && abi_start != string1)
2495 match_for_lcd->mark_ignored_range (abi_start, string1);
2496
51e2cfa2 2497 while (ISSPACE (*string1))
bd69330d
PA
2498 string1++;
2499 }
2500
1d550c82
PA
2501 if (*string1 == '\0' || string2 == end_str2)
2502 break;
0662b6a7
PA
2503
2504 /* Handle the :: operator. */
2505 if (have_colon_op && string1[0] == ':' && string1[1] == ':')
2506 {
2507 if (*string2 != ':')
2508 return 1;
2509
2510 string1++;
2511 string2++;
2512
2513 if (string2 == end_str2)
2514 break;
2515
2516 if (*string2 != ':')
2517 return 1;
2518
2519 string1++;
2520 string2++;
2521
51e2cfa2 2522 while (ISSPACE (*string1))
0662b6a7 2523 string1++;
51e2cfa2 2524 while (string2 < end_str2 && ISSPACE (*string2))
0662b6a7
PA
2525 string2++;
2526 continue;
2527 }
2528
2529 /* Handle C++ user-defined operators. */
2530 else if (language == language_cplus
2531 && *string1 == 'o')
2532 {
2533 if (cp_is_operator (string1, string1_start))
2534 {
2535 /* An operator name in STRING1. Check STRING2. */
2536 size_t cmplen
2537 = std::min<size_t> (CP_OPERATOR_LEN, end_str2 - string2);
2538 if (strncmp (string1, string2, cmplen) != 0)
2539 return 1;
2540
2541 string1 += cmplen;
2542 string2 += cmplen;
2543
2544 if (string2 != end_str2)
2545 {
2546 /* Check for "operatorX" in STRING2. */
2547 if (valid_identifier_name_char (*string2))
2548 return 1;
2549
2550 skip_ws (string1, string2, end_str2);
2551 }
2552
2553 /* Handle operator(). */
2554 if (*string1 == '(')
2555 {
2556 if (string2 == end_str2)
2557 {
2558 if (mode == strncmp_iw_mode::NORMAL)
2559 return 0;
2560 else
2561 {
2562 /* Don't break for the regular return at the
2563 bottom, because "operator" should not
2564 match "operator()", since this open
2565 parentheses is not the parameter list
2566 start. */
2567 return *string1 != '\0';
2568 }
2569 }
2570
2571 if (*string1 != *string2)
2572 return 1;
2573
2574 string1++;
2575 string2++;
2576 }
2577
2578 while (1)
2579 {
2580 skip_ws (string1, string2, end_str2);
2581
2582 /* Skip to end of token, or to END, whatever comes
2583 first. */
2584 const char *end_str1 = string1 + strlen (string1);
2585 const char *p1 = cp_skip_operator_token (string1, end_str1);
2586 const char *p2 = cp_skip_operator_token (string2, end_str2);
2587
2588 cmplen = std::min (p1 - string1, p2 - string2);
2589 if (p2 == end_str2)
2590 {
2591 if (strncmp (string1, string2, cmplen) != 0)
2592 return 1;
2593 }
2594 else
2595 {
2596 if (p1 - string1 != p2 - string2)
2597 return 1;
2598 if (strncmp (string1, string2, cmplen) != 0)
2599 return 1;
2600 }
2601
2602 string1 += cmplen;
2603 string2 += cmplen;
2604
2605 if (*string1 == '\0' || string2 == end_str2)
2606 break;
2607 if (*string1 == '(' || *string2 == '(')
2608 break;
2609 }
2610
2611 continue;
2612 }
2613 }
2614
559a7a62
JK
2615 if (case_sensitivity == case_sensitive_on && *string1 != *string2)
2616 break;
2617 if (case_sensitivity == case_sensitive_off
51e2cfa2
PA
2618 && (TOLOWER ((unsigned char) *string1)
2619 != TOLOWER ((unsigned char) *string2)))
559a7a62 2620 break;
1d550c82 2621
0662b6a7
PA
2622 /* If we see any non-whitespace, non-identifier-name character
2623 (any of "()<>*&" etc.), then skip spaces the next time
2624 around. */
51e2cfa2 2625 if (!ISSPACE (*string1) && !valid_identifier_name_char (*string1))
0662b6a7
PA
2626 skip_spaces = true;
2627
1d550c82
PA
2628 string1++;
2629 string2++;
c906108c 2630 }
1d550c82
PA
2631
2632 if (string2 == end_str2)
2633 {
2634 if (mode == strncmp_iw_mode::NORMAL)
bd69330d
PA
2635 {
2636 /* Strip abi tag markers from the matched symbol name.
2637 Usually the ABI marker will be found on function name
2638 (automatically added because the function returns an
2639 object marked with an ABI tag). However, it's also
2640 possible to see a marker in one of the function
2641 parameters, for example.
2642
2643 string2 (lookup name):
2644 func
2645 symbol name:
2646 function(some_struct[abi:cxx11], int)
2647
2648 and for completion LCD computation we want to say that
2649 the match was for:
2650 function(some_struct, int)
2651 */
2652 if (match_for_lcd != NULL)
2653 {
2654 while ((string1 = strstr (string1, "[abi:")) != NULL)
2655 {
2656 const char *abi_start = string1;
2657
2658 /* There can be more than one tag. */
2659 while (skip_abi_tag (&string1) && *string1 == '[')
2660 ;
2661
2662 if (abi_start != string1)
2663 match_for_lcd->mark_ignored_range (abi_start, string1);
2664 }
2665 }
2666
2667 return 0;
2668 }
1d550c82
PA
2669 else
2670 return (*string1 != '\0' && *string1 != '(');
2671 }
2672 else
2673 return 1;
2674}
2675
2676/* See utils.h. */
2677
2678int
2679strncmp_iw (const char *string1, const char *string2, size_t string2_len)
2680{
2681 return strncmp_iw_with_mode (string1, string2, string2_len,
0662b6a7 2682 strncmp_iw_mode::NORMAL, language_minimal);
1d550c82
PA
2683}
2684
2685/* See utils.h. */
2686
2687int
2688strcmp_iw (const char *string1, const char *string2)
2689{
2690 return strncmp_iw_with_mode (string1, string2, strlen (string2),
0662b6a7 2691 strncmp_iw_mode::MATCH_PARAMS, language_minimal);
c906108c 2692}
2de7ced7 2693
0fe19209
DC
2694/* This is like strcmp except that it ignores whitespace and treats
2695 '(' as the first non-NULL character in terms of ordering. Like
2696 strcmp (and unlike strcmp_iw), it returns negative if STRING1 <
2697 STRING2, 0 if STRING2 = STRING2, and positive if STRING1 > STRING2
2698 according to that ordering.
2699
2700 If a list is sorted according to this function and if you want to
2701 find names in the list that match some fixed NAME according to
2702 strcmp_iw(LIST_ELT, NAME), then the place to start looking is right
2703 where this function would put NAME.
2704
559a7a62
JK
2705 This function must be neutral to the CASE_SENSITIVITY setting as the user
2706 may choose it during later lookup. Therefore this function always sorts
2707 primarily case-insensitively and secondarily case-sensitively.
2708
0fe19209
DC
2709 Here are some examples of why using strcmp to sort is a bad idea:
2710
2711 Whitespace example:
2712
2713 Say your partial symtab contains: "foo<char *>", "goo". Then, if
2714 we try to do a search for "foo<char*>", strcmp will locate this
2715 after "foo<char *>" and before "goo". Then lookup_partial_symbol
2716 will start looking at strings beginning with "goo", and will never
2717 see the correct match of "foo<char *>".
2718
2719 Parenthesis example:
2720
2721 In practice, this is less like to be an issue, but I'll give it a
2722 shot. Let's assume that '$' is a legitimate character to occur in
2723 symbols. (Which may well even be the case on some systems.) Then
2724 say that the partial symbol table contains "foo$" and "foo(int)".
2725 strcmp will put them in this order, since '$' < '('. Now, if the
2726 user searches for "foo", then strcmp will sort "foo" before "foo$".
2727 Then lookup_partial_symbol will notice that strcmp_iw("foo$",
2728 "foo") is false, so it won't proceed to the actual match of
2729 "foo(int)" with "foo". */
2730
2731int
2732strcmp_iw_ordered (const char *string1, const char *string2)
2733{
559a7a62
JK
2734 const char *saved_string1 = string1, *saved_string2 = string2;
2735 enum case_sensitivity case_pass = case_sensitive_off;
2736
2737 for (;;)
0fe19209 2738 {
b11b1f88
JK
2739 /* C1 and C2 are valid only if *string1 != '\0' && *string2 != '\0'.
2740 Provide stub characters if we are already at the end of one of the
2741 strings. */
2742 char c1 = 'X', c2 = 'X';
2743
2744 while (*string1 != '\0' && *string2 != '\0')
0fe19209 2745 {
51e2cfa2 2746 while (ISSPACE (*string1))
b11b1f88 2747 string1++;
51e2cfa2 2748 while (ISSPACE (*string2))
b11b1f88
JK
2749 string2++;
2750
559a7a62
JK
2751 switch (case_pass)
2752 {
2753 case case_sensitive_off:
51e2cfa2
PA
2754 c1 = TOLOWER ((unsigned char) *string1);
2755 c2 = TOLOWER ((unsigned char) *string2);
559a7a62
JK
2756 break;
2757 case case_sensitive_on:
b11b1f88
JK
2758 c1 = *string1;
2759 c2 = *string2;
559a7a62
JK
2760 break;
2761 }
b11b1f88
JK
2762 if (c1 != c2)
2763 break;
2764
2765 if (*string1 != '\0')
2766 {
2767 string1++;
2768 string2++;
2769 }
0fe19209 2770 }
b11b1f88
JK
2771
2772 switch (*string1)
0fe19209 2773 {
b11b1f88
JK
2774 /* Characters are non-equal unless they're both '\0'; we want to
2775 make sure we get the comparison right according to our
2776 comparison in the cases where one of them is '\0' or '('. */
2777 case '\0':
2778 if (*string2 == '\0')
559a7a62 2779 break;
b11b1f88
JK
2780 else
2781 return -1;
2782 case '(':
2783 if (*string2 == '\0')
2784 return 1;
2785 else
2786 return -1;
2787 default:
2788 if (*string2 == '\0' || *string2 == '(')
2789 return 1;
559a7a62
JK
2790 else if (c1 > c2)
2791 return 1;
2792 else if (c1 < c2)
2793 return -1;
2794 /* PASSTHRU */
0fe19209 2795 }
559a7a62
JK
2796
2797 if (case_pass == case_sensitive_on)
2798 return 0;
2799
2800 /* Otherwise the strings were equal in case insensitive way, make
2801 a more fine grained comparison in a case sensitive way. */
2802
2803 case_pass = case_sensitive_on;
2804 string1 = saved_string1;
2805 string2 = saved_string2;
0fe19209 2806 }
0fe19209
DC
2807}
2808
459a2e4c 2809/* See utils.h. */
2de7ced7 2810
459a2e4c 2811bool
2de7ced7
DJ
2812streq (const char *lhs, const char *rhs)
2813{
2814 return !strcmp (lhs, rhs);
2815}
459a2e4c 2816
c906108c 2817\f
c5aa993b 2818
c906108c 2819/*
c5aa993b
JM
2820 ** subset_compare()
2821 ** Answer whether string_to_compare is a full or partial match to
2822 ** template_string. The partial match must be in sequence starting
2823 ** at index 0.
2824 */
c906108c 2825int
a121b7c1 2826subset_compare (const char *string_to_compare, const char *template_string)
7a292a7a
SS
2827{
2828 int match;
e0627e85 2829
cafb3438 2830 if (template_string != NULL && string_to_compare != NULL
8731e58e
AC
2831 && strlen (string_to_compare) <= strlen (template_string))
2832 match =
61012eef 2833 (startswith (template_string, string_to_compare));
7a292a7a
SS
2834 else
2835 match = 0;
2836 return match;
2837}
c906108c 2838
75feb17d
DJ
2839static void
2840show_debug_timestamp (struct ui_file *file, int from_tty,
2841 struct cmd_list_element *c, const char *value)
2842{
3e43a32a
MS
2843 fprintf_filtered (file, _("Timestamping debugging messages is %s.\n"),
2844 value);
75feb17d 2845}
c906108c 2846\f
c5aa993b 2847
a738ea1d
YQ
2848/* See utils.h. */
2849
2850CORE_ADDR
2851address_significant (gdbarch *gdbarch, CORE_ADDR addr)
2852{
8727de56
OJ
2853 /* Clear insignificant bits of a target address and sign extend resulting
2854 address, avoiding shifts larger or equal than the width of a CORE_ADDR.
2855 The local variable ADDR_BIT stops the compiler reporting a shift overflow
5969f0db
OJ
2856 when it won't occur. Skip updating of target address if current target
2857 has not set gdbarch significant_addr_bit. */
a738ea1d
YQ
2858 int addr_bit = gdbarch_significant_addr_bit (gdbarch);
2859
5969f0db 2860 if (addr_bit && (addr_bit < (sizeof (CORE_ADDR) * HOST_CHAR_BIT)))
8727de56
OJ
2861 {
2862 CORE_ADDR sign = (CORE_ADDR) 1 << (addr_bit - 1);
2863 addr &= ((CORE_ADDR) 1 << addr_bit) - 1;
2864 addr = (addr ^ sign) - sign;
2865 }
a738ea1d
YQ
2866
2867 return addr;
2868}
2869
66bf4b3a 2870const char *
5af949e3 2871paddress (struct gdbarch *gdbarch, CORE_ADDR addr)
66bf4b3a
AC
2872{
2873 /* Truncate address to the size of a target address, avoiding shifts
2874 larger or equal than the width of a CORE_ADDR. The local
2875 variable ADDR_BIT stops the compiler reporting a shift overflow
581e13c1 2876 when it won't occur. */
66bf4b3a
AC
2877 /* NOTE: This assumes that the significant address information is
2878 kept in the least significant bits of ADDR - the upper bits were
76e71323 2879 either zero or sign extended. Should gdbarch_address_to_pointer or
66bf4b3a
AC
2880 some ADDRESS_TO_PRINTABLE() be used to do the conversion? */
2881
5af949e3 2882 int addr_bit = gdbarch_addr_bit (gdbarch);
66bf4b3a
AC
2883
2884 if (addr_bit < (sizeof (CORE_ADDR) * HOST_CHAR_BIT))
2885 addr &= ((CORE_ADDR) 1 << addr_bit) - 1;
2886 return hex_string (addr);
2887}
2888
f1310107
TJB
2889/* This function is described in "defs.h". */
2890
2891const char *
2892print_core_address (struct gdbarch *gdbarch, CORE_ADDR address)
2893{
2894 int addr_bit = gdbarch_addr_bit (gdbarch);
2895
2896 if (addr_bit < (sizeof (CORE_ADDR) * HOST_CHAR_BIT))
2897 address &= ((CORE_ADDR) 1 << addr_bit) - 1;
2898
2899 /* FIXME: cagney/2002-05-03: Need local_address_string() function
2900 that returns the language localized string formatted to a width
2901 based on gdbarch_addr_bit. */
2902 if (addr_bit <= 32)
2903 return hex_string_custom (address, 8);
2904 else
2905 return hex_string_custom (address, 16);
2906}
2907
8e3b41a9
JK
2908/* Callback hash_f for htab_create_alloc or htab_create_alloc_ex. */
2909
2910hashval_t
2911core_addr_hash (const void *ap)
2912{
19ba03f4 2913 const CORE_ADDR *addrp = (const CORE_ADDR *) ap;
8e3b41a9
JK
2914
2915 return *addrp;
2916}
2917
2918/* Callback eq_f for htab_create_alloc or htab_create_alloc_ex. */
2919
2920int
2921core_addr_eq (const void *ap, const void *bp)
2922{
19ba03f4
SM
2923 const CORE_ADDR *addr_ap = (const CORE_ADDR *) ap;
2924 const CORE_ADDR *addr_bp = (const CORE_ADDR *) bp;
8e3b41a9
JK
2925
2926 return *addr_ap == *addr_bp;
2927}
2928
03dd37c3
AC
2929/* Convert a string back into a CORE_ADDR. */
2930CORE_ADDR
2931string_to_core_addr (const char *my_string)
2932{
2933 CORE_ADDR addr = 0;
9544c605 2934
51e2cfa2 2935 if (my_string[0] == '0' && TOLOWER (my_string[1]) == 'x')
03dd37c3 2936 {
ced572fe 2937 /* Assume that it is in hex. */
03dd37c3 2938 int i;
5d502164 2939
03dd37c3
AC
2940 for (i = 2; my_string[i] != '\0'; i++)
2941 {
51e2cfa2 2942 if (ISDIGIT (my_string[i]))
03dd37c3 2943 addr = (my_string[i] - '0') + (addr * 16);
51e2cfa2
PA
2944 else if (ISXDIGIT (my_string[i]))
2945 addr = (TOLOWER (my_string[i]) - 'a' + 0xa) + (addr * 16);
03dd37c3 2946 else
63f06803 2947 error (_("invalid hex \"%s\""), my_string);
03dd37c3
AC
2948 }
2949 }
2950 else
2951 {
2952 /* Assume that it is in decimal. */
2953 int i;
5d502164 2954
03dd37c3
AC
2955 for (i = 0; my_string[i] != '\0'; i++)
2956 {
51e2cfa2 2957 if (ISDIGIT (my_string[i]))
03dd37c3
AC
2958 addr = (my_string[i] - '0') + (addr * 10);
2959 else
63f06803 2960 error (_("invalid decimal \"%s\""), my_string);
03dd37c3
AC
2961 }
2962 }
9544c605 2963
03dd37c3
AC
2964 return addr;
2965}
58d370e0 2966
14278e1f
TT
2967#if GDB_SELF_TEST
2968
2969static void
2970gdb_realpath_check_trailer (const char *input, const char *trailer)
2971{
2972 gdb::unique_xmalloc_ptr<char> result = gdb_realpath (input);
2973
2974 size_t len = strlen (result.get ());
2975 size_t trail_len = strlen (trailer);
2976
2977 SELF_CHECK (len >= trail_len
2978 && strcmp (result.get () + len - trail_len, trailer) == 0);
2979}
2980
2981static void
2982gdb_realpath_tests ()
2983{
2984 /* A file which contains a directory prefix. */
2985 gdb_realpath_check_trailer ("./xfullpath.exp", "/xfullpath.exp");
2986 /* A file which contains a directory prefix. */
2987 gdb_realpath_check_trailer ("../../defs.h", "/defs.h");
2988 /* A one-character filename. */
2989 gdb_realpath_check_trailer ("./a", "/a");
2990 /* A file in the root directory. */
2991 gdb_realpath_check_trailer ("/root_file_which_should_exist",
2992 "/root_file_which_should_exist");
2993 /* A file which does not have a directory prefix. */
2994 gdb_realpath_check_trailer ("xfullpath.exp", "xfullpath.exp");
2995 /* A one-char filename without any directory prefix. */
2996 gdb_realpath_check_trailer ("a", "a");
2997 /* An empty filename. */
2998 gdb_realpath_check_trailer ("", "");
2999}
3000
d369b608
SM
3001/* Test the gdb_argv::as_array_view method. */
3002
3003static void
3004gdb_argv_as_array_view_test ()
3005{
3006 {
3007 gdb_argv argv;
3008
3009 gdb::array_view<char *> view = argv.as_array_view ();
3010
3011 SELF_CHECK (view.data () == nullptr);
3012 SELF_CHECK (view.size () == 0);
3013 }
3014 {
3015 gdb_argv argv ("une bonne 50");
3016
3017 gdb::array_view<char *> view = argv.as_array_view ();
3018
3019 SELF_CHECK (view.size () == 3);
3020 SELF_CHECK (strcmp (view[0], "une") == 0);
3021 SELF_CHECK (strcmp (view[1], "bonne") == 0);
3022 SELF_CHECK (strcmp (view[2], "50") == 0);
3023 }
3024}
3025
14278e1f
TT
3026#endif /* GDB_SELF_TEST */
3027
ae5a43e0
DJ
3028/* Allocation function for the libiberty hash table which uses an
3029 obstack. The obstack is passed as DATA. */
3030
3031void *
3032hashtab_obstack_allocate (void *data, size_t size, size_t count)
3033{
241fd515 3034 size_t total = size * count;
ae5a43e0 3035 void *ptr = obstack_alloc ((struct obstack *) data, total);
e0627e85 3036
ae5a43e0
DJ
3037 memset (ptr, 0, total);
3038 return ptr;
3039}
3040
3041/* Trivial deallocation function for the libiberty splay tree and hash
3042 table - don't deallocate anything. Rely on later deletion of the
3043 obstack. DATA will be the obstack, although it is not needed
3044 here. */
3045
3046void
3047dummy_obstack_deallocate (void *object, void *data)
3048{
3049 return;
3050}
253c8abb 3051
e1024ff1
DJ
3052/* Simple, portable version of dirname that does not modify its
3053 argument. */
3054
d721ba37 3055std::string
e1024ff1
DJ
3056ldirname (const char *filename)
3057{
d721ba37 3058 std::string dirname;
e1024ff1 3059 const char *base = lbasename (filename);
e1024ff1
DJ
3060
3061 while (base > filename && IS_DIR_SEPARATOR (base[-1]))
3062 --base;
3063
3064 if (base == filename)
d721ba37 3065 return dirname;
e1024ff1 3066
d721ba37 3067 dirname = std::string (filename, base - filename);
e1024ff1
DJ
3068
3069 /* On DOS based file systems, convert "d:foo" to "d:.", so that we
3070 create "d:./bar" later instead of the (different) "d:/bar". */
3071 if (base - filename == 2 && IS_ABSOLUTE_PATH (base)
3072 && !IS_DIR_SEPARATOR (filename[0]))
3073 dirname[base++ - filename] = '.';
3074
e1024ff1
DJ
3075 return dirname;
3076}
d1a41061 3077
773a1edc
TT
3078/* See utils.h. */
3079
3080void
3081gdb_argv::reset (const char *s)
3082{
3083 char **argv = buildargv (s);
3084
773a1edc
TT
3085 freeargv (m_argv);
3086 m_argv = argv;
3087}
3088
d18b8b7a 3089#define AMBIGUOUS_MESS1 ".\nMatching formats:"
3e43a32a
MS
3090#define AMBIGUOUS_MESS2 \
3091 ".\nUse \"set gnutarget format-name\" to specify the format."
d18b8b7a 3092
803c08d0 3093std::string
d18b8b7a
HZ
3094gdb_bfd_errmsg (bfd_error_type error_tag, char **matching)
3095{
d18b8b7a
HZ
3096 char **p;
3097
3098 /* Check if errmsg just need simple return. */
3099 if (error_tag != bfd_error_file_ambiguously_recognized || matching == NULL)
3100 return bfd_errmsg (error_tag);
3101
803c08d0
TT
3102 std::string ret (bfd_errmsg (error_tag));
3103 ret += AMBIGUOUS_MESS1;
d18b8b7a
HZ
3104
3105 for (p = matching; *p; p++)
3106 {
803c08d0
TT
3107 ret += " ";
3108 ret += *p;
d18b8b7a 3109 }
803c08d0 3110 ret += AMBIGUOUS_MESS2;
d18b8b7a 3111
803c08d0 3112 xfree (matching);
d18b8b7a
HZ
3113
3114 return ret;
3115}
3116
74164c56
JK
3117/* Return ARGS parsed as a valid pid, or throw an error. */
3118
3119int
c0939df1 3120parse_pid_to_attach (const char *args)
74164c56
JK
3121{
3122 unsigned long pid;
3123 char *dummy;
3124
3125 if (!args)
3126 error_no_arg (_("process-id to attach"));
3127
c0939df1 3128 dummy = (char *) args;
74164c56
JK
3129 pid = strtoul (args, &dummy, 0);
3130 /* Some targets don't set errno on errors, grrr! */
3131 if ((pid == 0 && dummy == args) || dummy != &args[strlen (args)])
3132 error (_("Illegal process-id: %s."), args);
3133
3134 return pid;
3135}
3136
30baf67b 3137/* Substitute all occurrences of string FROM by string TO in *STRINGP. *STRINGP
6dea1fbd 3138 must come from xrealloc-compatible allocator and it may be updated. FROM
1564a261
JK
3139 needs to be delimited by IS_DIR_SEPARATOR or DIRNAME_SEPARATOR (or be
3140 located at the start or end of *STRINGP. */
6dea1fbd
JK
3141
3142void
3143substitute_path_component (char **stringp, const char *from, const char *to)
3144{
3145 char *string = *stringp, *s;
3146 const size_t from_len = strlen (from);
3147 const size_t to_len = strlen (to);
3148
3149 for (s = string;;)
3150 {
3151 s = strstr (s, from);
3152 if (s == NULL)
3153 break;
3154
1564a261
JK
3155 if ((s == string || IS_DIR_SEPARATOR (s[-1])
3156 || s[-1] == DIRNAME_SEPARATOR)
dda83cd7 3157 && (s[from_len] == '\0' || IS_DIR_SEPARATOR (s[from_len])
1564a261 3158 || s[from_len] == DIRNAME_SEPARATOR))
6dea1fbd
JK
3159 {
3160 char *string_new;
3161
224c3ddb
SM
3162 string_new
3163 = (char *) xrealloc (string, (strlen (string) + to_len + 1));
6dea1fbd
JK
3164
3165 /* Relocate the current S pointer. */
3166 s = s - string + string_new;
3167 string = string_new;
3168
3169 /* Replace from by to. */
3170 memmove (&s[to_len], &s[from_len], strlen (&s[from_len]) + 1);
3171 memcpy (s, to, to_len);
3172
3173 s += to_len;
3174 }
3175 else
3176 s++;
3177 }
3178
3179 *stringp = string;
3180}
3181
0b6cb71e
DE
3182#ifdef HAVE_WAITPID
3183
3184#ifdef SIGALRM
3185
3186/* SIGALRM handler for waitpid_with_timeout. */
3187
3188static void
3189sigalrm_handler (int signo)
3190{
3191 /* Nothing to do. */
3192}
3193
3194#endif
3195
3196/* Wrapper to wait for child PID to die with TIMEOUT.
3197 TIMEOUT is the time to stop waiting in seconds.
3198 If TIMEOUT is zero, pass WNOHANG to waitpid.
3199 Returns PID if it was successfully waited for, otherwise -1.
3200
3201 Timeouts are currently implemented with alarm and SIGALRM.
3202 If the host does not support them, this waits "forever".
3203 It would be odd though for a host to have waitpid and not SIGALRM. */
3204
3205pid_t
3206wait_to_die_with_timeout (pid_t pid, int *status, int timeout)
3207{
3208 pid_t waitpid_result;
3209
3210 gdb_assert (pid > 0);
3211 gdb_assert (timeout >= 0);
3212
3213 if (timeout > 0)
3214 {
3215#ifdef SIGALRM
3216#if defined (HAVE_SIGACTION) && defined (SA_RESTART)
3217 struct sigaction sa, old_sa;
3218
3219 sa.sa_handler = sigalrm_handler;
3220 sigemptyset (&sa.sa_mask);
3221 sa.sa_flags = 0;
3222 sigaction (SIGALRM, &sa, &old_sa);
3223#else
a40805d4 3224 sighandler_t ofunc;
0b6cb71e 3225
a40805d4 3226 ofunc = signal (SIGALRM, sigalrm_handler);
0b6cb71e
DE
3227#endif
3228
3229 alarm (timeout);
3230#endif
3231
3232 waitpid_result = waitpid (pid, status, 0);
3233
3234#ifdef SIGALRM
3235 alarm (0);
3236#if defined (HAVE_SIGACTION) && defined (SA_RESTART)
3237 sigaction (SIGALRM, &old_sa, NULL);
3238#else
3239 signal (SIGALRM, ofunc);
3240#endif
3241#endif
3242 }
3243 else
3244 waitpid_result = waitpid (pid, status, WNOHANG);
3245
3246 if (waitpid_result == pid)
3247 return pid;
3248 else
3249 return -1;
3250}
3251
3252#endif /* HAVE_WAITPID */
3253
202cbf1c
JK
3254/* Provide fnmatch compatible function for FNM_FILE_NAME matching of host files.
3255 Both FNM_FILE_NAME and FNM_NOESCAPE must be set in FLAGS.
3256
3257 It handles correctly HAVE_DOS_BASED_FILE_SYSTEM and
3258 HAVE_CASE_INSENSITIVE_FILE_SYSTEM. */
3259
3260int
3261gdb_filename_fnmatch (const char *pattern, const char *string, int flags)
3262{
3263 gdb_assert ((flags & FNM_FILE_NAME) != 0);
3264
3265 /* It is unclear how '\' escaping vs. directory separator should coexist. */
3266 gdb_assert ((flags & FNM_NOESCAPE) != 0);
3267
3268#ifdef HAVE_DOS_BASED_FILE_SYSTEM
3269 {
3270 char *pattern_slash, *string_slash;
3271
3272 /* Replace '\' by '/' in both strings. */
3273
0ae1c716 3274 pattern_slash = (char *) alloca (strlen (pattern) + 1);
202cbf1c
JK
3275 strcpy (pattern_slash, pattern);
3276 pattern = pattern_slash;
3277 for (; *pattern_slash != 0; pattern_slash++)
3278 if (IS_DIR_SEPARATOR (*pattern_slash))
3279 *pattern_slash = '/';
3280
0ae1c716 3281 string_slash = (char *) alloca (strlen (string) + 1);
202cbf1c
JK
3282 strcpy (string_slash, string);
3283 string = string_slash;
3284 for (; *string_slash != 0; string_slash++)
3285 if (IS_DIR_SEPARATOR (*string_slash))
3286 *string_slash = '/';
3287 }
3288#endif /* HAVE_DOS_BASED_FILE_SYSTEM */
3289
3290#ifdef HAVE_CASE_INSENSITIVE_FILE_SYSTEM
3291 flags |= FNM_CASEFOLD;
3292#endif /* HAVE_CASE_INSENSITIVE_FILE_SYSTEM */
3293
3294 return fnmatch (pattern, string, flags);
3295}
3296
cce0e923
DE
3297/* Return the number of path elements in PATH.
3298 / = 1
3299 /foo = 2
3300 /foo/ = 2
3301 foo/bar = 2
3302 foo/ = 1 */
3303
3304int
3305count_path_elements (const char *path)
3306{
3307 int count = 0;
3308 const char *p = path;
3309
3310 if (HAS_DRIVE_SPEC (p))
3311 {
3312 p = STRIP_DRIVE_SPEC (p);
3313 ++count;
3314 }
3315
3316 while (*p != '\0')
3317 {
3318 if (IS_DIR_SEPARATOR (*p))
3319 ++count;
3320 ++p;
3321 }
3322
3323 /* Backup one if last character is /, unless it's the only one. */
3324 if (p > path + 1 && IS_DIR_SEPARATOR (p[-1]))
3325 --count;
3326
3327 /* Add one for the file name, if present. */
3328 if (p > path && !IS_DIR_SEPARATOR (p[-1]))
3329 ++count;
3330
3331 return count;
3332}
3333
3334/* Remove N leading path elements from PATH.
3335 N must be non-negative.
3336 If PATH has more than N path elements then return NULL.
3337 If PATH has exactly N path elements then return "".
3338 See count_path_elements for a description of how we do the counting. */
3339
3340const char *
3341strip_leading_path_elements (const char *path, int n)
3342{
3343 int i = 0;
3344 const char *p = path;
3345
3346 gdb_assert (n >= 0);
3347
3348 if (n == 0)
3349 return p;
3350
3351 if (HAS_DRIVE_SPEC (p))
3352 {
3353 p = STRIP_DRIVE_SPEC (p);
3354 ++i;
3355 }
3356
3357 while (i < n)
3358 {
3359 while (*p != '\0' && !IS_DIR_SEPARATOR (*p))
3360 ++p;
3361 if (*p == '\0')
3362 {
3363 if (i + 1 == n)
3364 return "";
3365 return NULL;
3366 }
3367 ++p;
3368 ++i;
3369 }
3370
3371 return p;
3372}
3373
a99bc3d2
JB
3374/* See utils.h. */
3375
3376void
3377copy_bitwise (gdb_byte *dest, ULONGEST dest_offset,
3378 const gdb_byte *source, ULONGEST source_offset,
3379 ULONGEST nbits, int bits_big_endian)
3380{
3381 unsigned int buf, avail;
3382
3383 if (nbits == 0)
3384 return;
3385
3386 if (bits_big_endian)
3387 {
3388 /* Start from the end, then work backwards. */
3389 dest_offset += nbits - 1;
3390 dest += dest_offset / 8;
3391 dest_offset = 7 - dest_offset % 8;
3392 source_offset += nbits - 1;
3393 source += source_offset / 8;
3394 source_offset = 7 - source_offset % 8;
3395 }
3396 else
3397 {
3398 dest += dest_offset / 8;
3399 dest_offset %= 8;
3400 source += source_offset / 8;
3401 source_offset %= 8;
3402 }
3403
3404 /* Fill BUF with DEST_OFFSET bits from the destination and 8 -
3405 SOURCE_OFFSET bits from the source. */
3406 buf = *(bits_big_endian ? source-- : source++) >> source_offset;
3407 buf <<= dest_offset;
3408 buf |= *dest & ((1 << dest_offset) - 1);
3409
3410 /* NBITS: bits yet to be written; AVAIL: BUF's fill level. */
3411 nbits += dest_offset;
3412 avail = dest_offset + 8 - source_offset;
3413
3414 /* Flush 8 bits from BUF, if appropriate. */
3415 if (nbits >= 8 && avail >= 8)
3416 {
3417 *(bits_big_endian ? dest-- : dest++) = buf;
3418 buf >>= 8;
3419 avail -= 8;
3420 nbits -= 8;
3421 }
3422
3423 /* Copy the middle part. */
3424 if (nbits >= 8)
3425 {
3426 size_t len = nbits / 8;
3427
3428 /* Use a faster method for byte-aligned copies. */
3429 if (avail == 0)
3430 {
3431 if (bits_big_endian)
3432 {
3433 dest -= len;
3434 source -= len;
3435 memcpy (dest + 1, source + 1, len);
3436 }
3437 else
3438 {
3439 memcpy (dest, source, len);
3440 dest += len;
3441 source += len;
3442 }
3443 }
3444 else
3445 {
3446 while (len--)
3447 {
3448 buf |= *(bits_big_endian ? source-- : source++) << avail;
3449 *(bits_big_endian ? dest-- : dest++) = buf;
3450 buf >>= 8;
3451 }
3452 }
3453 nbits %= 8;
3454 }
3455
3456 /* Write the last byte. */
3457 if (nbits)
3458 {
3459 if (avail < nbits)
3460 buf |= *source << avail;
3461
3462 buf &= (1 << nbits) - 1;
cf83625d 3463 *dest = (*dest & (~0U << nbits)) | buf;
a99bc3d2
JB
3464 }
3465}
3466
6c265988 3467void _initialize_utils ();
3c16cced 3468void
6c265988 3469_initialize_utils ()
3c16cced 3470{
12904d37
TT
3471 add_setshow_uinteger_cmd ("width", class_support, &chars_per_line, _("\
3472Set number of characters where GDB should wrap lines of its output."), _("\
3473Show number of characters where GDB should wrap lines of its output."), _("\
3474This affects where GDB wraps its output to fit the screen width.\n\
3475Setting this to \"unlimited\" or zero prevents GDB from wrapping its output."),
3476 set_width_command,
3477 show_chars_per_line,
3478 &setlist, &showlist);
3479
3480 add_setshow_uinteger_cmd ("height", class_support, &lines_per_page, _("\
3481Set number of lines in a page for GDB output pagination."), _("\
3482Show number of lines in a page for GDB output pagination."), _("\
3483This affects the number of lines after which GDB will pause\n\
3484its output and ask you whether to continue.\n\
3485Setting this to \"unlimited\" or zero causes GDB never pause during output."),
3486 set_height_command,
3487 show_lines_per_page,
3488 &setlist, &showlist);
3489
3490 add_setshow_boolean_cmd ("pagination", class_support,
3491 &pagination_enabled, _("\
3492Set state of GDB output pagination."), _("\
3493Show state of GDB output pagination."), _("\
3494When pagination is ON, GDB pauses at end of each screenful of\n\
3495its output and asks you whether to continue.\n\
3496Turning pagination off is an alternative to \"set height unlimited\"."),
3497 NULL,
3498 show_pagination_enabled,
3499 &setlist, &showlist);
3500
3501 add_setshow_boolean_cmd ("sevenbit-strings", class_support,
3502 &sevenbit_strings, _("\
3503Set printing of 8-bit characters in strings as \\nnn."), _("\
3504Show printing of 8-bit characters in strings as \\nnn."), NULL,
3505 NULL,
3506 show_sevenbit_strings,
3507 &setprintlist, &showprintlist);
3508
3509 add_setshow_boolean_cmd ("timestamp", class_maintenance,
3510 &debug_timestamp, _("\
3511Set timestamping of debugging messages."), _("\
3512Show timestamping of debugging messages."), _("\
3513When set, debugging messages will be marked with seconds and microseconds."),
3514 NULL,
3515 show_debug_timestamp,
3516 &setdebuglist, &showdebuglist);
3517
3c16cced
PA
3518 add_internal_problem_command (&internal_error_problem);
3519 add_internal_problem_command (&internal_warning_problem);
57fcfb1b 3520 add_internal_problem_command (&demangler_warning_problem);
14278e1f
TT
3521
3522#if GDB_SELF_TEST
1526853e 3523 selftests::register_test ("gdb_realpath", gdb_realpath_tests);
d369b608 3524 selftests::register_test ("gdb_argv_array_view", gdb_argv_as_array_view_test);
14278e1f 3525#endif
3c16cced 3526}
This page took 2.66187 seconds and 4 git commands to generate.