From b9d08c77a44390b0848c06f20bc0e9e951ba6a3c Mon Sep 17 00:00:00 2001 From: Martin Storsjö Date: Tue, 18 Nov 2014 14:06:19 +0200 Subject: lavf: Don't try to update files atomically with renames on windows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On windows, rename(2) will fail if the target file exists. On unix this trick is used to make sure that people reading the file either will get the full previous file, or the full new version of the file, but no intermediate version. Signed-off-by: Martin Storsjö --- libavformat/smoothstreamingenc.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'libavformat/smoothstreamingenc.c') diff --git a/libavformat/smoothstreamingenc.c b/libavformat/smoothstreamingenc.c index ddd8da7469..c0161b99b8 100644 --- a/libavformat/smoothstreamingenc.c +++ b/libavformat/smoothstreamingenc.c @@ -215,14 +215,16 @@ static int write_manifest(AVFormatContext *s, int final) SmoothStreamingContext *c = s->priv_data; AVIOContext *out; char filename[1024], temp_filename[1024]; + const char *write_filename; int ret, i, video_chunks = 0, audio_chunks = 0, video_streams = 0, audio_streams = 0; int64_t duration = 0; snprintf(filename, sizeof(filename), "%s/Manifest", s->filename); snprintf(temp_filename, sizeof(temp_filename), "%s/Manifest.tmp", s->filename); - ret = avio_open2(&out, temp_filename, AVIO_FLAG_WRITE, &s->interrupt_callback, NULL); + write_filename = USE_RENAME_REPLACE ? temp_filename : filename; + ret = avio_open2(&out, write_filename, AVIO_FLAG_WRITE, &s->interrupt_callback, NULL); if (ret < 0) { - av_log(s, AV_LOG_ERROR, "Unable to open %s for writing\n", temp_filename); + av_log(s, AV_LOG_ERROR, "Unable to open %s for writing\n", write_filename); return ret; } avio_printf(out, "\n"); @@ -283,7 +285,7 @@ static int write_manifest(AVFormatContext *s, int final) avio_printf(out, "\n"); avio_flush(out); avio_close(out); - return ff_rename(temp_filename, filename); + return USE_RENAME_REPLACE ? ff_rename(temp_filename, filename) : 0; } static int ism_write_header(AVFormatContext *s) -- cgit v1.2.3