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