This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch] Code cleanup: Stream should be deleted where it got created


Hi,

I find it an obvious cleanup, I got a bug in new code due to it.  If one
passes FILE * to some function acting on it one does not expect the function
would also close it.  It makes all the error recovery cleanups too magic
otherwise.

No regressions on {x86_64,x86_64-m32,i686}-fedorarawhide-linux-gnu.


Thanks,
Jan


gdb/
2012-01-24  Jan Kratochvil  <jan.kratochvil@redhat.com>

	Code cleanup.
	* cli/cli-cmds.c (source_script_from_stream): Never fclose STREAM.
	Update the function comment for it.
	(source_script_with_search): Call make_cleanup_fclose for STREAM.
	* cli/cli-script.c (script_from_file): Do not call make_cleanup_fclose
	for STREAM.

--- a/gdb/cli/cli-cmds.c
+++ b/gdb/cli/cli-cmds.c
@@ -527,8 +527,7 @@ find_and_open_script (const char *script_file, int search_path,
   return 1;
 }
 
-/* Load script FILE, which has already been opened as STREAM.
-   STREAM is closed before we return.  */
+/* Load script FILE, which has already been opened as STREAM.  */
 
 static void
 source_script_from_stream (FILE *stream, const char *file)
@@ -554,12 +553,9 @@ source_script_from_stream (FILE *stream, const char *file)
 	  else
 	    {
 	      /* Nope, just punt.  */
-	      fclose (stream);
 	      throw_exception (e);
 	    }
 	}
-      else
-	fclose (stream);
     }
   else
     script_from_file (stream, file);
@@ -593,6 +589,7 @@ source_script_with_search (const char *file, int from_tty, int search_path)
     }
 
   old_cleanups = make_cleanup (xfree, full_path);
+  make_cleanup_fclose (stream);
   /* The python support reopens the file, so we need to pass full_path here
      in case the file was found on the search path.  It's useful to do this
      anyway so that error messages show the actual file used.  But only do
--- a/gdb/cli/cli-script.c
+++ b/gdb/cli/cli-script.c
@@ -1614,11 +1614,9 @@ script_from_file (FILE *stream, const char *file)
   if (stream == NULL)
     internal_error (__FILE__, __LINE__, _("called with NULL file pointer!"));
 
-  old_cleanups = make_cleanup_fclose (stream);
-
   old_lines.old_line = source_line_number;
   old_lines.old_file = source_file_name;
-  make_cleanup (source_cleanup_lines, &old_lines);
+  old_cleanups = make_cleanup (source_cleanup_lines, &old_lines);
   source_line_number = 0;
   source_file_name = file;
   /* This will get set every time we read a line.  So it won't stay ""


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]