mirror of
https://github.com/odin-lang/Odin.git
synced 2025-12-31 18:32:12 +00:00
Merge branch 'master' of https://github.com/odin-lang/Odin
This commit is contained in:
26
src/gb/gb.h
26
src/gb/gb.h
@@ -5838,18 +5838,25 @@ gb_inline isize gb_printf_err_va(char const *fmt, va_list va) {
|
||||
|
||||
gb_inline isize gb_fprintf_va(struct gbFile *f, char const *fmt, va_list va) {
|
||||
char buf[4096];
|
||||
isize len = gb_snprintf_va(buf, gb_size_of(buf), fmt, va);
|
||||
va_list va_save;
|
||||
va_copy(va_save, va);
|
||||
isize len = gb_snprintf_va(buf, gb_size_of(buf), fmt, va_save);
|
||||
va_end(va_save);
|
||||
char *new_buf = NULL;
|
||||
isize n = gb_size_of(buf);
|
||||
while (len < 0) {
|
||||
va_copy(va_save, va);
|
||||
defer (va_end(va_save));
|
||||
n <<= 1;
|
||||
gb_free(gb_heap_allocator(), new_buf);
|
||||
new_buf = gb_alloc_array(gb_heap_allocator(), char, n);;
|
||||
len = gb_snprintf_va(new_buf, n, fmt, va);
|
||||
len = gb_snprintf_va(new_buf, n, fmt, va_save);
|
||||
}
|
||||
gb_file_write(f, buf, len-1); // NOTE(bill): prevent extra whitespace
|
||||
if (new_buf != NULL) {
|
||||
gb_file_write(f, new_buf, len-1); // NOTE(bill): prevent extra whitespace
|
||||
gb_free(gb_heap_allocator(), new_buf);
|
||||
} else {
|
||||
gb_file_write(f, buf, len-1); // NOTE(bill): prevent extra whitespace
|
||||
}
|
||||
return len;
|
||||
}
|
||||
@@ -5912,7 +5919,7 @@ gb_internal isize gb__print_string(char *text, isize max_len, gbprivFmtInfo *inf
|
||||
len = info->precision < len ? info->precision : len;
|
||||
}
|
||||
|
||||
res += gb_strlcpy(text, str, len);
|
||||
res += gb_strlcpy(text, str, gb_min(len, remaining));
|
||||
|
||||
if (info->width > res) {
|
||||
isize padding = info->width - len;
|
||||
@@ -5930,7 +5937,7 @@ gb_internal isize gb__print_string(char *text, isize max_len, gbprivFmtInfo *inf
|
||||
}
|
||||
}
|
||||
|
||||
res += gb_strlcpy(text, str, len);
|
||||
res += gb_strlcpy(text, str, gb_min(len, remaining));
|
||||
}
|
||||
|
||||
|
||||
@@ -6066,15 +6073,16 @@ gb_internal isize gb__print_f64(char *text, isize max_len, gbprivFmtInfo *info,
|
||||
|
||||
gb_no_inline isize gb_snprintf_va(char *text, isize max_len, char const *fmt, va_list va) {
|
||||
char const *text_begin = text;
|
||||
isize remaining = max_len, res;
|
||||
isize remaining = max_len - 1, res;
|
||||
|
||||
while (*fmt) {
|
||||
while (*fmt && remaining > 0) {
|
||||
gbprivFmtInfo info = {0};
|
||||
isize len = 0;
|
||||
info.precision = -1;
|
||||
|
||||
while (*fmt && *fmt != '%' && remaining) {
|
||||
while (remaining > 0 && *fmt && *fmt != '%') {
|
||||
*text++ = *fmt++;
|
||||
remaining--;
|
||||
}
|
||||
|
||||
if (*fmt == '%') {
|
||||
@@ -6240,7 +6248,7 @@ gb_no_inline isize gb_snprintf_va(char *text, isize max_len, char const *fmt, va
|
||||
|
||||
text += len;
|
||||
if (len >= remaining) {
|
||||
remaining = gb_min(remaining, 1);
|
||||
remaining = 0;
|
||||
} else {
|
||||
remaining -= len;
|
||||
}
|
||||
|
||||
@@ -643,9 +643,10 @@ try_cross_linking:;
|
||||
android_glue_object = concatenate4_strings(temporary_allocator(), temp_dir, str_lit("android_native_app_glue-"), hash, str_lit(".o"));
|
||||
android_glue_static_lib = concatenate4_strings(permanent_allocator(), temp_dir, str_lit("libandroid_native_app_glue-"), hash, str_lit(".a"));
|
||||
|
||||
gbString glue = gb_string_make(heap_allocator(), clang_path);
|
||||
gbString glue = gb_string_make_length(heap_allocator(), ODIN_ANDROID_NDK_TOOLCHAIN.text, ODIN_ANDROID_NDK_TOOLCHAIN.len);
|
||||
defer (gb_string_free(glue));
|
||||
|
||||
glue = gb_string_append_fmt(glue, "bin/clang");
|
||||
glue = gb_string_append_fmt(glue, " --target=aarch64-linux-android%d ", ODIN_ANDROID_API_LEVEL);
|
||||
glue = gb_string_appendc(glue, "-c \"");
|
||||
glue = gb_string_append_length(glue, ODIN_ANDROID_NDK.text, ODIN_ANDROID_NDK.len);
|
||||
@@ -808,6 +809,9 @@ try_cross_linking:;
|
||||
platform_lib_str = gb_string_append_length(platform_lib_str, ODIN_ANDROID_NDK_TOOLCHAIN_LIB_LEVEL.text, ODIN_ANDROID_NDK_TOOLCHAIN_LIB_LEVEL.len);
|
||||
platform_lib_str = gb_string_appendc(platform_lib_str, "\" ");
|
||||
|
||||
platform_lib_str = gb_string_appendc(platform_lib_str, "-landroid ");
|
||||
platform_lib_str = gb_string_appendc(platform_lib_str, "-llog ");
|
||||
|
||||
platform_lib_str = gb_string_appendc(platform_lib_str, "\"--sysroot=");
|
||||
platform_lib_str = gb_string_append_length(platform_lib_str, ODIN_ANDROID_NDK_TOOLCHAIN_SYSROOT.text, ODIN_ANDROID_NDK_TOOLCHAIN_SYSROOT.len);
|
||||
platform_lib_str = gb_string_appendc(platform_lib_str, "\" ");
|
||||
@@ -840,12 +844,16 @@ try_cross_linking:;
|
||||
}
|
||||
}
|
||||
|
||||
gbString link_command_line = gb_string_make(heap_allocator(), clang_path);
|
||||
gbString link_command_line = gb_string_make(heap_allocator(), "");
|
||||
defer (gb_string_free(link_command_line));
|
||||
|
||||
if (is_android) {
|
||||
gbString ndk_bin_directory = gb_string_make_length(temporary_allocator(), ODIN_ANDROID_NDK_TOOLCHAIN.text, ODIN_ANDROID_NDK_TOOLCHAIN.len);
|
||||
link_command_line = gb_string_appendc(link_command_line, ndk_bin_directory);
|
||||
link_command_line = gb_string_appendc(link_command_line, "bin/clang");
|
||||
link_command_line = gb_string_append_fmt(link_command_line, " --target=aarch64-linux-android%d ", ODIN_ANDROID_API_LEVEL);
|
||||
link_command_line = gb_string_appendc(link_command_line, " -nodefaultlibs");
|
||||
} else {
|
||||
link_command_line = gb_string_appendc(link_command_line, clang_path);
|
||||
}
|
||||
link_command_line = gb_string_appendc(link_command_line, " -Wno-unused-command-line-argument ");
|
||||
link_command_line = gb_string_appendc(link_command_line, object_files);
|
||||
|
||||
Reference in New Issue
Block a user