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