*** empty log message ***
[deliverable/binutils-gdb.git] / gdb / utils.c
CommitLineData
c906108c 1/* General utility routines for GDB, the GNU debugger.
1bac305b 2
6aba47ca 3 Copyright (C) 1986, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
9b254dd1 4 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
46e9880c 5 Free Software Foundation, Inc.
c906108c 6
c5aa993b 7 This file is part of GDB.
c906108c 8
c5aa993b
JM
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
a9762ec7 11 the Free Software Foundation; either version 3 of the License, or
c5aa993b 12 (at your option) any later version.
c906108c 13
c5aa993b
JM
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
c906108c 18
c5aa993b 19 You should have received a copy of the GNU General Public License
a9762ec7 20 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c 21
4e8f7a8b
DJ
22#include "defs.h"
23#include "gdb_assert.h"
24#include <ctype.h>
25#include "gdb_string.h"
26#include "event-top.h"
60250e8b 27#include "exceptions.h"
95e54da7 28#include "gdbthread.h"
4e8f7a8b 29
6a83354a
AC
30#ifdef TUI
31#include "tui/tui.h" /* For tui_get_command_dimension. */
32#endif
33
9d271fd8
AC
34#ifdef __GO32__
35#include <pc.h>
36#endif
37
c906108c
SS
38/* SunOS's curses.h has a '#define reg register' in it. Thank you Sun. */
39#ifdef reg
40#undef reg
41#endif
42
042be3a9 43#include <signal.h>
c906108c
SS
44#include "gdbcmd.h"
45#include "serial.h"
46#include "bfd.h"
47#include "target.h"
48#include "demangle.h"
49#include "expression.h"
50#include "language.h"
234b45d4 51#include "charset.h"
c906108c 52#include "annotate.h"
303c8ebd 53#include "filenames.h"
7b90c3f9 54#include "symfile.h"
ae5a43e0 55#include "gdb_obstack.h"
9544c605 56#include "gdbcore.h"
698ba934 57#include "top.h"
c906108c 58
8731e58e 59#include "inferior.h" /* for signed_pointer_to_address */
ac2e2ef7 60
2d1b2124
AC
61#include <sys/param.h> /* For MAXPATHLEN */
62
3b78cdbb 63#include "gdb_curses.h"
020cc13c 64
dbda9972 65#include "readline/readline.h"
c906108c 66
75feb17d
DJ
67#include <sys/time.h>
68#include <time.h>
69
a3828db0 70#if !HAVE_DECL_MALLOC
8dbb1c65 71extern PTR malloc (); /* OK: PTR */
3c37485b 72#endif
a3828db0 73#if !HAVE_DECL_REALLOC
8dbb1c65 74extern PTR realloc (); /* OK: PTR */
0e52036f 75#endif
a3828db0 76#if !HAVE_DECL_FREE
81b8eb80
AC
77extern void free ();
78#endif
81b8eb80 79
c906108c
SS
80/* readline defines this. */
81#undef savestring
82
9a4105ab 83void (*deprecated_error_begin_hook) (void);
c906108c
SS
84
85/* Prototypes for local functions */
86
d9fcf2fb 87static void vfprintf_maybe_filtered (struct ui_file *, const char *,
bee0189a 88 va_list, int) ATTR_FORMAT (printf, 2, 0);
c906108c 89
d9fcf2fb 90static void fputs_maybe_filtered (const char *, struct ui_file *, int);
c906108c 91
e42c9534
AC
92static void do_my_cleanups (struct cleanup **, struct cleanup *);
93
a14ed312 94static void prompt_for_continue (void);
c906108c 95
eb0d3137 96static void set_screen_size (void);
a14ed312 97static void set_width (void);
c906108c 98
75feb17d
DJ
99/* A flag indicating whether to timestamp debugging messages. */
100
101static int debug_timestamp = 0;
102
c906108c
SS
103/* Chain of cleanup actions established with make_cleanup,
104 to be executed if an error happens. */
105
c5aa993b
JM
106static struct cleanup *cleanup_chain; /* cleaned up after a failed command */
107static struct cleanup *final_cleanup_chain; /* cleaned up when gdb exits */
43ff13b4 108
c906108c
SS
109/* Nonzero if we have job control. */
110
111int job_control;
112
113/* Nonzero means a quit has been requested. */
114
115int quit_flag;
116
117/* Nonzero means quit immediately if Control-C is typed now, rather
118 than waiting until QUIT is executed. Be careful in setting this;
119 code which executes with immediate_quit set has to be very careful
120 about being able to deal with being interrupted at any time. It is
121 almost always better to use QUIT; the only exception I can think of
122 is being able to quit out of a system call (using EINTR loses if
123 the SIGINT happens between the previous QUIT and the system call).
124 To immediately quit in the case in which a SIGINT happens between
125 the previous QUIT and setting immediate_quit (desirable anytime we
126 expect to block), call QUIT after setting immediate_quit. */
127
128int immediate_quit;
129
4a351cef
AF
130/* Nonzero means that encoded C++/ObjC names should be printed out in their
131 C++/ObjC form rather than raw. */
c906108c
SS
132
133int demangle = 1;
920d2a44
AC
134static void
135show_demangle (struct ui_file *file, int from_tty,
136 struct cmd_list_element *c, const char *value)
137{
138 fprintf_filtered (file, _("\
139Demangling of encoded C++/ObjC names when displaying symbols is %s.\n"),
140 value);
141}
c906108c 142
4a351cef
AF
143/* Nonzero means that encoded C++/ObjC names should be printed out in their
144 C++/ObjC form even in assembler language displays. If this is set, but
c906108c
SS
145 DEMANGLE is zero, names are printed raw, i.e. DEMANGLE controls. */
146
147int asm_demangle = 0;
920d2a44
AC
148static void
149show_asm_demangle (struct ui_file *file, int from_tty,
150 struct cmd_list_element *c, const char *value)
151{
152 fprintf_filtered (file, _("\
153Demangling of C++/ObjC names in disassembly listings is %s.\n"),
154 value);
155}
c906108c
SS
156
157/* Nonzero means that strings with character values >0x7F should be printed
158 as octal escapes. Zero means just print the value (e.g. it's an
159 international character, and the terminal or window can cope.) */
160
161int sevenbit_strings = 0;
920d2a44
AC
162static void
163show_sevenbit_strings (struct ui_file *file, int from_tty,
164 struct cmd_list_element *c, const char *value)
165{
166 fprintf_filtered (file, _("\
167Printing of 8-bit characters in strings as \\nnn is %s.\n"),
168 value);
169}
c906108c
SS
170
171/* String to be printed before error messages, if any. */
172
173char *error_pre_print;
174
175/* String to be printed before quit messages, if any. */
176
177char *quit_pre_print;
178
179/* String to be printed before warning messages, if any. */
180
181char *warning_pre_print = "\nwarning: ";
182
183int pagination_enabled = 1;
920d2a44
AC
184static void
185show_pagination_enabled (struct ui_file *file, int from_tty,
186 struct cmd_list_element *c, const char *value)
187{
188 fprintf_filtered (file, _("State of pagination is %s.\n"), value);
189}
190
c906108c 191\f
c5aa993b 192
c906108c
SS
193/* Add a new cleanup to the cleanup_chain,
194 and return the previous chain pointer
195 to be passed later to do_cleanups or discard_cleanups.
196 Args are FUNCTION to clean up with, and ARG to pass to it. */
197
198struct cleanup *
e4005526 199make_cleanup (make_cleanup_ftype *function, void *arg)
c906108c 200{
c5aa993b 201 return make_my_cleanup (&cleanup_chain, function, arg);
c906108c
SS
202}
203
4f8d22e3
PA
204struct cleanup *
205make_cleanup_dtor (make_cleanup_ftype *function, void *arg,
206 void (*dtor) (void *))
207{
208 return make_my_cleanup2 (&cleanup_chain,
209 function, arg, dtor);
210}
211
c906108c 212struct cleanup *
e4005526 213make_final_cleanup (make_cleanup_ftype *function, void *arg)
c906108c 214{
c5aa993b 215 return make_my_cleanup (&final_cleanup_chain, function, arg);
c906108c 216}
7a292a7a 217
7a292a7a 218static void
fba45db2 219do_freeargv (void *arg)
7a292a7a 220{
c5aa993b 221 freeargv ((char **) arg);
7a292a7a
SS
222}
223
224struct cleanup *
fba45db2 225make_cleanup_freeargv (char **arg)
7a292a7a
SS
226{
227 return make_my_cleanup (&cleanup_chain, do_freeargv, arg);
228}
229
5c65bbb6
AC
230static void
231do_bfd_close_cleanup (void *arg)
232{
233 bfd_close (arg);
234}
235
236struct cleanup *
237make_cleanup_bfd_close (bfd *abfd)
238{
239 return make_cleanup (do_bfd_close_cleanup, abfd);
240}
241
f5ff8c83
AC
242static void
243do_close_cleanup (void *arg)
244{
f042532c
AC
245 int *fd = arg;
246 close (*fd);
f5ff8c83
AC
247}
248
249struct cleanup *
250make_cleanup_close (int fd)
251{
f042532c
AC
252 int *saved_fd = xmalloc (sizeof (fd));
253 *saved_fd = fd;
a05016c0 254 return make_cleanup_dtor (do_close_cleanup, saved_fd, xfree);
f5ff8c83
AC
255}
256
7c8a8b04
TT
257/* Helper function which does the work for make_cleanup_fclose. */
258
259static void
260do_fclose_cleanup (void *arg)
261{
262 FILE *file = arg;
263 fclose (arg);
264}
265
266/* Return a new cleanup that closes FILE. */
267
268struct cleanup *
269make_cleanup_fclose (FILE *file)
270{
271 return make_cleanup (do_fclose_cleanup, file);
272}
273
11cf8741 274static void
d9fcf2fb 275do_ui_file_delete (void *arg)
11cf8741 276{
d9fcf2fb 277 ui_file_delete (arg);
11cf8741
JM
278}
279
280struct cleanup *
d9fcf2fb 281make_cleanup_ui_file_delete (struct ui_file *arg)
11cf8741 282{
d9fcf2fb 283 return make_my_cleanup (&cleanup_chain, do_ui_file_delete, arg);
11cf8741
JM
284}
285
7b90c3f9
JB
286static void
287do_free_section_addr_info (void *arg)
288{
289 free_section_addr_info (arg);
290}
291
292struct cleanup *
293make_cleanup_free_section_addr_info (struct section_addr_info *addrs)
294{
295 return make_my_cleanup (&cleanup_chain, do_free_section_addr_info, addrs);
296}
297
0b080f59
VP
298struct restore_integer_closure
299{
300 int *variable;
301 int value;
302};
303
304static void
305restore_integer (void *p)
306{
307 struct restore_integer_closure *closure = p;
308 *(closure->variable) = closure->value;
309}
7b90c3f9 310
0b080f59
VP
311/* Remember the current value of *VARIABLE and make it restored when the cleanup
312 is run. */
c906108c 313struct cleanup *
0b080f59
VP
314make_cleanup_restore_integer (int *variable)
315{
316 struct restore_integer_closure *c =
317 xmalloc (sizeof (struct restore_integer_closure));
318 c->variable = variable;
319 c->value = *variable;
320
321 return make_my_cleanup2 (&cleanup_chain, restore_integer, (void *)c,
322 xfree);
323}
324
325struct cleanup *
326make_my_cleanup2 (struct cleanup **pmy_chain, make_cleanup_ftype *function,
327 void *arg, void (*free_arg) (void *))
c906108c 328{
52f0bd74 329 struct cleanup *new
8731e58e 330 = (struct cleanup *) xmalloc (sizeof (struct cleanup));
52f0bd74 331 struct cleanup *old_chain = *pmy_chain;
c906108c
SS
332
333 new->next = *pmy_chain;
334 new->function = function;
0b080f59 335 new->free_arg = free_arg;
c906108c
SS
336 new->arg = arg;
337 *pmy_chain = new;
338
339 return old_chain;
340}
341
0b080f59
VP
342struct cleanup *
343make_my_cleanup (struct cleanup **pmy_chain, make_cleanup_ftype *function,
344 void *arg)
345{
346 return make_my_cleanup2 (pmy_chain, function, arg, NULL);
347}
348
c906108c
SS
349/* Discard cleanups and do the actions they describe
350 until we get back to the point OLD_CHAIN in the cleanup_chain. */
351
352void
aa1ee363 353do_cleanups (struct cleanup *old_chain)
c906108c 354{
c5aa993b 355 do_my_cleanups (&cleanup_chain, old_chain);
c906108c
SS
356}
357
358void
aa1ee363 359do_final_cleanups (struct cleanup *old_chain)
c906108c 360{
c5aa993b 361 do_my_cleanups (&final_cleanup_chain, old_chain);
c906108c
SS
362}
363
e42c9534 364static void
aa1ee363
AC
365do_my_cleanups (struct cleanup **pmy_chain,
366 struct cleanup *old_chain)
c906108c 367{
52f0bd74 368 struct cleanup *ptr;
c906108c
SS
369 while ((ptr = *pmy_chain) != old_chain)
370 {
371 *pmy_chain = ptr->next; /* Do this first incase recursion */
372 (*ptr->function) (ptr->arg);
0b080f59
VP
373 if (ptr->free_arg)
374 (*ptr->free_arg) (ptr->arg);
b8c9b27d 375 xfree (ptr);
c906108c
SS
376 }
377}
378
379/* Discard cleanups, not doing the actions they describe,
380 until we get back to the point OLD_CHAIN in the cleanup_chain. */
381
382void
aa1ee363 383discard_cleanups (struct cleanup *old_chain)
c906108c 384{
c5aa993b 385 discard_my_cleanups (&cleanup_chain, old_chain);
c906108c
SS
386}
387
388void
aa1ee363 389discard_final_cleanups (struct cleanup *old_chain)
c906108c 390{
c5aa993b 391 discard_my_cleanups (&final_cleanup_chain, old_chain);
c906108c
SS
392}
393
394void
aa1ee363
AC
395discard_my_cleanups (struct cleanup **pmy_chain,
396 struct cleanup *old_chain)
c906108c 397{
52f0bd74 398 struct cleanup *ptr;
c906108c
SS
399 while ((ptr = *pmy_chain) != old_chain)
400 {
401 *pmy_chain = ptr->next;
0b080f59
VP
402 if (ptr->free_arg)
403 (*ptr->free_arg) (ptr->arg);
b8c9b27d 404 xfree (ptr);
c906108c
SS
405 }
406}
407
408/* Set the cleanup_chain to 0, and return the old cleanup chain. */
409struct cleanup *
fba45db2 410save_cleanups (void)
c906108c 411{
c5aa993b 412 return save_my_cleanups (&cleanup_chain);
c906108c
SS
413}
414
415struct cleanup *
fba45db2 416save_final_cleanups (void)
c906108c 417{
c5aa993b 418 return save_my_cleanups (&final_cleanup_chain);
c906108c
SS
419}
420
421struct cleanup *
fba45db2 422save_my_cleanups (struct cleanup **pmy_chain)
c906108c
SS
423{
424 struct cleanup *old_chain = *pmy_chain;
425
426 *pmy_chain = 0;
427 return old_chain;
428}
429
430/* Restore the cleanup chain from a previously saved chain. */
431void
fba45db2 432restore_cleanups (struct cleanup *chain)
c906108c 433{
c5aa993b 434 restore_my_cleanups (&cleanup_chain, chain);
c906108c
SS
435}
436
437void
fba45db2 438restore_final_cleanups (struct cleanup *chain)
c906108c 439{
c5aa993b 440 restore_my_cleanups (&final_cleanup_chain, chain);
c906108c
SS
441}
442
443void
fba45db2 444restore_my_cleanups (struct cleanup **pmy_chain, struct cleanup *chain)
c906108c
SS
445{
446 *pmy_chain = chain;
447}
448
449/* This function is useful for cleanups.
450 Do
451
c5aa993b
JM
452 foo = xmalloc (...);
453 old_chain = make_cleanup (free_current_contents, &foo);
c906108c
SS
454
455 to arrange to free the object thus allocated. */
456
457void
2f9429ae 458free_current_contents (void *ptr)
c906108c 459{
2f9429ae 460 void **location = ptr;
e2f9c474 461 if (location == NULL)
8e65ff28 462 internal_error (__FILE__, __LINE__,
e2e0b3e5 463 _("free_current_contents: NULL pointer"));
2f9429ae 464 if (*location != NULL)
e2f9c474 465 {
b8c9b27d 466 xfree (*location);
e2f9c474
AC
467 *location = NULL;
468 }
c906108c
SS
469}
470
471/* Provide a known function that does nothing, to use as a base for
472 for a possibly long chain of cleanups. This is useful where we
473 use the cleanup chain for handling normal cleanups as well as dealing
474 with cleanups that need to be done as a result of a call to error().
475 In such cases, we may not be certain where the first cleanup is, unless
476 we have a do-nothing one to always use as the base. */
477
c906108c 478void
e4005526 479null_cleanup (void *arg)
c906108c
SS
480{
481}
482
0ffe5012
PA
483/* Continuations are implemented as cleanups internally. Inherit from
484 cleanups. */
485struct continuation
486{
487 struct cleanup base;
488};
489
95e54da7
PA
490/* Add a continuation to the continuation list of THREAD. The new
491 continuation will be added at the front. */
43ff13b4 492void
95e54da7
PA
493add_continuation (struct thread_info *thread,
494 void (*continuation_hook) (void *), void *args,
604ead4a 495 void (*continuation_free_args) (void *))
43ff13b4 496{
95e54da7 497 struct cleanup *as_cleanup = &thread->continuations->base;
604ead4a 498 make_cleanup_ftype *continuation_hook_fn = continuation_hook;
43ff13b4 499
0ffe5012 500 make_my_cleanup2 (&as_cleanup,
604ead4a
PA
501 continuation_hook_fn,
502 args,
503 continuation_free_args);
0ffe5012 504
95e54da7 505 thread->continuations = (struct continuation *) as_cleanup;
43ff13b4
JM
506}
507
95e54da7
PA
508static void
509restore_thread_cleanup (void *arg)
510{
511 ptid_t *ptid_p = arg;
512 switch_to_thread (*ptid_p);
513}
514
515/* Walk down the continuation list of PTID, and execute all the
516 continuations. There is a problem though. In some cases new
517 continuations may be added while we are in the middle of this loop.
518 If this happens they will be added in the front, and done before we
519 have a chance of exhausting those that were already there. We need
520 to then save the beginning of the list in a pointer and do the
521 continuations from there on, instead of using the global beginning
522 of list as our iteration pointer. */
523static void
524do_all_continuations_ptid (ptid_t ptid,
525 struct continuation **continuations_p)
c2d11a7d 526{
95e54da7
PA
527 struct cleanup *old_chain;
528 ptid_t current_thread;
529 struct cleanup *as_cleanup;
530
531 if (*continuations_p == NULL)
532 return;
533
534 current_thread = inferior_ptid;
535
536 /* Restore selected thread on exit. Don't try to restore the frame
537 as well, because:
538
539 - When running continuations, the selected frame is always #0.
540
541 - The continuations may trigger symbol file loads, which may
542 change the frame layout (frame ids change), which would trigger
543 a warning if we used make_cleanup_restore_current_thread. */
544
545 old_chain = make_cleanup (restore_thread_cleanup, &current_thread);
546
547 /* Let the continuation see this thread as selected. */
548 switch_to_thread (ptid);
c2d11a7d
JM
549
550 /* Copy the list header into another pointer, and set the global
551 list header to null, so that the global list can change as a side
604ead4a
PA
552 effect of invoking the continuations and the processing of the
553 preexisting continuations will not be affected. */
554
95e54da7
PA
555 as_cleanup = &(*continuations_p)->base;
556 *continuations_p = NULL;
c2d11a7d 557
0a4a0819 558 /* Work now on the list we have set aside. */
95e54da7
PA
559 do_my_cleanups (&as_cleanup, NULL);
560
561 do_cleanups (old_chain);
562}
563
564/* Callback for iterate over threads. */
565static int
566do_all_continuations_thread_callback (struct thread_info *thread, void *data)
567{
568 do_all_continuations_ptid (thread->ptid, &thread->continuations);
569 return 0;
c2d11a7d
JM
570}
571
95e54da7 572/* Do all continuations of thread THREAD. */
c2d11a7d 573void
95e54da7
PA
574do_all_continuations_thread (struct thread_info *thread)
575{
576 do_all_continuations_thread_callback (thread, NULL);
577}
578
579/* Do all continuations of all threads. */
580void
581do_all_continuations (void)
43ff13b4 582{
95e54da7
PA
583 iterate_over_threads (do_all_continuations_thread_callback, NULL);
584}
585
586/* Callback for iterate over threads. */
587static int
588discard_all_continuations_thread_callback (struct thread_info *thread,
589 void *data)
590{
591 struct cleanup *continuation_ptr = &thread->continuations->base;
0ffe5012 592 discard_my_cleanups (&continuation_ptr, NULL);
95e54da7
PA
593 thread->continuations = NULL;
594 return 0;
595}
596
597/* Get rid of all the continuations of THREAD. */
598void
599discard_all_continuations_thread (struct thread_info *thread)
600{
601 discard_all_continuations_thread_callback (thread, NULL);
602}
603
604/* Get rid of all the continuations of all threads. */
605void
606discard_all_continuations (void)
607{
608 iterate_over_threads (discard_all_continuations_thread_callback, NULL);
43ff13b4 609}
c2c6d25f 610
95e54da7
PA
611
612/* Add a continuation to the intermediate continuation list of THREAD.
613 The new continuation will be added at the front. */
c2d11a7d 614void
95e54da7
PA
615add_intermediate_continuation (struct thread_info *thread,
616 void (*continuation_hook)
604ead4a
PA
617 (void *), void *args,
618 void (*continuation_free_args) (void *))
c2d11a7d 619{
95e54da7 620 struct cleanup *as_cleanup = &thread->intermediate_continuations->base;
604ead4a 621 make_cleanup_ftype *continuation_hook_fn = continuation_hook;
c2d11a7d 622
0ffe5012 623 make_my_cleanup2 (&as_cleanup,
604ead4a
PA
624 continuation_hook_fn,
625 args,
626 continuation_free_args);
0ffe5012 627
95e54da7 628 thread->intermediate_continuations = (struct continuation *) as_cleanup;
c2d11a7d
JM
629}
630
631/* Walk down the cmd_continuation list, and execute all the
632 continuations. There is a problem though. In some cases new
633 continuations may be added while we are in the middle of this
634 loop. If this happens they will be added in the front, and done
635 before we have a chance of exhausting those that were already
636 there. We need to then save the beginning of the list in a pointer
637 and do the continuations from there on, instead of using the
638 global beginning of list as our iteration pointer.*/
95e54da7
PA
639static int
640do_all_intermediate_continuations_thread_callback (struct thread_info *thread,
641 void *data)
642{
643 do_all_continuations_ptid (thread->ptid,
644 &thread->intermediate_continuations);
645 return 0;
646}
647
648/* Do all intermediate continuations of thread THREAD. */
c2d11a7d 649void
95e54da7 650do_all_intermediate_continuations_thread (struct thread_info *thread)
c2d11a7d 651{
95e54da7
PA
652 do_all_intermediate_continuations_thread_callback (thread, NULL);
653}
c2d11a7d 654
95e54da7
PA
655/* Do all intermediate continuations of all threads. */
656void
657do_all_intermediate_continuations (void)
658{
659 iterate_over_threads (do_all_intermediate_continuations_thread_callback, NULL);
660}
604ead4a 661
95e54da7
PA
662/* Callback for iterate over threads. */
663static int
664discard_all_intermediate_continuations_thread_callback (struct thread_info *thread,
665 void *data)
666{
667 struct cleanup *continuation_ptr = &thread->intermediate_continuations->base;
668 discard_my_cleanups (&continuation_ptr, NULL);
669 thread->intermediate_continuations = NULL;
670 return 0;
671}
c2d11a7d 672
95e54da7
PA
673/* Get rid of all the intermediate continuations of THREAD. */
674void
675discard_all_intermediate_continuations_thread (struct thread_info *thread)
676{
677 discard_all_intermediate_continuations_thread_callback (thread, NULL);
c2d11a7d
JM
678}
679
95e54da7 680/* Get rid of all the intermediate continuations of all threads. */
c2c6d25f 681void
fba45db2 682discard_all_intermediate_continuations (void)
c2c6d25f 683{
95e54da7 684 iterate_over_threads (discard_all_intermediate_continuations_thread_callback, NULL);
c2c6d25f 685}
c906108c 686\f
c5aa993b 687
8731e58e 688
f5a96129
AC
689/* Print a warning message. The first argument STRING is the warning
690 message, used as an fprintf format string, the second is the
691 va_list of arguments for that string. A warning is unfiltered (not
692 paginated) so that the user does not need to page through each
693 screen full of warnings when there are lots of them. */
c906108c
SS
694
695void
f5a96129 696vwarning (const char *string, va_list args)
c906108c 697{
9a4105ab
AC
698 if (deprecated_warning_hook)
699 (*deprecated_warning_hook) (string, args);
f5a96129
AC
700 else
701 {
702 target_terminal_ours ();
703 wrap_here (""); /* Force out any buffered output */
704 gdb_flush (gdb_stdout);
705 if (warning_pre_print)
306d9ac5 706 fputs_unfiltered (warning_pre_print, gdb_stderr);
f5a96129
AC
707 vfprintf_unfiltered (gdb_stderr, string, args);
708 fprintf_unfiltered (gdb_stderr, "\n");
709 va_end (args);
710 }
c906108c
SS
711}
712
713/* Print a warning message.
714 The first argument STRING is the warning message, used as a fprintf string,
715 and the remaining args are passed as arguments to it.
716 The primary difference between warnings and errors is that a warning
717 does not force the return to command level. */
718
c906108c 719void
8731e58e 720warning (const char *string, ...)
c906108c
SS
721{
722 va_list args;
c906108c 723 va_start (args, string);
f5a96129
AC
724 vwarning (string, args);
725 va_end (args);
c906108c
SS
726}
727
c906108c
SS
728/* Print an error message and return to command level.
729 The first argument STRING is the error message, used as a fprintf string,
730 and the remaining args are passed as arguments to it. */
731
4ce44c66
JM
732NORETURN void
733verror (const char *string, va_list args)
734{
6b1b7650 735 throw_verror (GENERIC_ERROR, string, args);
4ce44c66
JM
736}
737
c906108c 738NORETURN void
8731e58e 739error (const char *string, ...)
c906108c
SS
740{
741 va_list args;
c906108c 742 va_start (args, string);
6b1b7650 743 throw_verror (GENERIC_ERROR, string, args);
4ce44c66 744 va_end (args);
c906108c
SS
745}
746
d75e3c94
JJ
747/* Print an error message and quit.
748 The first argument STRING is the error message, used as a fprintf string,
749 and the remaining args are passed as arguments to it. */
750
751NORETURN void
752vfatal (const char *string, va_list args)
753{
6b1b7650 754 throw_vfatal (string, args);
d75e3c94
JJ
755}
756
757NORETURN void
758fatal (const char *string, ...)
759{
760 va_list args;
761 va_start (args, string);
6b1b7650 762 throw_vfatal (string, args);
d75e3c94
JJ
763 va_end (args);
764}
765
d75e3c94
JJ
766NORETURN void
767error_stream (struct ui_file *stream)
2acceee2 768{
4ce44c66 769 long len;
6b1b7650
AC
770 char *message = ui_file_xstrdup (stream, &len);
771 make_cleanup (xfree, message);
8a3fe4f8 772 error (("%s"), message);
2acceee2 773}
c906108c 774
dec43320
AC
775/* Print a message reporting an internal error/warning. Ask the user
776 if they want to continue, dump core, or just exit. Return
777 something to indicate a quit. */
c906108c 778
dec43320 779struct internal_problem
c906108c 780{
dec43320
AC
781 const char *name;
782 /* FIXME: cagney/2002-08-15: There should be ``maint set/show''
783 commands available for controlling these variables. */
784 enum auto_boolean should_quit;
785 enum auto_boolean should_dump_core;
786};
787
788/* Report a problem, internal to GDB, to the user. Once the problem
789 has been reported, and assuming GDB didn't quit, the caller can
790 either allow execution to resume or throw an error. */
791
bee0189a 792static void ATTR_FORMAT (printf, 4, 0)
dec43320 793internal_vproblem (struct internal_problem *problem,
8731e58e 794 const char *file, int line, const char *fmt, va_list ap)
dec43320 795{
dec43320 796 static int dejavu;
375fc983 797 int quit_p;
7be570e7 798 int dump_core_p;
714b1282 799 char *reason;
c906108c 800
dec43320 801 /* Don't allow infinite error/warning recursion. */
714b1282
AC
802 {
803 static char msg[] = "Recursive internal problem.\n";
804 switch (dejavu)
805 {
806 case 0:
807 dejavu = 1;
808 break;
809 case 1:
810 dejavu = 2;
811 fputs_unfiltered (msg, gdb_stderr);
812 abort (); /* NOTE: GDB has only three calls to abort(). */
813 default:
814 dejavu = 3;
815 write (STDERR_FILENO, msg, sizeof (msg));
816 exit (1);
817 }
818 }
c906108c 819
dec43320 820 /* Try to get the message out and at the start of a new line. */
4261bedc 821 target_terminal_ours ();
dec43320
AC
822 begin_line ();
823
714b1282
AC
824 /* Create a string containing the full error/warning message. Need
825 to call query with this full string, as otherwize the reason
826 (error/warning) and question become separated. Format using a
827 style similar to a compiler error message. Include extra detail
828 so that the user knows that they are living on the edge. */
829 {
830 char *msg;
e623b504 831 msg = xstrvprintf (fmt, ap);
b435e160 832 reason = xstrprintf ("\
714b1282
AC
833%s:%d: %s: %s\n\
834A problem internal to GDB has been detected,\n\
835further debugging may prove unreliable.", file, line, problem->name, msg);
836 xfree (msg);
837 make_cleanup (xfree, reason);
838 }
7be570e7 839
dec43320
AC
840 switch (problem->should_quit)
841 {
842 case AUTO_BOOLEAN_AUTO:
843 /* Default (yes/batch case) is to quit GDB. When in batch mode
8731e58e
AC
844 this lessens the likelhood of GDB going into an infinate
845 loop. */
e2e0b3e5 846 quit_p = query (_("%s\nQuit this debugging session? "), reason);
dec43320
AC
847 break;
848 case AUTO_BOOLEAN_TRUE:
849 quit_p = 1;
850 break;
851 case AUTO_BOOLEAN_FALSE:
852 quit_p = 0;
853 break;
854 default:
e2e0b3e5 855 internal_error (__FILE__, __LINE__, _("bad switch"));
dec43320
AC
856 }
857
858 switch (problem->should_dump_core)
859 {
860 case AUTO_BOOLEAN_AUTO:
861 /* Default (yes/batch case) is to dump core. This leaves a GDB
8731e58e
AC
862 `dropping' so that it is easier to see that something went
863 wrong in GDB. */
e2e0b3e5 864 dump_core_p = query (_("%s\nCreate a core file of GDB? "), reason);
dec43320
AC
865 break;
866 break;
867 case AUTO_BOOLEAN_TRUE:
868 dump_core_p = 1;
869 break;
870 case AUTO_BOOLEAN_FALSE:
871 dump_core_p = 0;
872 break;
873 default:
e2e0b3e5 874 internal_error (__FILE__, __LINE__, _("bad switch"));
dec43320 875 }
7be570e7 876
375fc983 877 if (quit_p)
7be570e7
JM
878 {
879 if (dump_core_p)
8731e58e 880 abort (); /* NOTE: GDB has only three calls to abort(). */
375fc983
AC
881 else
882 exit (1);
7be570e7
JM
883 }
884 else
885 {
886 if (dump_core_p)
375fc983 887 {
9b265ec2 888#ifdef HAVE_WORKING_FORK
375fc983 889 if (fork () == 0)
8731e58e 890 abort (); /* NOTE: GDB has only three calls to abort(). */
9b265ec2 891#endif
375fc983 892 }
7be570e7 893 }
96baa820
JM
894
895 dejavu = 0;
dec43320
AC
896}
897
898static struct internal_problem internal_error_problem = {
899 "internal-error", AUTO_BOOLEAN_AUTO, AUTO_BOOLEAN_AUTO
900};
901
902NORETURN void
8731e58e 903internal_verror (const char *file, int line, const char *fmt, va_list ap)
dec43320
AC
904{
905 internal_vproblem (&internal_error_problem, file, line, fmt, ap);
315a522e 906 deprecated_throw_reason (RETURN_ERROR);
c906108c
SS
907}
908
4ce44c66 909NORETURN void
8e65ff28 910internal_error (const char *file, int line, const char *string, ...)
4ce44c66
JM
911{
912 va_list ap;
913 va_start (ap, string);
8e65ff28 914 internal_verror (file, line, string, ap);
4ce44c66
JM
915 va_end (ap);
916}
917
dec43320 918static struct internal_problem internal_warning_problem = {
d833db3b 919 "internal-warning", AUTO_BOOLEAN_AUTO, AUTO_BOOLEAN_AUTO
dec43320
AC
920};
921
922void
8731e58e 923internal_vwarning (const char *file, int line, const char *fmt, va_list ap)
dec43320
AC
924{
925 internal_vproblem (&internal_warning_problem, file, line, fmt, ap);
926}
927
928void
929internal_warning (const char *file, int line, const char *string, ...)
930{
931 va_list ap;
932 va_start (ap, string);
933 internal_vwarning (file, line, string, ap);
934 va_end (ap);
935}
936
c906108c
SS
937/* Print the system error message for errno, and also mention STRING
938 as the file name for which the error was encountered.
939 Then return to command level. */
940
941NORETURN void
6972bc8b 942perror_with_name (const char *string)
c906108c
SS
943{
944 char *err;
945 char *combined;
946
947 err = safe_strerror (errno);
948 combined = (char *) alloca (strlen (err) + strlen (string) + 3);
949 strcpy (combined, string);
950 strcat (combined, ": ");
951 strcat (combined, err);
952
953 /* I understand setting these is a matter of taste. Still, some people
954 may clear errno but not know about bfd_error. Doing this here is not
955 unreasonable. */
956 bfd_set_error (bfd_error_no_error);
957 errno = 0;
958
8a3fe4f8 959 error (_("%s."), combined);
c906108c
SS
960}
961
962/* Print the system error message for ERRCODE, and also mention STRING
963 as the file name for which the error was encountered. */
964
965void
6972bc8b 966print_sys_errmsg (const char *string, int errcode)
c906108c
SS
967{
968 char *err;
969 char *combined;
970
971 err = safe_strerror (errcode);
972 combined = (char *) alloca (strlen (err) + strlen (string) + 3);
973 strcpy (combined, string);
974 strcat (combined, ": ");
975 strcat (combined, err);
976
977 /* We want anything which was printed on stdout to come out first, before
978 this message. */
979 gdb_flush (gdb_stdout);
980 fprintf_unfiltered (gdb_stderr, "%s.\n", combined);
981}
982
983/* Control C eventually causes this to be called, at a convenient time. */
984
985void
fba45db2 986quit (void)
c906108c 987{
7be570e7
JM
988#ifdef __MSDOS__
989 /* No steenking SIGINT will ever be coming our way when the
990 program is resumed. Don't lie. */
e06e2353 991 fatal ("Quit");
7be570e7 992#else
c906108c 993 if (job_control
8731e58e
AC
994 /* If there is no terminal switching for this target, then we can't
995 possibly get screwed by the lack of job control. */
c906108c 996 || current_target.to_terminal_ours == NULL)
e06e2353 997 fatal ("Quit");
c906108c 998 else
e06e2353 999 fatal ("Quit (expect signal SIGINT when the program is resumed)");
7be570e7 1000#endif
c906108c
SS
1001}
1002
c906108c 1003\f
c906108c
SS
1004/* Called when a memory allocation fails, with the number of bytes of
1005 memory requested in SIZE. */
1006
1007NORETURN void
fba45db2 1008nomem (long size)
c906108c
SS
1009{
1010 if (size > 0)
1011 {
8e65ff28 1012 internal_error (__FILE__, __LINE__,
e2e0b3e5 1013 _("virtual memory exhausted: can't allocate %ld bytes."),
8731e58e 1014 size);
c906108c
SS
1015 }
1016 else
1017 {
e2e0b3e5 1018 internal_error (__FILE__, __LINE__, _("virtual memory exhausted."));
c906108c
SS
1019 }
1020}
1021
c0e61796
AC
1022/* The xmalloc() (libiberty.h) family of memory management routines.
1023
1024 These are like the ISO-C malloc() family except that they implement
1025 consistent semantics and guard against typical memory management
7936743b 1026 problems. */
c0e61796
AC
1027
1028/* NOTE: These are declared using PTR to ensure consistency with
1029 "libiberty.h". xfree() is GDB local. */
1030
8dbb1c65 1031PTR /* OK: PTR */
c0e61796
AC
1032xmalloc (size_t size)
1033{
7936743b
AC
1034 void *val;
1035
1036 /* See libiberty/xmalloc.c. This function need's to match that's
1037 semantics. It never returns NULL. */
1038 if (size == 0)
1039 size = 1;
1040
1041 val = malloc (size); /* OK: malloc */
1042 if (val == NULL)
1043 nomem (size);
1044
1045 return (val);
c0e61796 1046}
c906108c 1047
5b90c7b5
AC
1048void *
1049xzalloc (size_t size)
1050{
1051 return xcalloc (1, size);
1052}
1053
8dbb1c65
AC
1054PTR /* OK: PTR */
1055xrealloc (PTR ptr, size_t size) /* OK: PTR */
c906108c 1056{
0efffb96
AC
1057 void *val;
1058
1059 /* See libiberty/xmalloc.c. This function need's to match that's
1060 semantics. It never returns NULL. */
1061 if (size == 0)
1062 size = 1;
1063
1064 if (ptr != NULL)
1065 val = realloc (ptr, size); /* OK: realloc */
1066 else
1067 val = malloc (size); /* OK: malloc */
1068 if (val == NULL)
1069 nomem (size);
1070
1071 return (val);
c906108c 1072}
b8c9b27d 1073
8dbb1c65 1074PTR /* OK: PTR */
c0e61796
AC
1075xcalloc (size_t number, size_t size)
1076{
aa2ee5f6
AC
1077 void *mem;
1078
1079 /* See libiberty/xmalloc.c. This function need's to match that's
1080 semantics. It never returns NULL. */
1081 if (number == 0 || size == 0)
1082 {
1083 number = 1;
1084 size = 1;
1085 }
1086
1087 mem = calloc (number, size); /* OK: xcalloc */
1088 if (mem == NULL)
1089 nomem (number * size);
1090
1091 return mem;
c0e61796 1092}
b8c9b27d
KB
1093
1094void
1095xfree (void *ptr)
1096{
2dc74dc1
AC
1097 if (ptr != NULL)
1098 free (ptr); /* OK: free */
b8c9b27d 1099}
c906108c 1100\f
c5aa993b 1101
76995688
AC
1102/* Like asprintf/vasprintf but get an internal_error if the call
1103 fails. */
1104
9ebf4acf
AC
1105char *
1106xstrprintf (const char *format, ...)
1107{
1108 char *ret;
1109 va_list args;
1110 va_start (args, format);
e623b504 1111 ret = xstrvprintf (format, args);
9ebf4acf
AC
1112 va_end (args);
1113 return ret;
1114}
1115
76995688
AC
1116void
1117xasprintf (char **ret, const char *format, ...)
1118{
1119 va_list args;
1120 va_start (args, format);
e623b504 1121 (*ret) = xstrvprintf (format, args);
76995688
AC
1122 va_end (args);
1123}
1124
1125void
1126xvasprintf (char **ret, const char *format, va_list ap)
1127{
a552edd9 1128 (*ret) = xstrvprintf (format, ap);
76995688
AC
1129}
1130
e623b504
AC
1131char *
1132xstrvprintf (const char *format, va_list ap)
1133{
1134 char *ret = NULL;
1135 int status = vasprintf (&ret, format, ap);
46e9880c
DJ
1136 /* NULL is returned when there was a memory allocation problem, or
1137 any other error (for instance, a bad format string). A negative
1138 status (the printed length) with a non-NULL buffer should never
1139 happen, but just to be sure. */
1140 if (ret == NULL || status < 0)
1141 internal_error (__FILE__, __LINE__, _("vasprintf call failed"));
e623b504
AC
1142 return ret;
1143}
76995688 1144
bde2058d
MK
1145int
1146xsnprintf (char *str, size_t size, const char *format, ...)
1147{
1148 va_list args;
1149 int ret;
1150
1151 va_start (args, format);
1152 ret = vsnprintf (str, size, format, args);
1153 gdb_assert (ret < size);
1154 va_end (args);
1155
1156 return ret;
1157}
1158
c906108c
SS
1159/* My replacement for the read system call.
1160 Used like `read' but keeps going if `read' returns too soon. */
1161
1162int
fba45db2 1163myread (int desc, char *addr, int len)
c906108c 1164{
52f0bd74 1165 int val;
c906108c
SS
1166 int orglen = len;
1167
1168 while (len > 0)
1169 {
1170 val = read (desc, addr, len);
1171 if (val < 0)
1172 return val;
1173 if (val == 0)
1174 return orglen - len;
1175 len -= val;
1176 addr += val;
1177 }
1178 return orglen;
1179}
1180\f
1181/* Make a copy of the string at PTR with SIZE characters
1182 (and add a null character at the end in the copy).
1183 Uses malloc to get the space. Returns the address of the copy. */
1184
1185char *
5565b556 1186savestring (const char *ptr, size_t size)
c906108c 1187{
52f0bd74 1188 char *p = (char *) xmalloc (size + 1);
c906108c
SS
1189 memcpy (p, ptr, size);
1190 p[size] = 0;
1191 return p;
1192}
1193
c906108c 1194void
aa1ee363 1195print_spaces (int n, struct ui_file *file)
c906108c 1196{
392a587b 1197 fputs_unfiltered (n_spaces (n), file);
c906108c
SS
1198}
1199
1200/* Print a host address. */
1201
1202void
ac16bf07 1203gdb_print_host_address (const void *addr, struct ui_file *stream)
c906108c
SS
1204{
1205
1206 /* We could use the %p conversion specifier to fprintf if we had any
1207 way of knowing whether this host supports it. But the following
1208 should work on the Alpha and on 32 bit machines. */
1209
c5aa993b 1210 fprintf_filtered (stream, "0x%lx", (unsigned long) addr);
c906108c 1211}
c906108c 1212\f
c5aa993b 1213
981c7f5a 1214/* This function supports the query, nquery, and yquery functions.
cbdeadca 1215 Ask user a y-or-n question and return 0 if answer is no, 1 if
981c7f5a
DJ
1216 answer is yes, or default the answer to the specified default
1217 (for yquery or nquery). DEFCHAR may be 'y' or 'n' to provide a
1218 default answer, or '\0' for no default.
cbdeadca
JJ
1219 CTLSTR is the control string and should end in "? ". It should
1220 not say how to answer, because we do that.
1221 ARGS are the arguments passed along with the CTLSTR argument to
1222 printf. */
1223
bee0189a 1224static int ATTR_FORMAT (printf, 1, 0)
cbdeadca
JJ
1225defaulted_query (const char *ctlstr, const char defchar, va_list args)
1226{
1227 int answer;
1228 int ans2;
1229 int retval;
1230 int def_value;
1231 char def_answer, not_def_answer;
981c7f5a 1232 char *y_string, *n_string, *question;
cbdeadca
JJ
1233
1234 /* Set up according to which answer is the default. */
981c7f5a
DJ
1235 if (defchar == '\0')
1236 {
1237 def_value = 1;
1238 def_answer = 'Y';
1239 not_def_answer = 'N';
1240 y_string = "y";
1241 n_string = "n";
1242 }
1243 else if (defchar == 'y')
cbdeadca
JJ
1244 {
1245 def_value = 1;
1246 def_answer = 'Y';
1247 not_def_answer = 'N';
1248 y_string = "[y]";
1249 n_string = "n";
1250 }
1251 else
1252 {
1253 def_value = 0;
1254 def_answer = 'N';
1255 not_def_answer = 'Y';
1256 y_string = "y";
1257 n_string = "[n]";
1258 }
1259
981c7f5a
DJ
1260 /* Automatically answer the default value if the user did not want
1261 prompts. */
1262 if (! caution)
1263 return def_value;
1264
1265 /* If input isn't coming from the user directly, just say what
1266 question we're asking, and then answer "yes" automatically. This
1267 way, important error messages don't get lost when talking to GDB
1268 over a pipe. */
1269 if (! input_from_terminal_p ())
1270 {
1271 wrap_here ("");
1272 vfprintf_filtered (gdb_stdout, ctlstr, args);
1273
1274 printf_filtered (_("(%s or %s) [answered %c; input not from terminal]\n"),
1275 y_string, n_string, def_answer);
1276 gdb_flush (gdb_stdout);
1277
1278 return def_value;
1279 }
1280
698ba934
DJ
1281 /* Automatically answer the default value if input is not from the user
1282 directly, or if the user did not want prompts. */
1283 if (!input_from_terminal_p () || !caution)
1284 return def_value;
1285
9a4105ab 1286 if (deprecated_query_hook)
cbdeadca 1287 {
9a4105ab 1288 return deprecated_query_hook (ctlstr, args);
cbdeadca
JJ
1289 }
1290
981c7f5a
DJ
1291 /* Format the question outside of the loop, to avoid reusing args. */
1292 question = xstrvprintf (ctlstr, args);
1293
cbdeadca
JJ
1294 while (1)
1295 {
1296 wrap_here (""); /* Flush any buffered output */
1297 gdb_flush (gdb_stdout);
1298
1299 if (annotation_level > 1)
a3f17187 1300 printf_filtered (("\n\032\032pre-query\n"));
cbdeadca 1301
981c7f5a 1302 fputs_filtered (question, gdb_stdout);
a3f17187 1303 printf_filtered (_("(%s or %s) "), y_string, n_string);
cbdeadca
JJ
1304
1305 if (annotation_level > 1)
a3f17187 1306 printf_filtered (("\n\032\032query\n"));
cbdeadca
JJ
1307
1308 wrap_here ("");
1309 gdb_flush (gdb_stdout);
1310
1311 answer = fgetc (stdin);
1312 clearerr (stdin); /* in case of C-d */
1313 if (answer == EOF) /* C-d */
1314 {
fa3fd85b 1315 printf_filtered ("EOF [assumed %c]\n", def_answer);
cbdeadca
JJ
1316 retval = def_value;
1317 break;
1318 }
1319 /* Eat rest of input line, to EOF or newline */
1320 if (answer != '\n')
1321 do
1322 {
1323 ans2 = fgetc (stdin);
1324 clearerr (stdin);
1325 }
1326 while (ans2 != EOF && ans2 != '\n' && ans2 != '\r');
1327
1328 if (answer >= 'a')
1329 answer -= 040;
1330 /* Check answer. For the non-default, the user must specify
1331 the non-default explicitly. */
1332 if (answer == not_def_answer)
1333 {
1334 retval = !def_value;
1335 break;
1336 }
981c7f5a
DJ
1337 /* Otherwise, if a default was specified, the user may either
1338 specify the required input or have it default by entering
1339 nothing. */
1340 if (answer == def_answer
1341 || (defchar != '\0' &&
1342 (answer == '\n' || answer == '\r' || answer == EOF)))
cbdeadca
JJ
1343 {
1344 retval = def_value;
1345 break;
1346 }
1347 /* Invalid entries are not defaulted and require another selection. */
a3f17187 1348 printf_filtered (_("Please answer %s or %s.\n"),
cbdeadca
JJ
1349 y_string, n_string);
1350 }
1351
981c7f5a 1352 xfree (question);
cbdeadca 1353 if (annotation_level > 1)
a3f17187 1354 printf_filtered (("\n\032\032post-query\n"));
cbdeadca
JJ
1355 return retval;
1356}
1357\f
1358
1359/* Ask user a y-or-n question and return 0 if answer is no, 1 if
1360 answer is yes, or 0 if answer is defaulted.
1361 Takes three args which are given to printf to print the question.
1362 The first, a control string, should end in "? ".
1363 It should not say how to answer, because we do that. */
1364
1365int
1366nquery (const char *ctlstr, ...)
1367{
1368 va_list args;
1369
1370 va_start (args, ctlstr);
1371 return defaulted_query (ctlstr, 'n', args);
1372 va_end (args);
1373}
1374
1375/* Ask user a y-or-n question and return 0 if answer is no, 1 if
1376 answer is yes, or 1 if answer is defaulted.
1377 Takes three args which are given to printf to print the question.
1378 The first, a control string, should end in "? ".
1379 It should not say how to answer, because we do that. */
1380
1381int
1382yquery (const char *ctlstr, ...)
1383{
1384 va_list args;
1385
1386 va_start (args, ctlstr);
1387 return defaulted_query (ctlstr, 'y', args);
1388 va_end (args);
1389}
1390
981c7f5a
DJ
1391/* Ask user a y-or-n question and return 1 iff answer is yes.
1392 Takes three args which are given to printf to print the question.
1393 The first, a control string, should end in "? ".
1394 It should not say how to answer, because we do that. */
1395
1396int
1397query (const char *ctlstr, ...)
1398{
1399 va_list args;
1400
1401 va_start (args, ctlstr);
1402 return defaulted_query (ctlstr, '\0', args);
1403 va_end (args);
1404}
1405
234b45d4
KB
1406/* Print an error message saying that we couldn't make sense of a
1407 \^mumble sequence in a string or character constant. START and END
1408 indicate a substring of some larger string that contains the
1409 erroneous backslash sequence, missing the initial backslash. */
1410static NORETURN int
1411no_control_char_error (const char *start, const char *end)
1412{
1413 int len = end - start;
1414 char *copy = alloca (end - start + 1);
1415
1416 memcpy (copy, start, len);
1417 copy[len] = '\0';
1418
8a3fe4f8 1419 error (_("There is no control character `\\%s' in the `%s' character set."),
8731e58e 1420 copy, target_charset ());
234b45d4
KB
1421}
1422
c906108c
SS
1423/* Parse a C escape sequence. STRING_PTR points to a variable
1424 containing a pointer to the string to parse. That pointer
1425 should point to the character after the \. That pointer
1426 is updated past the characters we use. The value of the
1427 escape sequence is returned.
1428
1429 A negative value means the sequence \ newline was seen,
1430 which is supposed to be equivalent to nothing at all.
1431
1432 If \ is followed by a null character, we return a negative
1433 value and leave the string pointer pointing at the null character.
1434
1435 If \ is followed by 000, we return 0 and leave the string pointer
1436 after the zeros. A value of 0 does not mean end of string. */
1437
1438int
fba45db2 1439parse_escape (char **string_ptr)
c906108c 1440{
234b45d4 1441 int target_char;
52f0bd74 1442 int c = *(*string_ptr)++;
234b45d4
KB
1443 if (c_parse_backslash (c, &target_char))
1444 return target_char;
8731e58e
AC
1445 else
1446 switch (c)
234b45d4 1447 {
8731e58e
AC
1448 case '\n':
1449 return -2;
1450 case 0:
1451 (*string_ptr)--;
1452 return 0;
1453 case '^':
1454 {
1455 /* Remember where this escape sequence started, for reporting
1456 errors. */
1457 char *sequence_start_pos = *string_ptr - 1;
234b45d4 1458
8731e58e
AC
1459 c = *(*string_ptr)++;
1460
1461 if (c == '?')
1462 {
1463 /* XXXCHARSET: What is `delete' in the host character set? */
1464 c = 0177;
1465
1466 if (!host_char_to_target (c, &target_char))
8a3fe4f8
AC
1467 error (_("There is no character corresponding to `Delete' "
1468 "in the target character set `%s'."), host_charset ());
8731e58e
AC
1469
1470 return target_char;
1471 }
1472 else if (c == '\\')
1473 target_char = parse_escape (string_ptr);
1474 else
1475 {
1476 if (!host_char_to_target (c, &target_char))
1477 no_control_char_error (sequence_start_pos, *string_ptr);
1478 }
1479
1480 /* Now target_char is something like `c', and we want to find
1481 its control-character equivalent. */
1482 if (!target_char_to_control_char (target_char, &target_char))
1483 no_control_char_error (sequence_start_pos, *string_ptr);
1484
1485 return target_char;
1486 }
1487
1488 /* XXXCHARSET: we need to use isdigit and value-of-digit
1489 methods of the host character set here. */
1490
1491 case '0':
1492 case '1':
1493 case '2':
1494 case '3':
1495 case '4':
1496 case '5':
1497 case '6':
1498 case '7':
1499 {
aa1ee363
AC
1500 int i = c - '0';
1501 int count = 0;
8731e58e
AC
1502 while (++count < 3)
1503 {
5cb316ef
AC
1504 c = (**string_ptr);
1505 if (c >= '0' && c <= '7')
8731e58e 1506 {
5cb316ef 1507 (*string_ptr)++;
8731e58e
AC
1508 i *= 8;
1509 i += c - '0';
1510 }
1511 else
1512 {
8731e58e
AC
1513 break;
1514 }
1515 }
1516 return i;
1517 }
1518 default:
1519 if (!host_char_to_target (c, &target_char))
1520 error
1521 ("The escape sequence `\%c' is equivalent to plain `%c', which"
1522 " has no equivalent\n" "in the `%s' character set.", c, c,
1523 target_charset ());
1524 return target_char;
c906108c 1525 }
c906108c
SS
1526}
1527\f
1528/* Print the character C on STREAM as part of the contents of a literal
1529 string whose delimiter is QUOTER. Note that this routine should only
1530 be call for printing things which are independent of the language
1531 of the program being debugged. */
1532
43e526b9 1533static void
74f832da 1534printchar (int c, void (*do_fputs) (const char *, struct ui_file *),
bee0189a
DJ
1535 void (*do_fprintf) (struct ui_file *, const char *, ...)
1536 ATTRIBUTE_FPTR_PRINTF_2, struct ui_file *stream, int quoter)
c906108c
SS
1537{
1538
1539 c &= 0xFF; /* Avoid sign bit follies */
1540
c5aa993b
JM
1541 if (c < 0x20 || /* Low control chars */
1542 (c >= 0x7F && c < 0xA0) || /* DEL, High controls */
1543 (sevenbit_strings && c >= 0x80))
1544 { /* high order bit set */
1545 switch (c)
1546 {
1547 case '\n':
43e526b9 1548 do_fputs ("\\n", stream);
c5aa993b
JM
1549 break;
1550 case '\b':
43e526b9 1551 do_fputs ("\\b", stream);
c5aa993b
JM
1552 break;
1553 case '\t':
43e526b9 1554 do_fputs ("\\t", stream);
c5aa993b
JM
1555 break;
1556 case '\f':
43e526b9 1557 do_fputs ("\\f", stream);
c5aa993b
JM
1558 break;
1559 case '\r':
43e526b9 1560 do_fputs ("\\r", stream);
c5aa993b
JM
1561 break;
1562 case '\033':
43e526b9 1563 do_fputs ("\\e", stream);
c5aa993b
JM
1564 break;
1565 case '\007':
43e526b9 1566 do_fputs ("\\a", stream);
c5aa993b
JM
1567 break;
1568 default:
43e526b9 1569 do_fprintf (stream, "\\%.3o", (unsigned int) c);
c5aa993b
JM
1570 break;
1571 }
1572 }
1573 else
1574 {
1575 if (c == '\\' || c == quoter)
43e526b9
JM
1576 do_fputs ("\\", stream);
1577 do_fprintf (stream, "%c", c);
c5aa993b 1578 }
c906108c 1579}
43e526b9
JM
1580
1581/* Print the character C on STREAM as part of the contents of a
1582 literal string whose delimiter is QUOTER. Note that these routines
1583 should only be call for printing things which are independent of
1584 the language of the program being debugged. */
1585
1586void
fba45db2 1587fputstr_filtered (const char *str, int quoter, struct ui_file *stream)
43e526b9
JM
1588{
1589 while (*str)
1590 printchar (*str++, fputs_filtered, fprintf_filtered, stream, quoter);
1591}
1592
1593void
fba45db2 1594fputstr_unfiltered (const char *str, int quoter, struct ui_file *stream)
43e526b9
JM
1595{
1596 while (*str)
1597 printchar (*str++, fputs_unfiltered, fprintf_unfiltered, stream, quoter);
1598}
1599
0876f84a
DJ
1600void
1601fputstrn_filtered (const char *str, int n, int quoter,
1602 struct ui_file *stream)
1603{
1604 int i;
1605 for (i = 0; i < n; i++)
1606 printchar (str[i], fputs_filtered, fprintf_filtered, stream, quoter);
1607}
1608
43e526b9 1609void
8731e58e
AC
1610fputstrn_unfiltered (const char *str, int n, int quoter,
1611 struct ui_file *stream)
43e526b9
JM
1612{
1613 int i;
1614 for (i = 0; i < n; i++)
1615 printchar (str[i], fputs_unfiltered, fprintf_unfiltered, stream, quoter);
1616}
c906108c 1617\f
c5aa993b 1618
c906108c
SS
1619/* Number of lines per page or UINT_MAX if paging is disabled. */
1620static unsigned int lines_per_page;
920d2a44
AC
1621static void
1622show_lines_per_page (struct ui_file *file, int from_tty,
1623 struct cmd_list_element *c, const char *value)
1624{
1625 fprintf_filtered (file, _("\
1626Number of lines gdb thinks are in a page is %s.\n"),
1627 value);
1628}
eb0d3137 1629
cbfbd72a 1630/* Number of chars per line or UINT_MAX if line folding is disabled. */
c906108c 1631static unsigned int chars_per_line;
920d2a44
AC
1632static void
1633show_chars_per_line (struct ui_file *file, int from_tty,
1634 struct cmd_list_element *c, const char *value)
1635{
1636 fprintf_filtered (file, _("\
1637Number of characters gdb thinks are in a line is %s.\n"),
1638 value);
1639}
eb0d3137 1640
c906108c
SS
1641/* Current count of lines printed on this page, chars on this line. */
1642static unsigned int lines_printed, chars_printed;
1643
1644/* Buffer and start column of buffered text, for doing smarter word-
1645 wrapping. When someone calls wrap_here(), we start buffering output
1646 that comes through fputs_filtered(). If we see a newline, we just
1647 spit it out and forget about the wrap_here(). If we see another
1648 wrap_here(), we spit it out and remember the newer one. If we see
1649 the end of the line, we spit out a newline, the indent, and then
1650 the buffered output. */
1651
1652/* Malloc'd buffer with chars_per_line+2 bytes. Contains characters which
1653 are waiting to be output (they have already been counted in chars_printed).
1654 When wrap_buffer[0] is null, the buffer is empty. */
1655static char *wrap_buffer;
1656
1657/* Pointer in wrap_buffer to the next character to fill. */
1658static char *wrap_pointer;
1659
1660/* String to indent by if the wrap occurs. Must not be NULL if wrap_column
1661 is non-zero. */
1662static char *wrap_indent;
1663
1664/* Column number on the screen where wrap_buffer begins, or 0 if wrapping
1665 is not in effect. */
1666static int wrap_column;
c906108c 1667\f
c5aa993b 1668
eb0d3137
MK
1669/* Inialize the number of lines per page and chars per line. */
1670
c906108c 1671void
fba45db2 1672init_page_info (void)
c906108c
SS
1673{
1674#if defined(TUI)
5ecb1806 1675 if (!tui_get_command_dimension (&chars_per_line, &lines_per_page))
c906108c
SS
1676#endif
1677 {
eb0d3137 1678 int rows, cols;
c906108c 1679
ec145965
EZ
1680#if defined(__GO32__)
1681 rows = ScreenRows ();
1682 cols = ScreenCols ();
1683 lines_per_page = rows;
1684 chars_per_line = cols;
1685#else
eb0d3137
MK
1686 /* Make sure Readline has initialized its terminal settings. */
1687 rl_reset_terminal (NULL);
c906108c 1688
eb0d3137
MK
1689 /* Get the screen size from Readline. */
1690 rl_get_screen_size (&rows, &cols);
1691 lines_per_page = rows;
1692 chars_per_line = cols;
c906108c 1693
eb0d3137
MK
1694 /* Readline should have fetched the termcap entry for us. */
1695 if (tgetnum ("li") < 0 || getenv ("EMACS"))
1696 {
1697 /* The number of lines per page is not mentioned in the
1698 terminal description. This probably means that paging is
1699 not useful (e.g. emacs shell window), so disable paging. */
1700 lines_per_page = UINT_MAX;
1701 }
c906108c 1702
eb0d3137 1703 /* FIXME: Get rid of this junk. */
c906108c 1704#if defined(SIGWINCH) && defined(SIGWINCH_HANDLER)
c906108c
SS
1705 SIGWINCH_HANDLER (SIGWINCH);
1706#endif
eb0d3137 1707
c906108c 1708 /* If the output is not a terminal, don't paginate it. */
d9fcf2fb 1709 if (!ui_file_isatty (gdb_stdout))
c5aa993b 1710 lines_per_page = UINT_MAX;
eb0d3137 1711#endif
ec145965 1712 }
eb0d3137
MK
1713
1714 set_screen_size ();
c5aa993b 1715 set_width ();
c906108c
SS
1716}
1717
eb0d3137
MK
1718/* Set the screen size based on LINES_PER_PAGE and CHARS_PER_LINE. */
1719
1720static void
1721set_screen_size (void)
1722{
1723 int rows = lines_per_page;
1724 int cols = chars_per_line;
1725
1726 if (rows <= 0)
1727 rows = INT_MAX;
1728
1729 if (cols <= 0)
0caa462c 1730 cols = INT_MAX;
eb0d3137
MK
1731
1732 /* Update Readline's idea of the terminal size. */
1733 rl_set_screen_size (rows, cols);
1734}
1735
1736/* Reinitialize WRAP_BUFFER according to the current value of
1737 CHARS_PER_LINE. */
1738
c906108c 1739static void
fba45db2 1740set_width (void)
c906108c
SS
1741{
1742 if (chars_per_line == 0)
c5aa993b 1743 init_page_info ();
c906108c
SS
1744
1745 if (!wrap_buffer)
1746 {
1747 wrap_buffer = (char *) xmalloc (chars_per_line + 2);
1748 wrap_buffer[0] = '\0';
1749 }
1750 else
1751 wrap_buffer = (char *) xrealloc (wrap_buffer, chars_per_line + 2);
eb0d3137 1752 wrap_pointer = wrap_buffer; /* Start it at the beginning. */
c906108c
SS
1753}
1754
c5aa993b 1755static void
fba45db2 1756set_width_command (char *args, int from_tty, struct cmd_list_element *c)
c906108c 1757{
eb0d3137 1758 set_screen_size ();
c906108c
SS
1759 set_width ();
1760}
1761
eb0d3137
MK
1762static void
1763set_height_command (char *args, int from_tty, struct cmd_list_element *c)
1764{
1765 set_screen_size ();
1766}
1767
c906108c
SS
1768/* Wait, so the user can read what's on the screen. Prompt the user
1769 to continue by pressing RETURN. */
1770
1771static void
fba45db2 1772prompt_for_continue (void)
c906108c
SS
1773{
1774 char *ignore;
1775 char cont_prompt[120];
1776
1777 if (annotation_level > 1)
a3f17187 1778 printf_unfiltered (("\n\032\032pre-prompt-for-continue\n"));
c906108c
SS
1779
1780 strcpy (cont_prompt,
1781 "---Type <return> to continue, or q <return> to quit---");
1782 if (annotation_level > 1)
1783 strcat (cont_prompt, "\n\032\032prompt-for-continue\n");
1784
1785 /* We must do this *before* we call gdb_readline, else it will eventually
1786 call us -- thinking that we're trying to print beyond the end of the
1787 screen. */
1788 reinitialize_more_filter ();
1789
1790 immediate_quit++;
1791 /* On a real operating system, the user can quit with SIGINT.
1792 But not on GO32.
1793
1794 'q' is provided on all systems so users don't have to change habits
1795 from system to system, and because telling them what to do in
1796 the prompt is more user-friendly than expecting them to think of
1797 SIGINT. */
1798 /* Call readline, not gdb_readline, because GO32 readline handles control-C
1799 whereas control-C to gdb_readline will cause the user to get dumped
1800 out to DOS. */
b4f5539f 1801 ignore = gdb_readline_wrapper (cont_prompt);
c906108c
SS
1802
1803 if (annotation_level > 1)
a3f17187 1804 printf_unfiltered (("\n\032\032post-prompt-for-continue\n"));
c906108c
SS
1805
1806 if (ignore)
1807 {
1808 char *p = ignore;
1809 while (*p == ' ' || *p == '\t')
1810 ++p;
1811 if (p[0] == 'q')
362646f5 1812 async_request_quit (0);
b8c9b27d 1813 xfree (ignore);
c906108c
SS
1814 }
1815 immediate_quit--;
1816
1817 /* Now we have to do this again, so that GDB will know that it doesn't
1818 need to save the ---Type <return>--- line at the top of the screen. */
1819 reinitialize_more_filter ();
1820
1821 dont_repeat (); /* Forget prev cmd -- CR won't repeat it. */
1822}
1823
1824/* Reinitialize filter; ie. tell it to reset to original values. */
1825
1826void
fba45db2 1827reinitialize_more_filter (void)
c906108c
SS
1828{
1829 lines_printed = 0;
1830 chars_printed = 0;
1831}
1832
1833/* Indicate that if the next sequence of characters overflows the line,
1834 a newline should be inserted here rather than when it hits the end.
1835 If INDENT is non-null, it is a string to be printed to indent the
1836 wrapped part on the next line. INDENT must remain accessible until
1837 the next call to wrap_here() or until a newline is printed through
1838 fputs_filtered().
1839
1840 If the line is already overfull, we immediately print a newline and
1841 the indentation, and disable further wrapping.
1842
1843 If we don't know the width of lines, but we know the page height,
1844 we must not wrap words, but should still keep track of newlines
1845 that were explicitly printed.
1846
1847 INDENT should not contain tabs, as that will mess up the char count
1848 on the next line. FIXME.
1849
1850 This routine is guaranteed to force out any output which has been
1851 squirreled away in the wrap_buffer, so wrap_here ((char *)0) can be
1852 used to force out output from the wrap_buffer. */
1853
1854void
fba45db2 1855wrap_here (char *indent)
c906108c
SS
1856{
1857 /* This should have been allocated, but be paranoid anyway. */
1858 if (!wrap_buffer)
e2e0b3e5 1859 internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
c906108c
SS
1860
1861 if (wrap_buffer[0])
1862 {
1863 *wrap_pointer = '\0';
1864 fputs_unfiltered (wrap_buffer, gdb_stdout);
1865 }
1866 wrap_pointer = wrap_buffer;
1867 wrap_buffer[0] = '\0';
c5aa993b 1868 if (chars_per_line == UINT_MAX) /* No line overflow checking */
c906108c
SS
1869 {
1870 wrap_column = 0;
1871 }
1872 else if (chars_printed >= chars_per_line)
1873 {
1874 puts_filtered ("\n");
1875 if (indent != NULL)
1876 puts_filtered (indent);
1877 wrap_column = 0;
1878 }
1879 else
1880 {
1881 wrap_column = chars_printed;
1882 if (indent == NULL)
1883 wrap_indent = "";
1884 else
1885 wrap_indent = indent;
1886 }
1887}
1888
4a351cef
AF
1889/* Print input string to gdb_stdout, filtered, with wrap,
1890 arranging strings in columns of n chars. String can be
1891 right or left justified in the column. Never prints
1892 trailing spaces. String should never be longer than
1893 width. FIXME: this could be useful for the EXAMINE
1894 command, which currently doesn't tabulate very well */
1895
1896void
1897puts_filtered_tabular (char *string, int width, int right)
1898{
1899 int spaces = 0;
1900 int stringlen;
1901 char *spacebuf;
1902
1903 gdb_assert (chars_per_line > 0);
1904 if (chars_per_line == UINT_MAX)
1905 {
1906 fputs_filtered (string, gdb_stdout);
1907 fputs_filtered ("\n", gdb_stdout);
1908 return;
1909 }
1910
1911 if (((chars_printed - 1) / width + 2) * width >= chars_per_line)
1912 fputs_filtered ("\n", gdb_stdout);
1913
1914 if (width >= chars_per_line)
1915 width = chars_per_line - 1;
1916
1917 stringlen = strlen (string);
1918
1919 if (chars_printed > 0)
1920 spaces = width - (chars_printed - 1) % width - 1;
1921 if (right)
1922 spaces += width - stringlen;
1923
1924 spacebuf = alloca (spaces + 1);
1925 spacebuf[spaces] = '\0';
1926 while (spaces--)
1927 spacebuf[spaces] = ' ';
1928
1929 fputs_filtered (spacebuf, gdb_stdout);
1930 fputs_filtered (string, gdb_stdout);
1931}
1932
1933
c906108c
SS
1934/* Ensure that whatever gets printed next, using the filtered output
1935 commands, starts at the beginning of the line. I.E. if there is
1936 any pending output for the current line, flush it and start a new
1937 line. Otherwise do nothing. */
1938
1939void
fba45db2 1940begin_line (void)
c906108c
SS
1941{
1942 if (chars_printed > 0)
1943 {
1944 puts_filtered ("\n");
1945 }
1946}
1947
ac9a91a7 1948
c906108c
SS
1949/* Like fputs but if FILTER is true, pause after every screenful.
1950
1951 Regardless of FILTER can wrap at points other than the final
1952 character of a line.
1953
1954 Unlike fputs, fputs_maybe_filtered does not return a value.
1955 It is OK for LINEBUFFER to be NULL, in which case just don't print
1956 anything.
1957
1958 Note that a longjmp to top level may occur in this routine (only if
1959 FILTER is true) (since prompt_for_continue may do so) so this
1960 routine should not be called when cleanups are not in place. */
1961
1962static void
fba45db2
KB
1963fputs_maybe_filtered (const char *linebuffer, struct ui_file *stream,
1964 int filter)
c906108c
SS
1965{
1966 const char *lineptr;
1967
1968 if (linebuffer == 0)
1969 return;
1970
1971 /* Don't do any filtering if it is disabled. */
7a292a7a 1972 if ((stream != gdb_stdout) || !pagination_enabled
c5aa993b 1973 || (lines_per_page == UINT_MAX && chars_per_line == UINT_MAX))
c906108c
SS
1974 {
1975 fputs_unfiltered (linebuffer, stream);
1976 return;
1977 }
1978
1979 /* Go through and output each character. Show line extension
1980 when this is necessary; prompt user for new page when this is
1981 necessary. */
c5aa993b 1982
c906108c
SS
1983 lineptr = linebuffer;
1984 while (*lineptr)
1985 {
1986 /* Possible new page. */
8731e58e 1987 if (filter && (lines_printed >= lines_per_page - 1))
c906108c
SS
1988 prompt_for_continue ();
1989
1990 while (*lineptr && *lineptr != '\n')
1991 {
1992 /* Print a single line. */
1993 if (*lineptr == '\t')
1994 {
1995 if (wrap_column)
1996 *wrap_pointer++ = '\t';
1997 else
1998 fputc_unfiltered ('\t', stream);
1999 /* Shifting right by 3 produces the number of tab stops
2000 we have already passed, and then adding one and
c5aa993b 2001 shifting left 3 advances to the next tab stop. */
c906108c
SS
2002 chars_printed = ((chars_printed >> 3) + 1) << 3;
2003 lineptr++;
2004 }
2005 else
2006 {
2007 if (wrap_column)
2008 *wrap_pointer++ = *lineptr;
2009 else
c5aa993b 2010 fputc_unfiltered (*lineptr, stream);
c906108c
SS
2011 chars_printed++;
2012 lineptr++;
2013 }
c5aa993b 2014
c906108c
SS
2015 if (chars_printed >= chars_per_line)
2016 {
2017 unsigned int save_chars = chars_printed;
2018
2019 chars_printed = 0;
2020 lines_printed++;
2021 /* If we aren't actually wrapping, don't output newline --
c5aa993b
JM
2022 if chars_per_line is right, we probably just overflowed
2023 anyway; if it's wrong, let us keep going. */
c906108c
SS
2024 if (wrap_column)
2025 fputc_unfiltered ('\n', stream);
2026
2027 /* Possible new page. */
2028 if (lines_printed >= lines_per_page - 1)
2029 prompt_for_continue ();
2030
2031 /* Now output indentation and wrapped string */
2032 if (wrap_column)
2033 {
2034 fputs_unfiltered (wrap_indent, stream);
8731e58e 2035 *wrap_pointer = '\0'; /* Null-terminate saved stuff */
c5aa993b 2036 fputs_unfiltered (wrap_buffer, stream); /* and eject it */
c906108c
SS
2037 /* FIXME, this strlen is what prevents wrap_indent from
2038 containing tabs. However, if we recurse to print it
2039 and count its chars, we risk trouble if wrap_indent is
2040 longer than (the user settable) chars_per_line.
2041 Note also that this can set chars_printed > chars_per_line
2042 if we are printing a long string. */
2043 chars_printed = strlen (wrap_indent)
c5aa993b 2044 + (save_chars - wrap_column);
c906108c
SS
2045 wrap_pointer = wrap_buffer; /* Reset buffer */
2046 wrap_buffer[0] = '\0';
c5aa993b
JM
2047 wrap_column = 0; /* And disable fancy wrap */
2048 }
c906108c
SS
2049 }
2050 }
2051
2052 if (*lineptr == '\n')
2053 {
2054 chars_printed = 0;
c5aa993b 2055 wrap_here ((char *) 0); /* Spit out chars, cancel further wraps */
c906108c
SS
2056 lines_printed++;
2057 fputc_unfiltered ('\n', stream);
2058 lineptr++;
2059 }
2060 }
2061}
2062
2063void
fba45db2 2064fputs_filtered (const char *linebuffer, struct ui_file *stream)
c906108c
SS
2065{
2066 fputs_maybe_filtered (linebuffer, stream, 1);
2067}
2068
2069int
fba45db2 2070putchar_unfiltered (int c)
c906108c 2071{
11cf8741 2072 char buf = c;
d9fcf2fb 2073 ui_file_write (gdb_stdout, &buf, 1);
c906108c
SS
2074 return c;
2075}
2076
d1f4cff8
AC
2077/* Write character C to gdb_stdout using GDB's paging mechanism and return C.
2078 May return nonlocally. */
2079
2080int
2081putchar_filtered (int c)
2082{
2083 return fputc_filtered (c, gdb_stdout);
2084}
2085
c906108c 2086int
fba45db2 2087fputc_unfiltered (int c, struct ui_file *stream)
c906108c 2088{
11cf8741 2089 char buf = c;
d9fcf2fb 2090 ui_file_write (stream, &buf, 1);
c906108c
SS
2091 return c;
2092}
2093
2094int
fba45db2 2095fputc_filtered (int c, struct ui_file *stream)
c906108c
SS
2096{
2097 char buf[2];
2098
2099 buf[0] = c;
2100 buf[1] = 0;
2101 fputs_filtered (buf, stream);
2102 return c;
2103}
2104
2105/* puts_debug is like fputs_unfiltered, except it prints special
2106 characters in printable fashion. */
2107
2108void
fba45db2 2109puts_debug (char *prefix, char *string, char *suffix)
c906108c
SS
2110{
2111 int ch;
2112
2113 /* Print prefix and suffix after each line. */
2114 static int new_line = 1;
2115 static int return_p = 0;
2116 static char *prev_prefix = "";
2117 static char *prev_suffix = "";
2118
2119 if (*string == '\n')
2120 return_p = 0;
2121
2122 /* If the prefix is changing, print the previous suffix, a new line,
2123 and the new prefix. */
c5aa993b 2124 if ((return_p || (strcmp (prev_prefix, prefix) != 0)) && !new_line)
c906108c 2125 {
9846de1b
JM
2126 fputs_unfiltered (prev_suffix, gdb_stdlog);
2127 fputs_unfiltered ("\n", gdb_stdlog);
2128 fputs_unfiltered (prefix, gdb_stdlog);
c906108c
SS
2129 }
2130
2131 /* Print prefix if we printed a newline during the previous call. */
2132 if (new_line)
2133 {
2134 new_line = 0;
9846de1b 2135 fputs_unfiltered (prefix, gdb_stdlog);
c906108c
SS
2136 }
2137
2138 prev_prefix = prefix;
2139 prev_suffix = suffix;
2140
2141 /* Output characters in a printable format. */
2142 while ((ch = *string++) != '\0')
2143 {
2144 switch (ch)
c5aa993b 2145 {
c906108c
SS
2146 default:
2147 if (isprint (ch))
9846de1b 2148 fputc_unfiltered (ch, gdb_stdlog);
c906108c
SS
2149
2150 else
9846de1b 2151 fprintf_unfiltered (gdb_stdlog, "\\x%02x", ch & 0xff);
c906108c
SS
2152 break;
2153
c5aa993b
JM
2154 case '\\':
2155 fputs_unfiltered ("\\\\", gdb_stdlog);
2156 break;
2157 case '\b':
2158 fputs_unfiltered ("\\b", gdb_stdlog);
2159 break;
2160 case '\f':
2161 fputs_unfiltered ("\\f", gdb_stdlog);
2162 break;
2163 case '\n':
2164 new_line = 1;
2165 fputs_unfiltered ("\\n", gdb_stdlog);
2166 break;
2167 case '\r':
2168 fputs_unfiltered ("\\r", gdb_stdlog);
2169 break;
2170 case '\t':
2171 fputs_unfiltered ("\\t", gdb_stdlog);
2172 break;
2173 case '\v':
2174 fputs_unfiltered ("\\v", gdb_stdlog);
2175 break;
2176 }
c906108c
SS
2177
2178 return_p = ch == '\r';
2179 }
2180
2181 /* Print suffix if we printed a newline. */
2182 if (new_line)
2183 {
9846de1b
JM
2184 fputs_unfiltered (suffix, gdb_stdlog);
2185 fputs_unfiltered ("\n", gdb_stdlog);
c906108c
SS
2186 }
2187}
2188
2189
2190/* Print a variable number of ARGS using format FORMAT. If this
2191 information is going to put the amount written (since the last call
2192 to REINITIALIZE_MORE_FILTER or the last page break) over the page size,
2193 call prompt_for_continue to get the users permision to continue.
2194
2195 Unlike fprintf, this function does not return a value.
2196
2197 We implement three variants, vfprintf (takes a vararg list and stream),
2198 fprintf (takes a stream to write on), and printf (the usual).
2199
2200 Note also that a longjmp to top level may occur in this routine
2201 (since prompt_for_continue may do so) so this routine should not be
2202 called when cleanups are not in place. */
2203
2204static void
fba45db2
KB
2205vfprintf_maybe_filtered (struct ui_file *stream, const char *format,
2206 va_list args, int filter)
c906108c
SS
2207{
2208 char *linebuffer;
2209 struct cleanup *old_cleanups;
2210
e623b504 2211 linebuffer = xstrvprintf (format, args);
b8c9b27d 2212 old_cleanups = make_cleanup (xfree, linebuffer);
c906108c
SS
2213 fputs_maybe_filtered (linebuffer, stream, filter);
2214 do_cleanups (old_cleanups);
2215}
2216
2217
2218void
fba45db2 2219vfprintf_filtered (struct ui_file *stream, const char *format, va_list args)
c906108c
SS
2220{
2221 vfprintf_maybe_filtered (stream, format, args, 1);
2222}
2223
2224void
fba45db2 2225vfprintf_unfiltered (struct ui_file *stream, const char *format, va_list args)
c906108c
SS
2226{
2227 char *linebuffer;
2228 struct cleanup *old_cleanups;
2229
e623b504 2230 linebuffer = xstrvprintf (format, args);
b8c9b27d 2231 old_cleanups = make_cleanup (xfree, linebuffer);
75feb17d
DJ
2232 if (debug_timestamp && stream == gdb_stdlog)
2233 {
2234 struct timeval tm;
2235 char *timestamp;
2236
2237 gettimeofday (&tm, NULL);
2238 timestamp = xstrprintf ("%ld:%ld ", (long) tm.tv_sec, (long) tm.tv_usec);
2239 make_cleanup (xfree, timestamp);
2240 fputs_unfiltered (timestamp, stream);
2241 }
c906108c
SS
2242 fputs_unfiltered (linebuffer, stream);
2243 do_cleanups (old_cleanups);
2244}
2245
2246void
fba45db2 2247vprintf_filtered (const char *format, va_list args)
c906108c
SS
2248{
2249 vfprintf_maybe_filtered (gdb_stdout, format, args, 1);
2250}
2251
2252void
fba45db2 2253vprintf_unfiltered (const char *format, va_list args)
c906108c
SS
2254{
2255 vfprintf_unfiltered (gdb_stdout, format, args);
2256}
2257
c906108c 2258void
8731e58e 2259fprintf_filtered (struct ui_file *stream, const char *format, ...)
c906108c
SS
2260{
2261 va_list args;
c906108c 2262 va_start (args, format);
c906108c
SS
2263 vfprintf_filtered (stream, format, args);
2264 va_end (args);
2265}
2266
c906108c 2267void
8731e58e 2268fprintf_unfiltered (struct ui_file *stream, const char *format, ...)
c906108c
SS
2269{
2270 va_list args;
c906108c 2271 va_start (args, format);
c906108c
SS
2272 vfprintf_unfiltered (stream, format, args);
2273 va_end (args);
2274}
2275
2276/* Like fprintf_filtered, but prints its result indented.
2277 Called as fprintfi_filtered (spaces, stream, format, ...); */
2278
c906108c 2279void
8731e58e
AC
2280fprintfi_filtered (int spaces, struct ui_file *stream, const char *format,
2281 ...)
c906108c
SS
2282{
2283 va_list args;
c906108c 2284 va_start (args, format);
c906108c
SS
2285 print_spaces_filtered (spaces, stream);
2286
2287 vfprintf_filtered (stream, format, args);
2288 va_end (args);
2289}
2290
2291
c906108c 2292void
8731e58e 2293printf_filtered (const char *format, ...)
c906108c
SS
2294{
2295 va_list args;
c906108c 2296 va_start (args, format);
c906108c
SS
2297 vfprintf_filtered (gdb_stdout, format, args);
2298 va_end (args);
2299}
2300
2301
c906108c 2302void
8731e58e 2303printf_unfiltered (const char *format, ...)
c906108c
SS
2304{
2305 va_list args;
c906108c 2306 va_start (args, format);
c906108c
SS
2307 vfprintf_unfiltered (gdb_stdout, format, args);
2308 va_end (args);
2309}
2310
2311/* Like printf_filtered, but prints it's result indented.
2312 Called as printfi_filtered (spaces, format, ...); */
2313
c906108c 2314void
8731e58e 2315printfi_filtered (int spaces, const char *format, ...)
c906108c
SS
2316{
2317 va_list args;
c906108c 2318 va_start (args, format);
c906108c
SS
2319 print_spaces_filtered (spaces, gdb_stdout);
2320 vfprintf_filtered (gdb_stdout, format, args);
2321 va_end (args);
2322}
2323
2324/* Easy -- but watch out!
2325
2326 This routine is *not* a replacement for puts()! puts() appends a newline.
2327 This one doesn't, and had better not! */
2328
2329void
fba45db2 2330puts_filtered (const char *string)
c906108c
SS
2331{
2332 fputs_filtered (string, gdb_stdout);
2333}
2334
2335void
fba45db2 2336puts_unfiltered (const char *string)
c906108c
SS
2337{
2338 fputs_unfiltered (string, gdb_stdout);
2339}
2340
2341/* Return a pointer to N spaces and a null. The pointer is good
2342 until the next call to here. */
2343char *
fba45db2 2344n_spaces (int n)
c906108c 2345{
392a587b
JM
2346 char *t;
2347 static char *spaces = 0;
2348 static int max_spaces = -1;
c906108c
SS
2349
2350 if (n > max_spaces)
2351 {
2352 if (spaces)
b8c9b27d 2353 xfree (spaces);
c5aa993b
JM
2354 spaces = (char *) xmalloc (n + 1);
2355 for (t = spaces + n; t != spaces;)
c906108c
SS
2356 *--t = ' ';
2357 spaces[n] = '\0';
2358 max_spaces = n;
2359 }
2360
2361 return spaces + max_spaces - n;
2362}
2363
2364/* Print N spaces. */
2365void
fba45db2 2366print_spaces_filtered (int n, struct ui_file *stream)
c906108c
SS
2367{
2368 fputs_filtered (n_spaces (n), stream);
2369}
2370\f
4a351cef 2371/* C++/ObjC demangler stuff. */
c906108c 2372
389e51db
AC
2373/* fprintf_symbol_filtered attempts to demangle NAME, a symbol in language
2374 LANG, using demangling args ARG_MODE, and print it filtered to STREAM.
2375 If the name is not mangled, or the language for the name is unknown, or
2376 demangling is off, the name is printed in its "raw" form. */
c906108c
SS
2377
2378void
8731e58e
AC
2379fprintf_symbol_filtered (struct ui_file *stream, char *name,
2380 enum language lang, int arg_mode)
c906108c
SS
2381{
2382 char *demangled;
2383
2384 if (name != NULL)
2385 {
2386 /* If user wants to see raw output, no problem. */
2387 if (!demangle)
2388 {
2389 fputs_filtered (name, stream);
2390 }
2391 else
2392 {
9a3d7dfd 2393 demangled = language_demangle (language_def (lang), name, arg_mode);
c906108c
SS
2394 fputs_filtered (demangled ? demangled : name, stream);
2395 if (demangled != NULL)
2396 {
b8c9b27d 2397 xfree (demangled);
c906108c
SS
2398 }
2399 }
2400 }
2401}
2402
2403/* Do a strcmp() type operation on STRING1 and STRING2, ignoring any
2404 differences in whitespace. Returns 0 if they match, non-zero if they
2405 don't (slightly different than strcmp()'s range of return values).
c5aa993b 2406
c906108c
SS
2407 As an extra hack, string1=="FOO(ARGS)" matches string2=="FOO".
2408 This "feature" is useful when searching for matching C++ function names
2409 (such as if the user types 'break FOO', where FOO is a mangled C++
2410 function). */
2411
2412int
fba45db2 2413strcmp_iw (const char *string1, const char *string2)
c906108c
SS
2414{
2415 while ((*string1 != '\0') && (*string2 != '\0'))
2416 {
2417 while (isspace (*string1))
2418 {
2419 string1++;
2420 }
2421 while (isspace (*string2))
2422 {
2423 string2++;
2424 }
2425 if (*string1 != *string2)
2426 {
2427 break;
2428 }
2429 if (*string1 != '\0')
2430 {
2431 string1++;
2432 string2++;
2433 }
2434 }
2435 return (*string1 != '\0' && *string1 != '(') || (*string2 != '\0');
2436}
2de7ced7 2437
0fe19209
DC
2438/* This is like strcmp except that it ignores whitespace and treats
2439 '(' as the first non-NULL character in terms of ordering. Like
2440 strcmp (and unlike strcmp_iw), it returns negative if STRING1 <
2441 STRING2, 0 if STRING2 = STRING2, and positive if STRING1 > STRING2
2442 according to that ordering.
2443
2444 If a list is sorted according to this function and if you want to
2445 find names in the list that match some fixed NAME according to
2446 strcmp_iw(LIST_ELT, NAME), then the place to start looking is right
2447 where this function would put NAME.
2448
2449 Here are some examples of why using strcmp to sort is a bad idea:
2450
2451 Whitespace example:
2452
2453 Say your partial symtab contains: "foo<char *>", "goo". Then, if
2454 we try to do a search for "foo<char*>", strcmp will locate this
2455 after "foo<char *>" and before "goo". Then lookup_partial_symbol
2456 will start looking at strings beginning with "goo", and will never
2457 see the correct match of "foo<char *>".
2458
2459 Parenthesis example:
2460
2461 In practice, this is less like to be an issue, but I'll give it a
2462 shot. Let's assume that '$' is a legitimate character to occur in
2463 symbols. (Which may well even be the case on some systems.) Then
2464 say that the partial symbol table contains "foo$" and "foo(int)".
2465 strcmp will put them in this order, since '$' < '('. Now, if the
2466 user searches for "foo", then strcmp will sort "foo" before "foo$".
2467 Then lookup_partial_symbol will notice that strcmp_iw("foo$",
2468 "foo") is false, so it won't proceed to the actual match of
2469 "foo(int)" with "foo". */
2470
2471int
2472strcmp_iw_ordered (const char *string1, const char *string2)
2473{
2474 while ((*string1 != '\0') && (*string2 != '\0'))
2475 {
2476 while (isspace (*string1))
2477 {
2478 string1++;
2479 }
2480 while (isspace (*string2))
2481 {
2482 string2++;
2483 }
2484 if (*string1 != *string2)
2485 {
2486 break;
2487 }
2488 if (*string1 != '\0')
2489 {
2490 string1++;
2491 string2++;
2492 }
2493 }
2494
2495 switch (*string1)
2496 {
2497 /* Characters are non-equal unless they're both '\0'; we want to
2498 make sure we get the comparison right according to our
2499 comparison in the cases where one of them is '\0' or '('. */
2500 case '\0':
2501 if (*string2 == '\0')
2502 return 0;
2503 else
2504 return -1;
2505 case '(':
2506 if (*string2 == '\0')
2507 return 1;
2508 else
2509 return -1;
2510 default:
2511 if (*string2 == '(')
2512 return 1;
2513 else
2514 return *string1 - *string2;
2515 }
2516}
2517
2de7ced7
DJ
2518/* A simple comparison function with opposite semantics to strcmp. */
2519
2520int
2521streq (const char *lhs, const char *rhs)
2522{
2523 return !strcmp (lhs, rhs);
2524}
c906108c 2525\f
c5aa993b 2526
c906108c 2527/*
c5aa993b
JM
2528 ** subset_compare()
2529 ** Answer whether string_to_compare is a full or partial match to
2530 ** template_string. The partial match must be in sequence starting
2531 ** at index 0.
2532 */
c906108c 2533int
fba45db2 2534subset_compare (char *string_to_compare, char *template_string)
7a292a7a
SS
2535{
2536 int match;
8731e58e
AC
2537 if (template_string != (char *) NULL && string_to_compare != (char *) NULL
2538 && strlen (string_to_compare) <= strlen (template_string))
2539 match =
2540 (strncmp
2541 (template_string, string_to_compare, strlen (string_to_compare)) == 0);
7a292a7a
SS
2542 else
2543 match = 0;
2544 return match;
2545}
c906108c 2546
7a292a7a 2547static void
fba45db2 2548pagination_on_command (char *arg, int from_tty)
c906108c
SS
2549{
2550 pagination_enabled = 1;
2551}
2552
7a292a7a 2553static void
fba45db2 2554pagination_off_command (char *arg, int from_tty)
c906108c
SS
2555{
2556 pagination_enabled = 0;
2557}
75feb17d
DJ
2558
2559static void
2560show_debug_timestamp (struct ui_file *file, int from_tty,
2561 struct cmd_list_element *c, const char *value)
2562{
2563 fprintf_filtered (file, _("Timestamping debugging messages is %s.\n"), value);
2564}
c906108c 2565\f
c5aa993b 2566
c906108c 2567void
fba45db2 2568initialize_utils (void)
c906108c
SS
2569{
2570 struct cmd_list_element *c;
2571
35096d9d
AC
2572 add_setshow_uinteger_cmd ("width", class_support, &chars_per_line, _("\
2573Set number of characters gdb thinks are in a line."), _("\
2574Show number of characters gdb thinks are in a line."), NULL,
2575 set_width_command,
920d2a44 2576 show_chars_per_line,
35096d9d
AC
2577 &setlist, &showlist);
2578
2579 add_setshow_uinteger_cmd ("height", class_support, &lines_per_page, _("\
2580Set number of lines gdb thinks are in a page."), _("\
2581Show number of lines gdb thinks are in a page."), NULL,
2582 set_height_command,
920d2a44 2583 show_lines_per_page,
35096d9d 2584 &setlist, &showlist);
c5aa993b 2585
c906108c
SS
2586 init_page_info ();
2587
5bf193a2
AC
2588 add_setshow_boolean_cmd ("demangle", class_support, &demangle, _("\
2589Set demangling of encoded C++/ObjC names when displaying symbols."), _("\
2590Show demangling of encoded C++/ObjC names when displaying symbols."), NULL,
2591 NULL,
920d2a44 2592 show_demangle,
5bf193a2
AC
2593 &setprintlist, &showprintlist);
2594
2595 add_setshow_boolean_cmd ("pagination", class_support,
2596 &pagination_enabled, _("\
2597Set state of pagination."), _("\
2598Show state of pagination."), NULL,
2599 NULL,
920d2a44 2600 show_pagination_enabled,
5bf193a2 2601 &setlist, &showlist);
4261bedc 2602
c906108c
SS
2603 if (xdb_commands)
2604 {
c5aa993b 2605 add_com ("am", class_support, pagination_on_command,
1bedd215 2606 _("Enable pagination"));
c5aa993b 2607 add_com ("sm", class_support, pagination_off_command,
1bedd215 2608 _("Disable pagination"));
c906108c
SS
2609 }
2610
5bf193a2
AC
2611 add_setshow_boolean_cmd ("sevenbit-strings", class_support,
2612 &sevenbit_strings, _("\
2613Set printing of 8-bit characters in strings as \\nnn."), _("\
2614Show printing of 8-bit characters in strings as \\nnn."), NULL,
2615 NULL,
920d2a44 2616 show_sevenbit_strings,
5bf193a2
AC
2617 &setprintlist, &showprintlist);
2618
2619 add_setshow_boolean_cmd ("asm-demangle", class_support, &asm_demangle, _("\
2620Set demangling of C++/ObjC names in disassembly listings."), _("\
2621Show demangling of C++/ObjC names in disassembly listings."), NULL,
2622 NULL,
920d2a44 2623 show_asm_demangle,
5bf193a2 2624 &setprintlist, &showprintlist);
75feb17d
DJ
2625
2626 add_setshow_boolean_cmd ("timestamp", class_maintenance,
2627 &debug_timestamp, _("\
2628Set timestamping of debugging messages."), _("\
2629Show timestamping of debugging messages."), _("\
2630When set, debugging messages will be marked with seconds and microseconds."),
2631 NULL,
2632 show_debug_timestamp,
2633 &setdebuglist, &showdebuglist);
c906108c
SS
2634}
2635
2636/* Machine specific function to handle SIGWINCH signal. */
2637
2638#ifdef SIGWINCH_HANDLER_BODY
c5aa993b 2639SIGWINCH_HANDLER_BODY
c906108c 2640#endif
5683e87a 2641/* print routines to handle variable size regs, etc. */
c906108c
SS
2642/* temporary storage using circular buffer */
2643#define NUMCELLS 16
0759e0bf 2644#define CELLSIZE 50
c5aa993b 2645static char *
fba45db2 2646get_cell (void)
c906108c
SS
2647{
2648 static char buf[NUMCELLS][CELLSIZE];
c5aa993b
JM
2649 static int cell = 0;
2650 if (++cell >= NUMCELLS)
2651 cell = 0;
c906108c
SS
2652 return buf[cell];
2653}
2654
d4f3574e
SS
2655int
2656strlen_paddr (void)
2657{
17a912b6 2658 return (gdbarch_addr_bit (current_gdbarch) / 8 * 2);
d4f3574e
SS
2659}
2660
c5aa993b 2661char *
104c1213 2662paddr (CORE_ADDR addr)
c906108c 2663{
17a912b6 2664 return phex (addr, gdbarch_addr_bit (current_gdbarch) / 8);
c906108c
SS
2665}
2666
c5aa993b 2667char *
104c1213 2668paddr_nz (CORE_ADDR addr)
c906108c 2669{
17a912b6 2670 return phex_nz (addr, gdbarch_addr_bit (current_gdbarch) / 8);
c906108c
SS
2671}
2672
66bf4b3a
AC
2673const char *
2674paddress (CORE_ADDR addr)
2675{
2676 /* Truncate address to the size of a target address, avoiding shifts
2677 larger or equal than the width of a CORE_ADDR. The local
2678 variable ADDR_BIT stops the compiler reporting a shift overflow
2679 when it won't occur. */
2680 /* NOTE: This assumes that the significant address information is
2681 kept in the least significant bits of ADDR - the upper bits were
76e71323 2682 either zero or sign extended. Should gdbarch_address_to_pointer or
66bf4b3a
AC
2683 some ADDRESS_TO_PRINTABLE() be used to do the conversion? */
2684
17a912b6 2685 int addr_bit = gdbarch_addr_bit (current_gdbarch);
66bf4b3a
AC
2686
2687 if (addr_bit < (sizeof (CORE_ADDR) * HOST_CHAR_BIT))
2688 addr &= ((CORE_ADDR) 1 << addr_bit) - 1;
2689 return hex_string (addr);
2690}
2691
8cf46f62
MK
2692static char *
2693decimal2str (char *sign, ULONGEST addr, int width)
104c1213 2694{
8cf46f62 2695 /* Steal code from valprint.c:print_decimal(). Should this worry
104c1213
JM
2696 about the real size of addr as the above does? */
2697 unsigned long temp[3];
8cf46f62
MK
2698 char *str = get_cell ();
2699
104c1213
JM
2700 int i = 0;
2701 do
2702 {
2703 temp[i] = addr % (1000 * 1000 * 1000);
2704 addr /= (1000 * 1000 * 1000);
2705 i++;
bb599908 2706 width -= 9;
104c1213
JM
2707 }
2708 while (addr != 0 && i < (sizeof (temp) / sizeof (temp[0])));
8cf46f62 2709
bb599908
PH
2710 width += 9;
2711 if (width < 0)
2712 width = 0;
8cf46f62 2713
104c1213
JM
2714 switch (i)
2715 {
2716 case 1:
8cf46f62 2717 xsnprintf (str, CELLSIZE, "%s%0*lu", sign, width, temp[0]);
104c1213
JM
2718 break;
2719 case 2:
8cf46f62
MK
2720 xsnprintf (str, CELLSIZE, "%s%0*lu%09lu", sign, width,
2721 temp[1], temp[0]);
104c1213
JM
2722 break;
2723 case 3:
8cf46f62
MK
2724 xsnprintf (str, CELLSIZE, "%s%0*lu%09lu%09lu", sign, width,
2725 temp[2], temp[1], temp[0]);
bb599908
PH
2726 break;
2727 default:
2728 internal_error (__FILE__, __LINE__,
e2e0b3e5 2729 _("failed internal consistency check"));
bb599908 2730 }
8cf46f62
MK
2731
2732 return str;
bb599908
PH
2733}
2734
8cf46f62
MK
2735static char *
2736octal2str (ULONGEST addr, int width)
bb599908
PH
2737{
2738 unsigned long temp[3];
8cf46f62
MK
2739 char *str = get_cell ();
2740
bb599908
PH
2741 int i = 0;
2742 do
2743 {
2744 temp[i] = addr % (0100000 * 0100000);
2745 addr /= (0100000 * 0100000);
2746 i++;
2747 width -= 10;
2748 }
2749 while (addr != 0 && i < (sizeof (temp) / sizeof (temp[0])));
8cf46f62 2750
bb599908
PH
2751 width += 10;
2752 if (width < 0)
2753 width = 0;
8cf46f62 2754
bb599908
PH
2755 switch (i)
2756 {
2757 case 1:
2758 if (temp[0] == 0)
8cf46f62 2759 xsnprintf (str, CELLSIZE, "%*o", width, 0);
bb599908 2760 else
8cf46f62 2761 xsnprintf (str, CELLSIZE, "0%0*lo", width, temp[0]);
bb599908
PH
2762 break;
2763 case 2:
8cf46f62 2764 xsnprintf (str, CELLSIZE, "0%0*lo%010lo", width, temp[1], temp[0]);
bb599908
PH
2765 break;
2766 case 3:
8cf46f62
MK
2767 xsnprintf (str, CELLSIZE, "0%0*lo%010lo%010lo", width,
2768 temp[2], temp[1], temp[0]);
104c1213
JM
2769 break;
2770 default:
8731e58e 2771 internal_error (__FILE__, __LINE__,
e2e0b3e5 2772 _("failed internal consistency check"));
104c1213 2773 }
8cf46f62
MK
2774
2775 return str;
104c1213
JM
2776}
2777
2778char *
623d3eb1 2779pulongest (ULONGEST u)
104c1213 2780{
623d3eb1 2781 return decimal2str ("", u, 0);
104c1213
JM
2782}
2783
2784char *
623d3eb1 2785plongest (LONGEST l)
104c1213 2786{
623d3eb1
DE
2787 if (l < 0)
2788 return decimal2str ("-", -l, 0);
104c1213 2789 else
623d3eb1 2790 return decimal2str ("", l, 0);
104c1213
JM
2791}
2792
8cf46f62 2793/* Eliminate warning from compiler on 32-bit systems. */
5683e87a
AC
2794static int thirty_two = 32;
2795
104c1213 2796char *
5683e87a 2797phex (ULONGEST l, int sizeof_l)
104c1213 2798{
45a1e866 2799 char *str;
8cf46f62 2800
5683e87a 2801 switch (sizeof_l)
104c1213
JM
2802 {
2803 case 8:
45a1e866 2804 str = get_cell ();
8cf46f62
MK
2805 xsnprintf (str, CELLSIZE, "%08lx%08lx",
2806 (unsigned long) (l >> thirty_two),
2807 (unsigned long) (l & 0xffffffff));
104c1213
JM
2808 break;
2809 case 4:
45a1e866 2810 str = get_cell ();
8cf46f62 2811 xsnprintf (str, CELLSIZE, "%08lx", (unsigned long) l);
104c1213
JM
2812 break;
2813 case 2:
45a1e866 2814 str = get_cell ();
8cf46f62 2815 xsnprintf (str, CELLSIZE, "%04x", (unsigned short) (l & 0xffff));
104c1213
JM
2816 break;
2817 default:
45a1e866 2818 str = phex (l, sizeof (l));
5683e87a 2819 break;
104c1213 2820 }
8cf46f62 2821
5683e87a 2822 return str;
104c1213
JM
2823}
2824
c5aa993b 2825char *
5683e87a 2826phex_nz (ULONGEST l, int sizeof_l)
c906108c 2827{
faf833ca 2828 char *str;
8cf46f62 2829
5683e87a 2830 switch (sizeof_l)
c906108c 2831 {
c5aa993b
JM
2832 case 8:
2833 {
5683e87a 2834 unsigned long high = (unsigned long) (l >> thirty_two);
faf833ca 2835 str = get_cell ();
c5aa993b 2836 if (high == 0)
8cf46f62
MK
2837 xsnprintf (str, CELLSIZE, "%lx",
2838 (unsigned long) (l & 0xffffffff));
c5aa993b 2839 else
8cf46f62
MK
2840 xsnprintf (str, CELLSIZE, "%lx%08lx", high,
2841 (unsigned long) (l & 0xffffffff));
c906108c 2842 break;
c5aa993b
JM
2843 }
2844 case 4:
faf833ca 2845 str = get_cell ();
8cf46f62 2846 xsnprintf (str, CELLSIZE, "%lx", (unsigned long) l);
c5aa993b
JM
2847 break;
2848 case 2:
faf833ca 2849 str = get_cell ();
8cf46f62 2850 xsnprintf (str, CELLSIZE, "%x", (unsigned short) (l & 0xffff));
c5aa993b
JM
2851 break;
2852 default:
faf833ca 2853 str = phex_nz (l, sizeof (l));
5683e87a 2854 break;
c906108c 2855 }
8cf46f62 2856
5683e87a 2857 return str;
c906108c 2858}
ac2e2ef7 2859
0759e0bf
AC
2860/* Converts a LONGEST to a C-format hexadecimal literal and stores it
2861 in a static string. Returns a pointer to this string. */
2862char *
2863hex_string (LONGEST num)
2864{
2865 char *result = get_cell ();
8cf46f62 2866 xsnprintf (result, CELLSIZE, "0x%s", phex_nz (num, sizeof (num)));
0759e0bf
AC
2867 return result;
2868}
2869
2870/* Converts a LONGEST number to a C-format hexadecimal literal and
2871 stores it in a static string. Returns a pointer to this string
2872 that is valid until the next call. The number is padded on the
2873 left with 0s to at least WIDTH characters. */
2874char *
2875hex_string_custom (LONGEST num, int width)
2876{
2877 char *result = get_cell ();
2878 char *result_end = result + CELLSIZE - 1;
2879 const char *hex = phex_nz (num, sizeof (num));
2880 int hex_len = strlen (hex);
2881
2882 if (hex_len > width)
2883 width = hex_len;
2884 if (width + 2 >= CELLSIZE)
2885 internal_error (__FILE__, __LINE__,
e2e0b3e5 2886 _("hex_string_custom: insufficient space to store result"));
0759e0bf
AC
2887
2888 strcpy (result_end - width - 2, "0x");
2889 memset (result_end - width, '0', width);
2890 strcpy (result_end - hex_len, hex);
2891 return result_end - width - 2;
2892}
ac2e2ef7 2893
bb599908
PH
2894/* Convert VAL to a numeral in the given radix. For
2895 * radix 10, IS_SIGNED may be true, indicating a signed quantity;
2896 * otherwise VAL is interpreted as unsigned. If WIDTH is supplied,
2897 * it is the minimum width (0-padded if needed). USE_C_FORMAT means
2898 * to use C format in all cases. If it is false, then 'x'
2899 * and 'o' formats do not include a prefix (0x or leading 0). */
2900
2901char *
2902int_string (LONGEST val, int radix, int is_signed, int width,
2903 int use_c_format)
2904{
2905 switch (radix)
2906 {
2907 case 16:
2908 {
2909 char *result;
2910 if (width == 0)
2911 result = hex_string (val);
2912 else
2913 result = hex_string_custom (val, width);
2914 if (! use_c_format)
2915 result += 2;
2916 return result;
2917 }
2918 case 10:
2919 {
bb599908 2920 if (is_signed && val < 0)
8cf46f62 2921 return decimal2str ("-", -val, width);
bb599908 2922 else
8cf46f62 2923 return decimal2str ("", val, width);
bb599908
PH
2924 }
2925 case 8:
2926 {
8cf46f62 2927 char *result = octal2str (val, width);
bb599908
PH
2928 if (use_c_format || val == 0)
2929 return result;
2930 else
2931 return result + 1;
2932 }
2933 default:
2934 internal_error (__FILE__, __LINE__,
e2e0b3e5 2935 _("failed internal consistency check"));
bb599908
PH
2936 }
2937}
2938
03dd37c3
AC
2939/* Convert a CORE_ADDR into a string. */
2940const char *
2941core_addr_to_string (const CORE_ADDR addr)
49b563f9
KS
2942{
2943 char *str = get_cell ();
2944 strcpy (str, "0x");
2945 strcat (str, phex (addr, sizeof (addr)));
2946 return str;
2947}
2948
2949const char *
2950core_addr_to_string_nz (const CORE_ADDR addr)
03dd37c3
AC
2951{
2952 char *str = get_cell ();
2953 strcpy (str, "0x");
2954 strcat (str, phex_nz (addr, sizeof (addr)));
2955 return str;
2956}
2957
2958/* Convert a string back into a CORE_ADDR. */
2959CORE_ADDR
2960string_to_core_addr (const char *my_string)
2961{
9544c605 2962 int addr_bit = gdbarch_addr_bit (current_gdbarch);
03dd37c3 2963 CORE_ADDR addr = 0;
9544c605 2964
03dd37c3
AC
2965 if (my_string[0] == '0' && tolower (my_string[1]) == 'x')
2966 {
ced572fe 2967 /* Assume that it is in hex. */
03dd37c3
AC
2968 int i;
2969 for (i = 2; my_string[i] != '\0'; i++)
2970 {
2971 if (isdigit (my_string[i]))
2972 addr = (my_string[i] - '0') + (addr * 16);
8731e58e 2973 else if (isxdigit (my_string[i]))
03dd37c3
AC
2974 addr = (tolower (my_string[i]) - 'a' + 0xa) + (addr * 16);
2975 else
63f06803 2976 error (_("invalid hex \"%s\""), my_string);
03dd37c3 2977 }
9544c605
MR
2978
2979 /* Not very modular, but if the executable format expects
2980 addresses to be sign-extended, then do so if the address was
2981 specified with only 32 significant bits. Really this should
2982 be determined by the target architecture, not by the object
2983 file. */
2984 if (i - 2 == addr_bit / 4
2985 && exec_bfd
2986 && bfd_get_sign_extend_vma (exec_bfd))
2987 addr = (addr ^ ((CORE_ADDR) 1 << (addr_bit - 1)))
2988 - ((CORE_ADDR) 1 << (addr_bit - 1));
03dd37c3
AC
2989 }
2990 else
2991 {
2992 /* Assume that it is in decimal. */
2993 int i;
2994 for (i = 0; my_string[i] != '\0'; i++)
2995 {
2996 if (isdigit (my_string[i]))
2997 addr = (my_string[i] - '0') + (addr * 10);
2998 else
63f06803 2999 error (_("invalid decimal \"%s\""), my_string);
03dd37c3
AC
3000 }
3001 }
9544c605 3002
03dd37c3
AC
3003 return addr;
3004}
58d370e0 3005
17ea7499
CES
3006const char *
3007host_address_to_string (const void *addr)
3008{
3009 char *str = get_cell ();
3010 sprintf (str, "0x%lx", (unsigned long) addr);
3011 return str;
3012}
3013
58d370e0
TT
3014char *
3015gdb_realpath (const char *filename)
3016{
70d35819
AC
3017 /* Method 1: The system has a compile time upper bound on a filename
3018 path. Use that and realpath() to canonicalize the name. This is
3019 the most common case. Note that, if there isn't a compile time
3020 upper bound, you want to avoid realpath() at all costs. */
a4db0f07 3021#if defined(HAVE_REALPATH)
70d35819 3022 {
a4db0f07 3023# if defined (PATH_MAX)
70d35819 3024 char buf[PATH_MAX];
a4db0f07
RH
3025# define USE_REALPATH
3026# elif defined (MAXPATHLEN)
70d35819 3027 char buf[MAXPATHLEN];
a4db0f07
RH
3028# define USE_REALPATH
3029# endif
70d35819 3030# if defined (USE_REALPATH)
82c0260e 3031 const char *rp = realpath (filename, buf);
70d35819
AC
3032 if (rp == NULL)
3033 rp = filename;
3034 return xstrdup (rp);
70d35819 3035# endif
6f88d630 3036 }
a4db0f07
RH
3037#endif /* HAVE_REALPATH */
3038
70d35819
AC
3039 /* Method 2: The host system (i.e., GNU) has the function
3040 canonicalize_file_name() which malloc's a chunk of memory and
3041 returns that, use that. */
3042#if defined(HAVE_CANONICALIZE_FILE_NAME)
3043 {
3044 char *rp = canonicalize_file_name (filename);
3045 if (rp == NULL)
3046 return xstrdup (filename);
3047 else
3048 return rp;
3049 }
58d370e0 3050#endif
70d35819 3051
6411e720
AC
3052 /* FIXME: cagney/2002-11-13:
3053
3054 Method 2a: Use realpath() with a NULL buffer. Some systems, due
3055 to the problems described in in method 3, have modified their
3056 realpath() implementation so that it will allocate a buffer when
3057 NULL is passed in. Before this can be used, though, some sort of
3058 configure time test would need to be added. Otherwize the code
3059 will likely core dump. */
3060
70d35819
AC
3061 /* Method 3: Now we're getting desperate! The system doesn't have a
3062 compile time buffer size and no alternative function. Query the
3063 OS, using pathconf(), for the buffer limit. Care is needed
3064 though, some systems do not limit PATH_MAX (return -1 for
3065 pathconf()) making it impossible to pass a correctly sized buffer
3066 to realpath() (it could always overflow). On those systems, we
3067 skip this. */
3068#if defined (HAVE_REALPATH) && defined (HAVE_UNISTD_H) && defined(HAVE_ALLOCA)
3069 {
3070 /* Find out the max path size. */
3071 long path_max = pathconf ("/", _PC_PATH_MAX);
3072 if (path_max > 0)
3073 {
3074 /* PATH_MAX is bounded. */
3075 char *buf = alloca (path_max);
3076 char *rp = realpath (filename, buf);
3077 return xstrdup (rp ? rp : filename);
3078 }
3079 }
3080#endif
3081
3082 /* This system is a lost cause, just dup the buffer. */
3083 return xstrdup (filename);
58d370e0 3084}
303c8ebd
JB
3085
3086/* Return a copy of FILENAME, with its directory prefix canonicalized
3087 by gdb_realpath. */
3088
3089char *
3090xfullpath (const char *filename)
3091{
3092 const char *base_name = lbasename (filename);
3093 char *dir_name;
3094 char *real_path;
3095 char *result;
3096
3097 /* Extract the basename of filename, and return immediately
3098 a copy of filename if it does not contain any directory prefix. */
3099 if (base_name == filename)
3100 return xstrdup (filename);
3101
3102 dir_name = alloca ((size_t) (base_name - filename + 2));
3103 /* Allocate enough space to store the dir_name + plus one extra
3104 character sometimes needed under Windows (see below), and
3105 then the closing \000 character */
3106 strncpy (dir_name, filename, base_name - filename);
3107 dir_name[base_name - filename] = '\000';
3108
3109#ifdef HAVE_DOS_BASED_FILE_SYSTEM
3110 /* We need to be careful when filename is of the form 'd:foo', which
3111 is equivalent of d:./foo, which is totally different from d:/foo. */
8731e58e 3112 if (strlen (dir_name) == 2 && isalpha (dir_name[0]) && dir_name[1] == ':')
303c8ebd
JB
3113 {
3114 dir_name[2] = '.';
3115 dir_name[3] = '\000';
3116 }
3117#endif
3118
3119 /* Canonicalize the directory prefix, and build the resulting
3120 filename. If the dirname realpath already contains an ending
3121 directory separator, avoid doubling it. */
3122 real_path = gdb_realpath (dir_name);
3123 if (IS_DIR_SEPARATOR (real_path[strlen (real_path) - 1]))
1754f103 3124 result = concat (real_path, base_name, (char *)NULL);
303c8ebd 3125 else
1754f103 3126 result = concat (real_path, SLASH_STRING, base_name, (char *)NULL);
303c8ebd
JB
3127
3128 xfree (real_path);
3129 return result;
3130}
5b5d99cf
JB
3131
3132
3133/* This is the 32-bit CRC function used by the GNU separate debug
3134 facility. An executable may contain a section named
3135 .gnu_debuglink, which holds the name of a separate executable file
3136 containing its debug info, and a checksum of that file's contents,
3137 computed using this function. */
3138unsigned long
3139gnu_debuglink_crc32 (unsigned long crc, unsigned char *buf, size_t len)
3140{
8731e58e
AC
3141 static const unsigned long crc32_table[256] = {
3142 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
3143 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
3144 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
3145 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
3146 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
3147 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
3148 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
3149 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
3150 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
3151 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
3152 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
3153 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
3154 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
3155 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
3156 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
3157 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
3158 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
3159 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
3160 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
3161 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
3162 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
3163 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
3164 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
3165 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
3166 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
3167 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
3168 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
3169 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
3170 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
3171 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
3172 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
3173 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
3174 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
3175 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
3176 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
3177 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
3178 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
3179 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
3180 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
3181 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
3182 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
3183 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
3184 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
3185 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
3186 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
3187 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
3188 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
3189 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
3190 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
3191 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
3192 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
3193 0x2d02ef8d
3194 };
5b5d99cf
JB
3195 unsigned char *end;
3196
3197 crc = ~crc & 0xffffffff;
3198 for (end = buf + len; buf < end; ++buf)
3199 crc = crc32_table[(crc ^ *buf) & 0xff] ^ (crc >> 8);
3200 return ~crc & 0xffffffff;;
3201}
5b03f266
AC
3202
3203ULONGEST
3204align_up (ULONGEST v, int n)
3205{
3206 /* Check that N is really a power of two. */
3207 gdb_assert (n && (n & (n-1)) == 0);
3208 return (v + n - 1) & -n;
3209}
3210
3211ULONGEST
3212align_down (ULONGEST v, int n)
3213{
3214 /* Check that N is really a power of two. */
3215 gdb_assert (n && (n & (n-1)) == 0);
3216 return (v & -n);
3217}
ae5a43e0
DJ
3218
3219/* Allocation function for the libiberty hash table which uses an
3220 obstack. The obstack is passed as DATA. */
3221
3222void *
3223hashtab_obstack_allocate (void *data, size_t size, size_t count)
3224{
3225 unsigned int total = size * count;
3226 void *ptr = obstack_alloc ((struct obstack *) data, total);
3227 memset (ptr, 0, total);
3228 return ptr;
3229}
3230
3231/* Trivial deallocation function for the libiberty splay tree and hash
3232 table - don't deallocate anything. Rely on later deletion of the
3233 obstack. DATA will be the obstack, although it is not needed
3234 here. */
3235
3236void
3237dummy_obstack_deallocate (void *object, void *data)
3238{
3239 return;
3240}
253c8abb
DJ
3241
3242/* The bit offset of the highest byte in a ULONGEST, for overflow
3243 checking. */
3244
3245#define HIGH_BYTE_POSN ((sizeof (ULONGEST) - 1) * HOST_CHAR_BIT)
3246
3247/* True (non-zero) iff DIGIT is a valid digit in radix BASE,
3248 where 2 <= BASE <= 36. */
3249
3250static int
3251is_digit_in_base (unsigned char digit, int base)
3252{
3253 if (!isalnum (digit))
3254 return 0;
3255 if (base <= 10)
3256 return (isdigit (digit) && digit < base + '0');
3257 else
3258 return (isdigit (digit) || tolower (digit) < base - 10 + 'a');
3259}
3260
3261static int
3262digit_to_int (unsigned char c)
3263{
3264 if (isdigit (c))
3265 return c - '0';
3266 else
3267 return tolower (c) - 'a' + 10;
3268}
3269
3270/* As for strtoul, but for ULONGEST results. */
3271
3272ULONGEST
3273strtoulst (const char *num, const char **trailer, int base)
3274{
3275 unsigned int high_part;
3276 ULONGEST result;
3277 int minus = 0;
3278 int i = 0;
3279
3280 /* Skip leading whitespace. */
3281 while (isspace (num[i]))
3282 i++;
3283
3284 /* Handle prefixes. */
3285 if (num[i] == '+')
3286 i++;
3287 else if (num[i] == '-')
3288 {
3289 minus = 1;
3290 i++;
3291 }
3292
3293 if (base == 0 || base == 16)
3294 {
3295 if (num[i] == '0' && (num[i + 1] == 'x' || num[i + 1] == 'X'))
3296 {
3297 i += 2;
3298 if (base == 0)
3299 base = 16;
3300 }
3301 }
3302
3303 if (base == 0 && num[i] == '0')
3304 base = 8;
3305
3306 if (base == 0)
3307 base = 10;
3308
3309 if (base < 2 || base > 36)
3310 {
3311 errno = EINVAL;
3312 return 0;
3313 }
3314
3315 result = high_part = 0;
3316 for (; is_digit_in_base (num[i], base); i += 1)
3317 {
3318 result = result * base + digit_to_int (num[i]);
3319 high_part = high_part * base + (unsigned int) (result >> HIGH_BYTE_POSN);
3320 result &= ((ULONGEST) 1 << HIGH_BYTE_POSN) - 1;
3321 if (high_part > 0xff)
3322 {
3323 errno = ERANGE;
3324 result = ~ (ULONGEST) 0;
3325 high_part = 0;
3326 minus = 0;
3327 break;
3328 }
3329 }
3330
3331 if (trailer != NULL)
3332 *trailer = &num[i];
3333
3334 result = result + ((ULONGEST) high_part << HIGH_BYTE_POSN);
3335 if (minus)
3336 return -result;
3337 else
3338 return result;
3339}
e1024ff1
DJ
3340
3341/* Simple, portable version of dirname that does not modify its
3342 argument. */
3343
3344char *
3345ldirname (const char *filename)
3346{
3347 const char *base = lbasename (filename);
3348 char *dirname;
3349
3350 while (base > filename && IS_DIR_SEPARATOR (base[-1]))
3351 --base;
3352
3353 if (base == filename)
3354 return NULL;
3355
3356 dirname = xmalloc (base - filename + 2);
3357 memcpy (dirname, filename, base - filename);
3358
3359 /* On DOS based file systems, convert "d:foo" to "d:.", so that we
3360 create "d:./bar" later instead of the (different) "d:/bar". */
3361 if (base - filename == 2 && IS_ABSOLUTE_PATH (base)
3362 && !IS_DIR_SEPARATOR (filename[0]))
3363 dirname[base++ - filename] = '.';
3364
3365 dirname[base - filename] = '\0';
3366 return dirname;
3367}
d1a41061
PP
3368
3369/* Call libiberty's buildargv, and return the result.
3370 If buildargv fails due to out-of-memory, call nomem.
3371 Therefore, the returned value is guaranteed to be non-NULL,
3372 unless the parameter itself is NULL. */
3373
3374char **
3375gdb_buildargv (const char *s)
3376{
3377 char **argv = buildargv (s);
3378 if (s != NULL && argv == NULL)
3379 nomem (0);
3380 return argv;
3381}
This page took 1.010596 seconds and 4 git commands to generate.