diff --git a/core/log/multi_logger.odin b/core/log/multi_logger.odin new file mode 100644 index 000000000..2f9a09051 --- /dev/null +++ b/core/log/multi_logger.odin @@ -0,0 +1,26 @@ +package log + + +Multi_Logger_Data :: struct { + loggers: []Logger, +} + +create_multi_logger :: proc(logs: ..Logger) -> Logger { + data := new(Multi_Logger_Data); + data.loggers = make([]Logger, len(logs)); + copy(data.loggers, logs); + return Logger{multi_logger_proc, data, Level.Debug, nil}; +} + +destroy_multi_logger :: proc(log : ^Logger) { + free(log.data); + log^ = nil_logger(); +} + +multi_logger_proc :: proc(logger_data: rawptr, level: Level, text: string, + options: Options, location := #caller_location) { + data := cast(^Multi_Logger_Data)logger_data; + for log in data.loggers { + log.procedure(log.data, level, text, log.options, location); + } +} diff --git a/core/os/os_windows.odin b/core/os/os_windows.odin index a925c7a88..ceb9f3ef8 100644 --- a/core/os/os_windows.odin +++ b/core/os/os_windows.odin @@ -76,13 +76,13 @@ open :: proc(path: string, mode: int = O_RDONLY, perm: int = 0) -> (Handle, Errn case O_RDWR: access = win32.FILE_GENERIC_READ | win32.FILE_GENERIC_WRITE; } - if mode&O_CREATE != 0 { - access |= win32.FILE_GENERIC_WRITE; - } if mode&O_APPEND != 0 { access &~= win32.FILE_GENERIC_WRITE; access |= win32.FILE_APPEND_DATA; } + if mode&O_CREATE != 0 { + access |= win32.FILE_GENERIC_WRITE; + } share_mode := u32(win32.FILE_SHARE_READ|win32.FILE_SHARE_WRITE); sa: ^win32.Security_Attributes = nil;