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