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