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