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