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