aboutsummaryrefslogtreecommitdiff
path: root/gdb/source.c
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2017-04-26 21:56:14 -0600
committerTom Tromey <tom@tromey.com>2017-08-03 07:58:54 -0600
commit4a45905b825ef230a3fbf6bb7857339b39e5af16 (patch)
tree2561c9e6b5635d28348b5ea00f90c03cefb37500 /gdb/source.c
parent7cd06d6e89c9c17d358d8edf0b7faa9dd87edc3e (diff)
downloadgdb-4a45905b825ef230a3fbf6bb7857339b39e5af16.zip
gdb-4a45905b825ef230a3fbf6bb7857339b39e5af16.tar.gz
gdb-4a45905b825ef230a3fbf6bb7857339b39e5af16.tar.bz2
Use gdb_file_up in source.c
This changes some functions in source.c to use gdb_file_up. ChangeLog 2017-08-03 Tom Tromey <tom@tromey.com> * source.c (print_source_lines_base, forward_search_command) (reverse_search_command): Use gdb_file_up.
Diffstat (limited to 'gdb/source.c')
-rw-r--r--gdb/source.c45
1 files changed, 16 insertions, 29 deletions
diff --git a/gdb/source.c b/gdb/source.c
index 8926e547..4cc862c 100644
--- a/gdb/source.c
+++ b/gdb/source.c
@@ -1353,9 +1353,7 @@ print_source_lines_base (struct symtab *s, int line, int stopline,
int c;
int desc;
int noprint = 0;
- FILE *stream;
int nlines = stopline - line;
- struct cleanup *cleanup;
struct ui_out *uiout = current_uiout;
/* Regardless of whether we can open the file, set current_source_symtab. */
@@ -1448,15 +1446,14 @@ print_source_lines_base (struct symtab *s, int line, int stopline,
perror_with_name (symtab_to_filename_for_display (s));
}
- stream = fdopen (desc, FDOPEN_MODE);
- clearerr (stream);
- cleanup = make_cleanup_fclose (stream);
+ gdb_file_up stream (fdopen (desc, FDOPEN_MODE));
+ clearerr (stream.get ());
while (nlines-- > 0)
{
char buf[20];
- c = fgetc (stream);
+ c = fgetc (stream.get ());
if (c == EOF)
break;
last_line_listed = current_source_line;
@@ -1479,12 +1476,12 @@ print_source_lines_base (struct symtab *s, int line, int stopline,
else if (c == '\r')
{
/* Skip a \r character, but only before a \n. */
- int c1 = fgetc (stream);
+ int c1 = fgetc (stream.get ());
if (c1 != '\n')
printf_filtered ("^%c", c + 0100);
if (c1 != EOF)
- ungetc (c1, stream);
+ ungetc (c1, stream.get ());
}
else
{
@@ -1492,10 +1489,8 @@ print_source_lines_base (struct symtab *s, int line, int stopline,
uiout->text (buf);
}
}
- while (c != '\n' && (c = fgetc (stream)) >= 0);
+ while (c != '\n' && (c = fgetc (stream.get ())) >= 0);
}
-
- do_cleanups (cleanup);
}
/* Show source lines from the file of symtab S, starting with line
@@ -1630,7 +1625,6 @@ forward_search_command (char *regex, int from_tty)
{
int c;
int desc;
- FILE *stream;
int line;
char *msg;
struct cleanup *cleanups;
@@ -1659,9 +1653,8 @@ forward_search_command (char *regex, int from_tty)
perror_with_name (symtab_to_filename_for_display (current_source_symtab));
discard_cleanups (cleanups);
- stream = fdopen (desc, FDOPEN_MODE);
- clearerr (stream);
- cleanups = make_cleanup_fclose (stream);
+ gdb_file_up stream (fdopen (desc, FDOPEN_MODE));
+ clearerr (stream.get ());
while (1)
{
static char *buf = NULL;
@@ -1672,7 +1665,7 @@ forward_search_command (char *regex, int from_tty)
buf = (char *) xmalloc (cursize);
p = buf;
- c = fgetc (stream);
+ c = fgetc (stream.get ());
if (c == EOF)
break;
do
@@ -1686,7 +1679,7 @@ forward_search_command (char *regex, int from_tty)
cursize = newsize;
}
}
- while (c != '\n' && (c = fgetc (stream)) >= 0);
+ while (c != '\n' && (c = fgetc (stream.get ())) >= 0);
/* Remove the \r, if any, at the end of the line, otherwise
regular expressions that end with $ or \n won't work. */
@@ -1701,7 +1694,6 @@ forward_search_command (char *regex, int from_tty)
if (re_exec (buf) > 0)
{
/* Match! */
- do_cleanups (cleanups);
print_source_lines (current_source_symtab, line, line + 1, 0);
set_internalvar_integer (lookup_internalvar ("_"), line);
current_source_line = std::max (line - lines_to_list / 2, 1);
@@ -1711,7 +1703,6 @@ forward_search_command (char *regex, int from_tty)
}
printf_filtered (_("Expression not found\n"));
- do_cleanups (cleanups);
}
static void
@@ -1719,7 +1710,6 @@ reverse_search_command (char *regex, int from_tty)
{
int c;
int desc;
- FILE *stream;
int line;
char *msg;
struct cleanup *cleanups;
@@ -1748,23 +1738,22 @@ reverse_search_command (char *regex, int from_tty)
perror_with_name (symtab_to_filename_for_display (current_source_symtab));
discard_cleanups (cleanups);
- stream = fdopen (desc, FDOPEN_MODE);
- clearerr (stream);
- cleanups = make_cleanup_fclose (stream);
+ gdb_file_up stream (fdopen (desc, FDOPEN_MODE));
+ clearerr (stream.get ());
while (line > 1)
{
/* FIXME!!! We walk right off the end of buf if we get a long line!!! */
char buf[4096]; /* Should be reasonable??? */
char *p = buf;
- c = fgetc (stream);
+ c = fgetc (stream.get ());
if (c == EOF)
break;
do
{
*p++ = c;
}
- while (c != '\n' && (c = fgetc (stream)) >= 0);
+ while (c != '\n' && (c = fgetc (stream.get ())) >= 0);
/* Remove the \r, if any, at the end of the line, otherwise
regular expressions that end with $ or \n won't work. */
@@ -1779,25 +1768,23 @@ reverse_search_command (char *regex, int from_tty)
if (re_exec (buf) > 0)
{
/* Match! */
- do_cleanups (cleanups);
print_source_lines (current_source_symtab, line, line + 1, 0);
set_internalvar_integer (lookup_internalvar ("_"), line);
current_source_line = std::max (line - lines_to_list / 2, 1);
return;
}
line--;
- if (fseek (stream, current_source_symtab->line_charpos[line - 1], 0) < 0)
+ if (fseek (stream.get (),
+ current_source_symtab->line_charpos[line - 1], 0) < 0)
{
const char *filename;
- do_cleanups (cleanups);
filename = symtab_to_filename_for_display (current_source_symtab);
perror_with_name (filename);
}
}
printf_filtered (_("Expression not found\n"));
- do_cleanups (cleanups);
return;
}