X-Git-Url: http://git.code-monkey.de/?p=ruby-vorbistagger.git;a=blobdiff_plain;f=ext%2Fvcedit.c;h=38ecb9f9d384818c84df6a0e96b85274fdd34767;hp=cf63e7487217c7a36fcb479590328488928c7c63;hb=42092cfa6986555710a470db10b8bcd1f714dd16;hpb=d167e476209adeab15e067425b941509b1ed90f4 diff --git a/ext/vcedit.c b/ext/vcedit.c index cf63e74..38ecb9f 100644 --- a/ext/vcedit.c +++ b/ext/vcedit.c @@ -403,6 +403,7 @@ vcedit_write (vcedit_state *s) ogg_int64_t granpos = 0; FILE *out; char *buffer, tmpfile[PATH_MAX]; + bool success = false; int fd, result, bytes, needflush = 0, needout = 0; if (!s->opened) @@ -546,13 +547,20 @@ vcedit_write (vcedit_state *s) s->eosin = !bytes && feof (s->in); } while (!s->eosin); - fclose (out); + success = true; + +cleanup: fclose (s->in); - unlink (s->filename); - rename (tmpfile, s->filename); + if (!success) { + unlink (tmpfile); + fclose (out); + } else { + fclose (out); + unlink (s->filename); + rename (tmpfile, s->filename); + } -cleanup: ogg_stream_clear (&streamout); /* We don't ogg_packet_clear() this, because the memory was