Fix audio load fclose crashes
This commit is contained in:
parent
3ff0968538
commit
ee3ad5c0e0
|
@ -262,9 +262,12 @@ audio_clip_from_wav_FILE(Arena *arena, FILE *file){
|
||||||
|
|
||||||
function Audio_Clip
|
function Audio_Clip
|
||||||
audio_clip_from_wav_file_name(Arena *arena, char *file_name){
|
audio_clip_from_wav_file_name(Arena *arena, char *file_name){
|
||||||
|
Audio_Clip result = {};
|
||||||
String_Const_u8 data = {};
|
String_Const_u8 data = {};
|
||||||
FILE *file = fopen(file_name, "rb");
|
FILE *file = fopen(file_name, "rb");
|
||||||
Audio_Clip result = audio_clip_from_wav_FILE(arena, file);
|
if (file != 0){
|
||||||
|
result = audio_clip_from_wav_FILE(arena, file);
|
||||||
fclose(file);
|
fclose(file);
|
||||||
|
}
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,7 @@ CUSTOM_COMMAND_SIG(play_with_a_counter)
|
||||||
CUSTOM_DOC("Example of query bar")
|
CUSTOM_DOC("Example of query bar")
|
||||||
{
|
{
|
||||||
/* Query bars make a quick lightweight display of a single line of text for interactive
|
/* Query bars make a quick lightweight display of a single line of text for interactive
|
||||||
commands, while still showing the buffer. Query bars are convenient because they don't
|
commands, while still showing the buffer. Query bars are convenient because they don't
|
||||||
require any complex UI setup, or extra rendering work inside your command.
|
require any complex UI setup, or extra rendering work inside your command.
|
||||||
|
|
||||||
First, constructing a Query_Bar_Group is a convenient way to make sure the query bar
|
First, constructing a Query_Bar_Group is a convenient way to make sure the query bar
|
||||||
|
@ -217,9 +217,11 @@ CUSTOM_DOC("Starts the music.")
|
||||||
if (the_music_clip.sample_count == 0){
|
if (the_music_clip.sample_count == 0){
|
||||||
Scratch_Block scratch(app);
|
Scratch_Block scratch(app);
|
||||||
FILE *file = def_search_normal_fopen(scratch, "audio_test/chtulthu.wav", "rb");
|
FILE *file = def_search_normal_fopen(scratch, "audio_test/chtulthu.wav", "rb");
|
||||||
|
if (file != 0){
|
||||||
the_music_clip = audio_clip_from_wav_FILE(&global_permanent_arena, file);
|
the_music_clip = audio_clip_from_wav_FILE(&global_permanent_arena, file);
|
||||||
fclose(file);
|
fclose(file);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!def_audio_is_playing(&the_music_control)){
|
if (!def_audio_is_playing(&the_music_control)){
|
||||||
the_music_control.loop = true;
|
the_music_control.loop = true;
|
||||||
|
@ -242,9 +244,11 @@ CUSTOM_DOC("Play the hit sound effect")
|
||||||
if (the_hit_clip.sample_count == 0){
|
if (the_hit_clip.sample_count == 0){
|
||||||
Scratch_Block scratch(app);
|
Scratch_Block scratch(app);
|
||||||
FILE *file = def_search_normal_fopen(scratch, "audio_test/hit.wav", "rb");
|
FILE *file = def_search_normal_fopen(scratch, "audio_test/hit.wav", "rb");
|
||||||
|
if (file != 0){
|
||||||
the_hit_clip = audio_clip_from_wav_FILE(&global_permanent_arena, file);
|
the_hit_clip = audio_clip_from_wav_FILE(&global_permanent_arena, file);
|
||||||
fclose(file);
|
fclose(file);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
local_persist u32 index = 0;
|
local_persist u32 index = 0;
|
||||||
local_persist Audio_Control controls[8] = {};
|
local_persist Audio_Control controls[8] = {};
|
||||||
|
|
|
@ -340,7 +340,7 @@ static Command_Metadata fcoder_metacmd_table[252] = {
|
||||||
{ PROC_LINKS(goto_prev_jump_no_skips, 0), false, "goto_prev_jump_no_skips", 23, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, and does not skip sub jump locations.", 136, "../code/custom/4coder_jump_sticky.cpp", 37, 511 },
|
{ PROC_LINKS(goto_prev_jump_no_skips, 0), false, "goto_prev_jump_no_skips", 23, "If a buffer containing jump locations has been locked in, goes to the previous jump in the buffer, and does not skip sub jump locations.", 136, "../code/custom/4coder_jump_sticky.cpp", 37, 511 },
|
||||||
{ PROC_LINKS(hide_filebar, 0), false, "hide_filebar", 12, "Sets the current view to hide it's filebar.", 43, "../code/custom/4coder_base_commands.cpp", 39, 704 },
|
{ PROC_LINKS(hide_filebar, 0), false, "hide_filebar", 12, "Sets the current view to hide it's filebar.", 43, "../code/custom/4coder_base_commands.cpp", 39, 704 },
|
||||||
{ PROC_LINKS(hide_scrollbar, 0), false, "hide_scrollbar", 14, "Sets the current view to hide it's scrollbar.", 45, "../code/custom/4coder_base_commands.cpp", 39, 690 },
|
{ PROC_LINKS(hide_scrollbar, 0), false, "hide_scrollbar", 14, "Sets the current view to hide it's scrollbar.", 45, "../code/custom/4coder_base_commands.cpp", 39, 690 },
|
||||||
{ PROC_LINKS(hit_sfx, 0), false, "hit_sfx", 7, "Play the hit sound effect", 25, "../code/custom/4coder_examples.cpp", 34, 238 },
|
{ PROC_LINKS(hit_sfx, 0), false, "hit_sfx", 7, "Play the hit sound effect", 25, "../code/custom/4coder_examples.cpp", 34, 240 },
|
||||||
{ PROC_LINKS(hms_demo_tutorial, 0), false, "hms_demo_tutorial", 17, "Tutorial for built in 4coder bindings and features.", 51, "../code/custom/4coder_tutorial.cpp", 34, 869 },
|
{ PROC_LINKS(hms_demo_tutorial, 0), false, "hms_demo_tutorial", 17, "Tutorial for built in 4coder bindings and features.", 51, "../code/custom/4coder_tutorial.cpp", 34, 869 },
|
||||||
{ PROC_LINKS(if0_off, 0), false, "if0_off", 7, "Surround the range between the cursor and mark with an '#if 0' and an '#endif'", 78, "../code/custom/4coder_combined_write_commands.cpp", 49, 70 },
|
{ PROC_LINKS(if0_off, 0), false, "if0_off", 7, "Surround the range between the cursor and mark with an '#if 0' and an '#endif'", 78, "../code/custom/4coder_combined_write_commands.cpp", 49, 70 },
|
||||||
{ PROC_LINKS(if_read_only_goto_position, 0), false, "if_read_only_goto_position", 26, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "../code/custom/4coder_jump_sticky.cpp", 37, 564 },
|
{ PROC_LINKS(if_read_only_goto_position, 0), false, "if_read_only_goto_position", 26, "If the buffer in the active view is writable, inserts a character, otherwise performs goto_jump_at_cursor.", 106, "../code/custom/4coder_jump_sticky.cpp", 37, 564 },
|
||||||
|
@ -416,7 +416,7 @@ static Command_Metadata fcoder_metacmd_table[252] = {
|
||||||
{ PROC_LINKS(multi_paste_interactive, 0), false, "multi_paste_interactive", 23, "Paste multiple lines from the clipboard history, controlled with arrow keys", 75, "../code/custom/4coder_clipboard.cpp", 35, 371 },
|
{ PROC_LINKS(multi_paste_interactive, 0), false, "multi_paste_interactive", 23, "Paste multiple lines from the clipboard history, controlled with arrow keys", 75, "../code/custom/4coder_clipboard.cpp", 35, 371 },
|
||||||
{ PROC_LINKS(multi_paste_interactive_quick, 0), false, "multi_paste_interactive_quick", 29, "Paste multiple lines from the clipboard history, controlled by inputing the number of lines to paste", 100, "../code/custom/4coder_clipboard.cpp", 35, 380 },
|
{ PROC_LINKS(multi_paste_interactive_quick, 0), false, "multi_paste_interactive_quick", 29, "Paste multiple lines from the clipboard history, controlled by inputing the number of lines to paste", 100, "../code/custom/4coder_clipboard.cpp", 35, 380 },
|
||||||
{ PROC_LINKS(music_start, 0), false, "music_start", 11, "Starts the music.", 17, "../code/custom/4coder_examples.cpp", 34, 213 },
|
{ PROC_LINKS(music_start, 0), false, "music_start", 11, "Starts the music.", 17, "../code/custom/4coder_examples.cpp", 34, 213 },
|
||||||
{ PROC_LINKS(music_stop, 0), false, "music_stop", 10, "Stops the music.", 16, "../code/custom/4coder_examples.cpp", 34, 232 },
|
{ PROC_LINKS(music_stop, 0), false, "music_stop", 10, "Stops the music.", 16, "../code/custom/4coder_examples.cpp", 34, 234 },
|
||||||
{ PROC_LINKS(open_all_code, 0), false, "open_all_code", 13, "Open all code in the current directory. File types are determined by extensions. An extension is considered code based on the extensions specified in 4coder.config.", 164, "../code/custom/4coder_project_commands.cpp", 42, 805 },
|
{ PROC_LINKS(open_all_code, 0), false, "open_all_code", 13, "Open all code in the current directory. File types are determined by extensions. An extension is considered code based on the extensions specified in 4coder.config.", 164, "../code/custom/4coder_project_commands.cpp", 42, 805 },
|
||||||
{ PROC_LINKS(open_all_code_recursive, 0), false, "open_all_code_recursive", 23, "Works as open_all_code but also runs in all subdirectories.", 59, "../code/custom/4coder_project_commands.cpp", 42, 814 },
|
{ PROC_LINKS(open_all_code_recursive, 0), false, "open_all_code_recursive", 23, "Works as open_all_code but also runs in all subdirectories.", 59, "../code/custom/4coder_project_commands.cpp", 42, 814 },
|
||||||
{ PROC_LINKS(open_file_in_quotes, 0), false, "open_file_in_quotes", 19, "Reads a filename from surrounding '\"' characters and attempts to open the corresponding file.", 94, "../code/custom/4coder_base_commands.cpp", 39, 1576 },
|
{ PROC_LINKS(open_file_in_quotes, 0), false, "open_file_in_quotes", 19, "Reads a filename from surrounding '\"' characters and attempts to open the corresponding file.", 94, "../code/custom/4coder_base_commands.cpp", 39, 1576 },
|
||||||
|
|
Binary file not shown.
|
@ -26,35 +26,39 @@ load_paths = {
|
||||||
|
|
||||||
commands = {
|
commands = {
|
||||||
.build_x64 = {
|
.build_x64 = {
|
||||||
.win = "echo build: x64 & bin\build.bat",
|
.win = "echo build: x64 & bin\\build.bat",
|
||||||
|
.linux = "echo build: x64 & bin/build-linux.sh",
|
||||||
.out = "*compilation*",
|
.out = "*compilation*",
|
||||||
.footer_panel = true,
|
.footer_panel = true,
|
||||||
.save_dirty_files = true,
|
.save_dirty_files = true,
|
||||||
.cursor_at_end = false,
|
.cursor_at_end = false,
|
||||||
},
|
},
|
||||||
.build_x86 = {
|
.build_x86 = {
|
||||||
.win = "echo build: x86 & bin\build.bat /DDEV_BUILD_X86",
|
.win = "echo build: x86 & bin\\build.bat /DDEV_BUILD_X86",
|
||||||
|
.linux = "echo build: x86 & bin/build-linux.sh /DDEV_BUILD_X86",
|
||||||
.out = "*compilation*",
|
.out = "*compilation*",
|
||||||
.footer_panel = true,
|
.footer_panel = true,
|
||||||
.save_dirty_files = true,
|
.save_dirty_files = true,
|
||||||
.cursor_at_end = false,
|
.cursor_at_end = false,
|
||||||
},
|
},
|
||||||
.package = {
|
.package = {
|
||||||
.win = "echo package & bin\package.bat",
|
.win = "echo package & bin\\package.bat",
|
||||||
|
.linux = "echo package & bin/package.sh",
|
||||||
.out = "*compilation*",
|
.out = "*compilation*",
|
||||||
.footer_panel = false,
|
.footer_panel = false,
|
||||||
.save_dirty_files = true,
|
.save_dirty_files = true,
|
||||||
.cursor_at_end = false,
|
.cursor_at_end = false,
|
||||||
},
|
},
|
||||||
.run_one_time = {
|
.run_one_time = {
|
||||||
.win = "pushd ..\build & one_time",
|
.win = "pushd ..\\build & one_time",
|
||||||
|
.linux = "pushd ../build & one_time",
|
||||||
.out = "*run*",
|
.out = "*run*",
|
||||||
.footer_panel = false,
|
.footer_panel = false,
|
||||||
.save_dirty_files = false,
|
.save_dirty_files = false,
|
||||||
.cursor_at_end = false,
|
.cursor_at_end = false,
|
||||||
},
|
},
|
||||||
.build_custom_api_docs = {
|
.build_custom_api_docs = {
|
||||||
.win = "custom\bin\build_one_time docs\4ed_doc_custom_api_main.cpp ..\build",
|
.win = "custom\\bin\\build_one_time docs\\4ed_doc_custom_api_main.cpp ..\\build",
|
||||||
.out = "*compilation*",
|
.out = "*compilation*",
|
||||||
.footer_panel = true,
|
.footer_panel = true,
|
||||||
.save_dirty_files = true,
|
.save_dirty_files = true,
|
||||||
|
|
Loading…
Reference in New Issue