diff options
-rw-r--r-- | gcc/cp/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/cp/repo.c | 25 |
2 files changed, 24 insertions, 11 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 45597c33c75..5f37ddecd4b 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 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; |