From f52738b5e642fd8a5009398cc45b598b8939a429 Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Thu, 25 Jul 2019 17:58:25 -0700 Subject: [PATCH] Fixed some lingering string problems in windows platform layer --- 4coder_base_types.cpp | 45 ++++++++++++++++++++++++++ 4ed_font_provider_freetype.cpp | 6 ++++ platform_win32/win32_4ed.cpp | 3 +- platform_win32/win32_4ed_functions.cpp | 3 +- 4 files changed, 54 insertions(+), 3 deletions(-) diff --git a/4coder_base_types.cpp b/4coder_base_types.cpp index 249a40b1..a3bb5ee8 100644 --- a/4coder_base_types.cpp +++ b/4coder_base_types.cpp @@ -3593,6 +3593,51 @@ string_remove_last_folder(String_Const_u32 str){ return(str); } +static String_Const_char +string_remove_front_of_path(String_Const_char str){ + imem slash_pos = string_find_last_slash(str); + if (slash_pos < 0){ + str.size = 0; + } + else{ + str.size = slash_pos + 1; + } + return(str); +} +static String_Const_u8 +string_remove_front_of_path(String_Const_u8 str){ + imem slash_pos = string_find_last_slash(str); + if (slash_pos < 0){ + str.size = 0; + } + else{ + str.size = slash_pos + 1; + } + return(str); +} +static String_Const_u16 +string_remove_front_of_path(String_Const_u16 str){ + imem slash_pos = string_find_last_slash(str); + if (slash_pos < 0){ + str.size = 0; + } + else{ + str.size = slash_pos + 1; + } + return(str); +} +static String_Const_u32 +string_remove_front_of_path(String_Const_u32 str){ + imem slash_pos = string_find_last_slash(str); + if (slash_pos < 0){ + str.size = 0; + } + else{ + str.size = slash_pos + 1; + } + return(str); +} + static String_Const_char string_front_of_path(String_Const_char str){ imem slash_pos = string_find_last_slash(str); diff --git a/4ed_font_provider_freetype.cpp b/4ed_font_provider_freetype.cpp index fbbe30b3..0dfba352 100644 --- a/4ed_font_provider_freetype.cpp +++ b/4ed_font_provider_freetype.cpp @@ -149,6 +149,11 @@ ft__bad_rect_pack_next(FT_Bad_Rect_Pack *pack, Vec2_i32 dim){ return(result); } +internal void +ft__bad_rect_store_finish(FT_Bad_Rect_Pack *pack){ + ft__bad_rect_pack_end_line(pack); +} + internal void ft__glyph_bounds_store_uv_raw(Vec3_i32 p, Vec2_i32 dim, Glyph_Bounds *bounds){ bounds->uv = Rf32((f32)p.x, (f32)p.y, (f32)dim.x, (f32)dim.y); @@ -288,6 +293,7 @@ ft__font_make_face(Arena *arena, Face_Description *description){ Vec2_i32 dim = glyph_bitmaps[i].dim; ft__glyph_bounds_store_uv_raw(ft__bad_rect_pack_next(&pack, dim), dim, &face->bounds[i]); } + ft__bad_rect_store_finish(&pack); Texture_Kind texture_kind = TextureKind_Mono; u32 texture = sysfunc.get_texture(pack.dim, texture_kind); diff --git a/platform_win32/win32_4ed.cpp b/platform_win32/win32_4ed.cpp index ee6ad894..badfcb62 100644 --- a/platform_win32/win32_4ed.cpp +++ b/platform_win32/win32_4ed.cpp @@ -1105,7 +1105,6 @@ Sys_CLI_Call_Sig(system_cli_call, path, script_name, cli_out){ char cmd[] = "c:\\windows\\system32\\cmd.exe"; char *env_variables = 0; - char command_line[2048]; Arena *scratch = &shared_vars.scratch; @@ -1140,7 +1139,7 @@ Sys_CLI_Call_Sig(system_cli_call, path, script_name, cli_out){ startup.wShowWindow = SW_HIDE; PROCESS_INFORMATION info = {}; - if (CreateProcess_utf8(&shared_vars.scratch, (u8*)cmd, (u8*)command_line, 0, 0, TRUE, 0, env_variables, (u8*)path, &startup, &info)){ + if (CreateProcess_utf8(&shared_vars.scratch, (u8*)cmd, s.str, 0, 0, TRUE, 0, env_variables, (u8*)path, &startup, &info)){ success = true; CloseHandle(info.hThread); *(HANDLE*)&cli_out->proc = info.hProcess; diff --git a/platform_win32/win32_4ed_functions.cpp b/platform_win32/win32_4ed_functions.cpp index 949a2b3b..1f3f0cec 100644 --- a/platform_win32/win32_4ed_functions.cpp +++ b/platform_win32/win32_4ed_functions.cpp @@ -125,6 +125,7 @@ Sys_Set_File_List_Sig(system_set_file_list){ u8 dir_space[MAX_PATH + 32]; umem directory_original_length = cstring_length(directory); block_copy(dir_space, directory, directory_original_length); + dir_space[directory_original_length] = 0; String_Const_u8 dir = SCu8(dir_space, directory_original_length); HANDLE dir_handle = CreateFile_utf8(&shared_vars.scratch, dir.str, FILE_LIST_DIRECTORY, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, 0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OVERLAPPED, 0); @@ -285,7 +286,7 @@ Sys_Get_Canonical_Sig(system_get_canonical){ } else{ String_Const_u8 src_str = SCu8(filename, len); - String_Const_u8 path_str = string_remove_last_folder(src_str); + String_Const_u8 path_str = string_remove_front_of_path(src_str); String_Const_u8 front_str = string_front_of_path(src_str); memcpy(src_space, path_str.str, path_str.size);