aboutsummaryrefslogtreecommitdiff
path: root/gcc/c-pch.c
diff options
context:
space:
mode:
authorGeoffrey Keating <geoffk@apple.com>2003-12-17 22:04:34 +0000
committerGeoffrey Keating <geoffk@apple.com>2003-12-17 22:04:34 +0000
commit9c090a67fd2076d9731ee66f2b54d5ed99d4a521 (patch)
tree2780844c969fe224c893796f8799394d93765178 /gcc/c-pch.c
parent7d39ba24f9177719782b059da9ef2a5829729dce (diff)
PR 12480
* c-pch.c (pch_init): Improve error message when precompiled header can't be written. PR 12606 * c-pch.c (pch_init): Make a PCH file appear invalid while it's being written. (c_common_write_pch): Make it valid once it's done. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@74754 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/c-pch.c')
-rw-r--r--gcc/c-pch.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/gcc/c-pch.c b/gcc/c-pch.c
index a30310226ff..157061f9177 100644
--- a/gcc/c-pch.c
+++ b/gcc/c-pch.c
@@ -102,13 +102,14 @@ pch_init (void)
FILE *f;
struct c_pch_validity v;
void *target_validity;
+ static const char partial_pch[IDENT_LENGTH] = "gpcWrite";
if (! pch_file)
return;
f = fopen (pch_file, "w+b");
if (f == NULL)
- fatal_error ("can't open %s: %m", pch_file);
+ fatal_error ("can't create precompiled header %s: %m", pch_file);
pch_outfile = f;
if (strlen (host_machine) > 255 || strlen (target_machine) > 255
@@ -122,7 +123,7 @@ pch_init (void)
v.pch_init = &pch_init;
target_validity = targetm.get_pch_validity (&v.target_data_length);
- if (fwrite (get_ident(), IDENT_LENGTH, 1, f) != 1
+ if (fwrite (partial_pch, IDENT_LENGTH, 1, f) != 1
|| fwrite (&v, sizeof (v), 1, f) != 1
|| fwrite (host_machine, v.host_machine_length, 1, f) != 1
|| fwrite (target_machine, v.target_machine_length, 1, f) != 1
@@ -189,6 +190,10 @@ c_common_write_pch (void)
gt_pch_save (pch_outfile);
cpp_write_pch_state (parse_in, pch_outfile);
+ if (fseek (pch_outfile, 0, SEEK_SET) != 0
+ || fwrite (get_ident (), IDENT_LENGTH, 1, pch_outfile) != 1)
+ fatal_error ("can't write %s: %m", pch_file);
+
fclose (pch_outfile);
}