diff options
author | nanahi <130121847+na-na-hi@users.noreply.github.com> | 2024-02-24 13:59:22 -0500 |
---|---|---|
committer | sfan5 <sfan5@live.de> | 2024-02-25 11:37:44 +0100 |
commit | 3e8d69e3e86fbca6719028ffda9b75918b4c575f (patch) | |
tree | dc686d108bac9a7717a7916d76b6be424950bf87 /video/image_writer.c | |
parent | 74b4c3c531bd454484ed5d04c9aad0bc531ccd4b (diff) | |
download | mpv-3e8d69e3e86fbca6719028ffda9b75918b4c575f.tar.bz2 mpv-3e8d69e3e86fbca6719028ffda9b75918b4c575f.tar.xz |
image_writer: cleanup leftover files if image writing fails
This avoids leaving an empty/corrupt file if fopen succeeds but
image writing fails afterwards.
Diffstat (limited to 'video/image_writer.c')
-rw-r--r-- | video/image_writer.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/video/image_writer.c b/video/image_writer.c index e86c255811..8f5f4ed877 100644 --- a/video/image_writer.c +++ b/video/image_writer.c @@ -19,6 +19,7 @@ #include <stdlib.h> #include <string.h> #include <inttypes.h> +#include <unistd.h> #include <libavcodec/avcodec.h> #include <libavformat/avformat.h> @@ -259,7 +260,10 @@ error_exit: avcodec_free_context(&avctx); av_frame_free(&pic); av_packet_free(&pkt); - return !fclose(fp) && success; + success = success && !fclose(fp); + if (!success) + unlink(filename); + return success; } #if HAVE_JPEG @@ -293,6 +297,7 @@ static bool write_jpeg(struct image_writer_ctx *ctx, mp_image_t *image, if (setjmp(cinfo.client_data)) { jpeg_destroy_compress(&cinfo); fclose(fp); + unlink(filename); return false; } @@ -329,7 +334,10 @@ static bool write_jpeg(struct image_writer_ctx *ctx, mp_image_t *image, jpeg_destroy_compress(&cinfo); - return !fclose(fp); + if (!fclose(fp)) + return true; + unlink(filename); + return false; } #endif |