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