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