From 72fe1e88a3be6b9cd560d9b4143593421517ad57 Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Sun, 19 Sep 2021 12:19:01 +0200 Subject: [PATCH] Make sure to `delete` on the right allocator. --- core/compress/gzip/gzip.odin | 7 +++++-- core/compress/zlib/zlib.odin | 7 ++++--- core/image/png/png.odin | 10 +++++++--- core/os/os.odin | 4 +++- 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/core/compress/gzip/gzip.odin b/core/compress/gzip/gzip.odin index 6ea4b3559..1a72500bf 100644 --- a/core/compress/gzip/gzip.odin +++ b/core/compress/gzip/gzip.odin @@ -104,12 +104,14 @@ GZIP_MAX_PAYLOAD_SIZE :: int(max(u32le)) load :: proc{load_from_slice, load_from_file, load_from_context} load_from_file :: proc(filename: string, buf: ^bytes.Buffer, expected_output_size := -1, allocator := context.allocator) -> (err: Error) { - data, ok := os.read_entire_file(filename, allocator) + context.allocator = allocator + + data, ok := os.read_entire_file(filename) defer delete(data) err = E_General.File_Not_Found if ok { - err = load_from_slice(data, buf, len(data), expected_output_size, allocator) + err = load_from_slice(data, buf, len(data), expected_output_size) } return } @@ -125,6 +127,7 @@ load_from_slice :: proc(slice: []u8, buf: ^bytes.Buffer, known_gzip_size := -1, } load_from_context :: proc(z: ^$C, buf: ^bytes.Buffer, known_gzip_size := -1, expected_output_size := -1, allocator := context.allocator) -> (err: Error) { + context.allocator = allocator buf := buf expected_output_size := expected_output_size diff --git a/core/compress/zlib/zlib.odin b/core/compress/zlib/zlib.odin index f428dc11b..9ae980042 100644 --- a/core/compress/zlib/zlib.odin +++ b/core/compress/zlib/zlib.odin @@ -495,6 +495,7 @@ inflate_from_context :: proc(using ctx: ^compress.Context_Memory_Input, raw := f @(optimization_mode="speed") inflate_raw :: proc(z: ^$C, expected_output_size := -1, allocator := context.allocator) -> (err: Error) #no_bounds_check { + context.allocator = allocator expected_output_size := expected_output_size /* @@ -526,9 +527,9 @@ inflate_raw :: proc(z: ^$C, expected_output_size := -1, allocator := context.all defer free(z_offset) defer free(codelength_ht) - z_repeat = allocate_huffman_table(allocator=context.allocator) or_return - z_offset = allocate_huffman_table(allocator=context.allocator) or_return - codelength_ht = allocate_huffman_table(allocator=context.allocator) or_return + z_repeat = allocate_huffman_table() or_return + z_offset = allocate_huffman_table() or_return + codelength_ht = allocate_huffman_table() or_return final := u32(0) type := u32(0) diff --git a/core/image/png/png.odin b/core/image/png/png.odin index 2550dd5db..6e9102aaa 100644 --- a/core/image/png/png.odin +++ b/core/image/png/png.odin @@ -368,11 +368,13 @@ load_from_slice :: proc(slice: []u8, options := Options{}, allocator := context. } load_from_file :: proc(filename: string, options := Options{}, allocator := context.allocator) -> (img: ^Image, err: Error) { - data, ok := os.read_entire_file(filename, allocator) + context.allocator = allocator + + data, ok := os.read_entire_file(filename) defer delete(data) if ok { - return load_from_slice(data, options, allocator) + return load_from_slice(data, options) } else { img = new(Image) return img, E_General.File_Not_Found @@ -380,7 +382,9 @@ load_from_file :: proc(filename: string, options := Options{}, allocator := cont } load_from_context :: proc(ctx: ^$C, options := Options{}, allocator := context.allocator) -> (img: ^Image, err: Error) { + context.allocator = allocator options := options + if .info in options { options |= {.return_metadata, .do_not_decompress_image} options -= {.info} @@ -398,7 +402,7 @@ load_from_context :: proc(ctx: ^$C, options := Options{}, allocator := context.a img = new(Image) } - info := new(Info, context.allocator) + info := new(Info) img.metadata_ptr = info img.metadata_type = typeid_of(Info) diff --git a/core/os/os.odin b/core/os/os.odin index 8b1f7e2b5..7f938206c 100644 --- a/core/os/os.odin +++ b/core/os/os.odin @@ -71,6 +71,8 @@ file_size_from_path :: proc(path: string) -> i64 { } read_entire_file :: proc(name: string, allocator := context.allocator) -> (data: []byte, success: bool) { + context.allocator = allocator + fd, err := open(name, O_RDONLY, 0) if err != 0 { return nil, false @@ -86,7 +88,7 @@ read_entire_file :: proc(name: string, allocator := context.allocator) -> (data: return nil, true } - data = make([]byte, int(length), allocator) + data = make([]byte, int(length)) if data == nil { return nil, false }