mirror of https://github.com/PCSX2/pcsx2.git
GS: Fix crash and file leak during dump
This commit is contained in:
parent
7dd7345e08
commit
5a91ecd16a
|
@ -38,8 +38,8 @@ namespace GSPng
|
|||
const int offset = first_image ? 0 : pixel[fmt].bytes_per_pixel_out;
|
||||
const int bytes_per_pixel_out = first_image ? pixel[fmt].bytes_per_pixel_out : bytes_per_pixel_in - offset;
|
||||
|
||||
FILE* fp = FileSystem::OpenCFile(file.c_str(), "wb");
|
||||
if (fp == nullptr)
|
||||
auto fp = FileSystem::OpenManagedCFile(file.c_str(), "wb");
|
||||
if (!fp)
|
||||
return false;
|
||||
|
||||
png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, nullptr, nullptr, nullptr);
|
||||
|
@ -55,7 +55,14 @@ namespace GSPng
|
|||
if (setjmp(png_jmpbuf(png_ptr)))
|
||||
return false;
|
||||
|
||||
png_init_io(png_ptr, fp);
|
||||
png_set_write_fn(
|
||||
png_ptr, fp.get(),
|
||||
[](png_structp png_ptr, png_bytep data_ptr, png_size_t size) {
|
||||
if (std::fwrite(data_ptr, size, 1, static_cast<std::FILE*>(png_get_io_ptr(png_ptr))) != 1)
|
||||
png_error(png_ptr, "file write error");
|
||||
},
|
||||
[](png_structp png_ptr) {});
|
||||
|
||||
png_set_compression_level(png_ptr, compression);
|
||||
png_set_IHDR(png_ptr, info_ptr, width, height, channel_bit_depth, type,
|
||||
PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
|
||||
|
@ -77,7 +84,6 @@ namespace GSPng
|
|||
|
||||
if (png_ptr)
|
||||
png_destroy_write_struct(&png_ptr, info_ptr ? &info_ptr : nullptr);
|
||||
std::fclose(fp);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue