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