summaryrefslogtreecommitdiff
path: root/gcc/cp/repo.c
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2006-09-02 06:52:24 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2006-09-02 06:52:24 +0000
commit8b35a404130eeb21bb75e2773402c06a690326f4 (patch)
tree7c0f9d57466484b3bb7265d6bc6ad12fd35d834b /gcc/cp/repo.c
parent3d5945610646adb6946a3251f4953929966fed2e (diff)
downloadgcc-8b35a404130eeb21bb75e2773402c06a690326f4.tar.gz
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
Diffstat (limited to 'gcc/cp/repo.c')
-rw-r--r--gcc/cp/repo.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/gcc/cp/repo.c b/gcc/cp/repo.c
index d663cc0870f..2bf0303302f 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;