aboutsummaryrefslogtreecommitdiff
path: root/src/ProtoGen
diff options
context:
space:
mode:
authorcsharptest <roger@csharptest.net>2010-12-15 20:59:36 -0600
committercsharptest <roger@csharptest.net>2010-12-15 20:59:36 -0600
commit7691473a71a15b75d7e7317af7a9db60365f30df (patch)
treebb439b33ccde85b5ac3b38ce460c4f6ee1a27920 /src/ProtoGen
parent30d3fa320573ae7be306b97cccb52c1d281d3d03 (diff)
downloadprotobuf-7691473a71a15b75d7e7317af7a9db60365f30df.tar.gz
protobuf-7691473a71a15b75d7e7317af7a9db60365f30df.tar.bz2
protobuf-7691473a71a15b75d7e7317af7a9db60365f30df.zip
Completion of 3.5 build integration and Lite runtime build changes.
Diffstat (limited to 'src/ProtoGen')
-rw-r--r--src/ProtoGen/Generator.cs22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/ProtoGen/Generator.cs b/src/ProtoGen/Generator.cs
index f588c141..3118808d 100644
--- a/src/ProtoGen/Generator.cs
+++ b/src/ProtoGen/Generator.cs
@@ -93,9 +93,25 @@ namespace Google.ProtocolBuffers.ProtoGen {
/// </summary>
private void Generate(FileDescriptor descriptor) {
UmbrellaClassGenerator ucg = new UmbrellaClassGenerator(descriptor);
- using (TextWriter textWriter = File.CreateText(GetOutputFile(descriptor))) {
- TextGenerator writer = new TextGenerator(textWriter);
- ucg.Generate(writer);
+ string tempFile = Path.GetTempFileName();
+ try {
+ using (Stream fstream = File.Open(GetOutputFile(descriptor), FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read)) {
+ using (TextWriter textWriter = File.CreateText(tempFile)) {
+ TextGenerator writer = new TextGenerator(textWriter);
+ ucg.Generate(writer);
+ }
+ fstream.SetLength(0);
+ using (TextReader input = new StreamReader(tempFile))
+ using (TextWriter output = new StreamWriter(fstream)) {
+ string line;
+ while (null != (line = input.ReadLine()))
+ output.WriteLine(line);
+ }
+ }
+ }
+ finally {
+ if (File.Exists(tempFile))
+ File.Delete(tempFile);
}
}