فهرست منبع

Correct `context.allocator` usage

gingerBill 3 سال پیش
والد
کامیت
ceebd7b23c
4فایلهای تغییر یافته به همراه18 افزوده شده و 10 حذف شده
  1. 3 1
      core/os/stat_windows.odin
  2. 5 4
      core/path/filepath/path_windows.odin
  3. 3 2
      core/strconv/strconv.odin
  4. 7 3
      core/sys/win32/comdlg32.odin

+ 3 - 1
core/os/stat_windows.odin

@@ -5,12 +5,14 @@ import win32 "core:sys/windows"
 
 @(private)
 full_path_from_name :: proc(name: string, allocator := context.allocator) -> (path: string, err: Errno) {
+	context.allocator = allocator
+	
 	name := name
 	if name == "" {
 		name = "."
 	}
 	p := win32.utf8_to_utf16(name, context.temp_allocator)
-	buf := make([dynamic]u16, 100, allocator)
+	buf := make([dynamic]u16, 100)
 	defer delete(buf)
 	for {
 		n := win32.GetFullPathNameW(raw_data(p), u32(len(buf)), raw_data(buf), nil)

+ 5 - 4
core/path/filepath/path_windows.odin

@@ -91,13 +91,15 @@ abs :: proc(path: string, allocator := context.allocator) -> (string, bool) {
 join :: proc(elems: ..string, allocator := context.allocator) -> string {
 	for e, i in elems {
 		if e != "" {
-			return join_non_empty(elems[i:])
+			return join_non_empty(elems[i:], allocator)
 		}
 	}
 	return ""
 }
 
-join_non_empty :: proc(elems: []string) -> string {
+join_non_empty :: proc(elems: []string, allocator := context.allocator) -> string {
+	context.allocator = allocator
+	
 	if len(elems[0]) == 2 && elems[0][1] == ':' {
 		i := 1
 		for ; i < len(elems); i += 1 {
@@ -110,8 +112,7 @@ join_non_empty :: proc(elems: []string) -> string {
 		return clean(s)
 	}
 
-	s := strings.join(elems, SEPARATOR_STRING, context.temp_allocator)
-	p := clean(s)
+	p := clean(strings.join(elems, SEPARATOR_STRING, context.temp_allocator))
 	if !is_UNC(p) {
 		return p
 	}

+ 3 - 2
core/strconv/strconv.odin

@@ -680,10 +680,11 @@ unquote_string :: proc(lit: string, allocator := context.allocator) -> (res: str
 			return s, false, true
 		}
 	}
-
+	
+	context.allocator = allocator
 
 	buf_len := 3*len(s) / 2
-	buf := make([]byte, buf_len, allocator)
+	buf := make([]byte, buf_len)
 	offset := 0
 	for len(s) > 0 {
 		r, multiple_bytes, tail_string, ok := unquote_char(s, byte(quote))

+ 7 - 3
core/sys/win32/comdlg32.odin

@@ -84,7 +84,11 @@ _open_file_dialog :: proc(title: string, dir: string,
                           filters: []string, default_filter: u32,
                           flags: u32, default_ext: string,
                           mode: Open_Save_Mode, allocator := context.temp_allocator) -> (path: string, ok: bool = true) {
-	file_buf := make([]u16, MAX_PATH_WIDE, allocator)
+	context.allocator = allocator
+	file_buf := make([]u16, MAX_PATH_WIDE)
+	defer if !ok {
+		delete(file_buf)
+	}
 
 	// Filters need to be passed as a pair of strings (title, filter)
 	filter_len := u32(len(filters))
@@ -118,9 +122,9 @@ _open_file_dialog :: proc(title: string, dir: string,
 	}
 
 	if !ok {
-		delete(file_buf)
-		return "", false
+		return
 	}
+	
 
 	file_name := utf16_to_utf8(file_buf[:], allocator)
 	path = strings.trim_right_null(file_name)