From 8b35a404130eeb21bb75e2773402c06a690326f4 Mon Sep 17 00:00:00 2001
From: jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Sat, 2 Sep 2006 06:52:24 +0000
Subject: [PATCH] 	PR c++/26917 	* repo.c (repo_file): Remove. 
 (open_repo_file, reopen_repo_file_for_write): Return fopened 	FILE * instead
 of setting global repo_file variable. 	(init_repo): Adjust caller. 
 (finish_repo): Likewise.  Return instead of goto out before 
 reopen_repo_file_for_write has been called.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@116654 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/cp/ChangeLog | 10 ++++++++++
 gcc/cp/repo.c    | 25 ++++++++++++++-----------
 2 files changed, 24 insertions(+), 11 deletions(-)

diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 45597c33c752..5f37ddecd4b8 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,13 @@
+2006-09-02  Jakub Jelinek  <jakub@redhat.com>
+
+	PR c++/26917
+	* repo.c (repo_file): Remove.
+	(open_repo_file, reopen_repo_file_for_write): Return fopened
+	FILE * instead of setting global repo_file variable.
+	(init_repo): Adjust caller.
+	(finish_repo): Likewise.  Return instead of goto out before
+	reopen_repo_file_for_write has been called.
+
 2006-09-01  Nathan Sidwell  <nathan@codesourcery.com>
 
 	PR c++/28705
diff --git a/gcc/cp/repo.c b/gcc/cp/repo.c
index d663cc0870ff..2bf0303302f3 100644
--- a/gcc/cp/repo.c
+++ b/gcc/cp/repo.c
@@ -40,13 +40,12 @@ Boston, MA 02110-1301, USA.  */
 
 static char *extract_string (char **);
 static const char *get_base_filename (const char *);
-static void open_repo_file (const char *);
+static FILE *open_repo_file (const char *);
 static char *afgets (FILE *);
-static void reopen_repo_file_for_write (void);
+static FILE *reopen_repo_file_for_write (void);
 
 static GTY(()) tree pending_repo;
 static char *repo_name;
-static FILE *repo_file;
 
 static const char *old_args, *old_dir, *old_main;
 
@@ -118,14 +117,14 @@ get_base_filename (const char *filename)
   return lbasename (filename);
 }
 
-static void
+static FILE *
 open_repo_file (const char *filename)
 {
   const char *p;
   const char *s = get_base_filename (filename);
 
   if (s == NULL)
-    return;
+    return NULL;
 
   p = lbasename (s);
   p = strrchr (p, '.');
@@ -136,7 +135,7 @@ open_repo_file (const char *filename)
   memcpy (repo_name, s, p - s);
   memcpy (repo_name + (p - s), ".rpo", 5);
 
-  repo_file = fopen (repo_name, "r");
+  return fopen (repo_name, "r");
 }
 
 static char *
@@ -155,6 +154,7 @@ void
 init_repo (void)
 {
   char *buf;
+  FILE *repo_file;
 
   if (! flag_use_repository)
     return;
@@ -167,7 +167,7 @@ init_repo (void)
   if (!temporary_obstack_initialized_p)
     gcc_obstack_init (&temporary_obstack);
 
-  open_repo_file (main_input_filename);
+  repo_file = open_repo_file (main_input_filename);
 
   if (repo_file == 0)
     return;
@@ -205,16 +205,18 @@ init_repo (void)
   fclose (repo_file);
 }
 
-static void
+static FILE *
 reopen_repo_file_for_write (void)
 {
-  repo_file = fopen (repo_name, "w");
+  FILE *repo_file = fopen (repo_name, "w");
 
   if (repo_file == 0)
     {
       error ("can't create repository information file %qs", repo_name);
       flag_use_repository = 0;
     }
+
+  return repo_file;
 }
 
 /* Emit any pending repos.  */
@@ -224,14 +226,15 @@ finish_repo (void)
 {
   tree t;
   char *dir, *args;
+  FILE *repo_file;
 
   if (!flag_use_repository)
     return;
 
   if (errorcount || sorrycount)
-    goto out;
+    return;
 
-  reopen_repo_file_for_write ();
+  repo_file = reopen_repo_file_for_write ();
   if (repo_file == 0)
     goto out;
 
-- 
GitLab