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