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