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