diff options
Diffstat (limited to 'gdb/source.c')
-rw-r--r-- | gdb/source.c | 51 |
1 files changed, 37 insertions, 14 deletions
diff --git a/gdb/source.c b/gdb/source.c index b86df91..f7d48a9 100644 --- a/gdb/source.c +++ b/gdb/source.c @@ -1,5 +1,5 @@ /* List lines of source files for GDB, the GNU debugger. - Copyright 1986, 1987, 1988, 1989, 1991, 1992, 1993, 1994, 1995 + Copyright 1986, 87, 88, 89, 91, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. This file is part of GDB. @@ -41,6 +41,26 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "annotate.h" #include "gdbtypes.h" +#ifdef CRLF_SOURCE_FILES + +/* Define CRLF_SOURCE_FILES in an xm-*.h file if source files on the + host use \r\n rather than just \n. Defining CRLF_SOURCE_FILES is + much faster than defining LSEEK_NOT_LINEAR. */ + +#ifndef O_BINARY +#define O_BINARY 0 +#endif + +#define OPEN_MODE (O_RDONLY | O_BINARY) +#define FDOPEN_MODE FOPEN_RB + +#else /* ! defined (CRLF_SOURCE_FILES) */ + +#define OPEN_MODE O_RDONLY +#define FDOPEN_MODE FOPEN_RT + +#endif /* ! defined (CRLF_SOURCE_FILES) */ + /* Prototypes for local functions. */ static int open_source_file PARAMS ((struct symtab *)); @@ -63,11 +83,6 @@ static void show_directories PARAMS ((char *, int)); static void find_source_lines PARAMS ((struct symtab *, int)); -/* If we use this declaration, it breaks because of fucking ANSI "const" stuff - on some systems. We just have to not declare it at all, have it default - to int, and possibly botch on a few systems. Thanks, ANSIholes... */ -/* extern char *strstr(); */ - /* Path of directories to search for source files. Same format as the PATH environment variable's value. */ @@ -184,6 +199,8 @@ select_source_symtab (s) current_source_symtab = PSYMTAB_TO_SYMTAB (cs_pst); } } + if (current_source_symtab) + return; error ("Can't find a default source file"); } @@ -607,7 +624,7 @@ open_source_file (s) /* Quick way out if we already know its full name */ if (s->fullname) { - result = open (s->fullname, O_RDONLY); + result = open (s->fullname, OPEN_MODE); if (result >= 0) return result; /* Didn't work -- free old one, try again. */ @@ -636,13 +653,13 @@ open_source_file (s) } } - result = openp (path, 0, s->filename, O_RDONLY, 0, &s->fullname); + result = openp (path, 0, s->filename, OPEN_MODE, 0, &s->fullname); if (result < 0) { /* Didn't work. Try using just the basename. */ p = basename (s->filename); if (p != s->filename) - result = openp (path, 0, p, O_RDONLY, 0, &s->fullname); + result = openp (path, 0, p, OPEN_MODE, 0, &s->fullname); } #ifdef MPW if (result < 0) @@ -650,14 +667,14 @@ open_source_file (s) /* Didn't work. Try using just the MPW basename. */ p = (char *) mpw_basename (s->filename); if (p != s->filename) - result = openp (path, 0, p, O_RDONLY, 0, &s->fullname); + result = openp (path, 0, p, OPEN_MODE, 0, &s->fullname); } if (result < 0) { /* Didn't work. Try using the mixed Unix/MPW basename. */ p = (char *) mpw_mixed_basename (s->filename); if (p != s->filename) - result = openp (path, 0, p, O_RDONLY, 0, &s->fullname); + result = openp (path, 0, p, OPEN_MODE, 0, &s->fullname); } #endif /* MPW */ @@ -955,7 +972,7 @@ print_source_lines (s, line, stopline, noerror) perror_with_name (s->filename); } - stream = fdopen (desc, FOPEN_RT); + stream = fdopen (desc, FDOPEN_MODE); clearerr (stream); while (nlines-- > 0) @@ -970,6 +987,12 @@ print_source_lines (s, line, stopline, noerror) printf_filtered ("^%c", c + 0100); else if (c == 0177) printf_filtered ("^?"); +#ifdef CRLF_SOURCE_FILES + else if (c == '\r') + { + /* Just skip \r characters. */ + } +#endif else printf_filtered ("%c", c); } while (c != '\n' && (c = fgetc (stream)) >= 0); @@ -1309,7 +1332,7 @@ forward_search_command (regex, from_tty) perror_with_name (current_source_symtab->filename); } - stream = fdopen (desc, FOPEN_RT); + stream = fdopen (desc, FDOPEN_MODE); clearerr (stream); while (1) { static char *buf = NULL; @@ -1394,7 +1417,7 @@ reverse_search_command (regex, from_tty) perror_with_name (current_source_symtab->filename); } - stream = fdopen (desc, FOPEN_RT); + stream = fdopen (desc, FDOPEN_MODE); clearerr (stream); while (line > 1) { |