# Changelog All notable changes to stumpless will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). For a detailed look at the project's future, including planned features and bug fixes, check out the [roadmap](https://github.com/goatshriek/stumpless/blob/master/docs/roadmap.md). ## [2.2.0] - 2024-05-26 ### Added - @since format check enforcement in CI pipeline. - `single-file` target for rollup `.c` and `.h` files. - SQLite3 logging targets. - Target chains. - Support for `pkg-config`. - `INSTALL_HEADERS` and `INSTALL_HTML` build options. - Localizations for: * Albanian (sq-AL :albania:) * Danish (da-DK :denmark:) * Hebrew (he-IL :israel:) * Hungarian (hu-HU :hungary:) * Japanese (ja-JP :jp:) * Sinhala (si-LK :sri_lanka_:) * Swahili (sw-KE :kenya:) * Teluga (te-IN :india:) * Turkish (tr-TR :tr:) ### Fixed - Deadlock potential in `stumpless_set_entry_hostname` and `stumpless_set_entry_procid` when validation fails. - Builds in ANSI C environments. - `sys/socket.h`-based TCP network targets will immediately fail with an error if the remote end sends a FIN message, instead of waiting for `send` to fail, possibly sending messages that are not actually received by the remote end. ## [2.1.0] - 2022-11-13 ### Added - Custom function logging targets. - Localizations for: * Bengali (bn-IN :india:) * Chinese (zh-CN :cn:) * Czech (cz-CZ :czech_republic:) * Hindi (hi-IN :india:) * Polish (pl-PL :poland:) * Portuguese (pt-BR :brazil:) * Spanish (es-ES :es:) - Systemd journal logging targets (journald). - Log source file tracing functions: * `stump_trace` * `stumpless_trace_entry` * `stumpless_trace_log` * `stumpless_trace_message` * `stumplog_trace` * `vstump_trace` * `vstumpless_trace_log` * `vstumpless_trace_message` * `vstumplog_trace` - The TRACE log level severity shorthand function macros: * `stump_t` * `stump_t_entry` * `stump_t_log` * `stump_t_message` * `stumplog_t` - Macro `STUMPLESS_SEVERITY_TRACE_VALUE` as an alias for `STUMPLESS_SEVERITY_DEBUG_VALUE`. - Macro `STUMPLESS_SEVERITY_TRACE` for the new level as an alias for the `STUMPLESS_SEVERITY_DEBUG` enum member. - Runtime filtering mechanism, as well as default support for log masks, via the following functions: * `stumpless_get_target_filter` * `stumpless_get_target_mask` * `stumpless_mask_filter` * `stumpless_set_target_filter` * `stumpless_set_target_mask` * `stumplog_set_mask` - Safer and more performant `_str` versions of any function taking a format specifier string and variable number of arguments. - Default Windows Event Log messages that can be used when none are specified. - Full unicode support with Windows Event Log targets, along with the following new functions: * `stumpless_add_default_wel_event_source` * `stumpless_add_wel_event_source` * `stumpless_add_wel_event_source_w` * `stumpless_get_wel_category` * `stumpless_get_wel_event_id` * `stumpless_get_wel_insertion_param` * `stumpless_get_wel_insertion_string_w` * `stumpless_get_wel_type` * `stumpless_remove_default_wel_event_source` * `stumpless_remove_wel_event_source` * `stumpless_remove_wel_event_source_w` * `stumpless_set_wel_insertion_string_w` * `stumpless_set_wel_insertion_strings_w` * `vstumpless_set_wel_insertion_strings_w` - `STUMPLESS_OPTION_CONS` is now supported with similar semantics to `LOG_CONS` from `syslog.h`. - The procid and hostname can be overriden if the defaults are not wanted, via the functions: * `stumpless_get_entry_hostname` * `stumpless_get_entry_procid` * `stumpless_set_entry_hostname` * `stumpless_set_entry_procid` - Other new functions: * `stumpless_get_network_protocol` * `stumpless_get_target_type_string` * `stumpless_get_transport_protocol` ### Changed - Auto-generated local socket names use abstract socket names if supported. - Auto-generated local socket names are always `stumpless-socket` instead of being generated using `mkstemp`. ### Fixed - `stumpless_perror` segmentation faults after the following errors: * `STUMPLESS_FILE_OPEN_ERROR` * `STUMPLESS_FILE_WRITE_ERROR` * `STUMPLESS_INVALID_ID` * `STUMPLESS_MEMORY_ALLOCATION_FAILURE` * `STUMPLESS_NETWORK_PROTOCOL_UNSUPPORTED` * `STUMPLESS_STREAM_WRITE_FAILURE` * `STUMPLESS_TRANSPORT_PROTOCOL_UNSUPPORTED` * `STUMPLESS_WINDOWS_EVENT_LOG_CLOSE_FAILURE` * `STUMPLESS_WINDOWS_EVENT_LOG_OPEN_FAILURE` - Several memory leaks: * Object cache leak in some allocation failure scenarios * Creating network target with unsupported protocols - `close` syscall is no longer called on invalid socket handles - TCP network targets do not hang when the session is closed by the receiver. ## [2.0.0] - 2020-12-27 ### Added - Localization framework for error messages and other library strings, and localizations for: * French (fr-FR :fr:) * German (de-DE :de:) * Italian (it-IT :it:) * Slovak (sk-SK :slovakia:) * Swedish (sv-SE :sweden:) - Thread safety for all functionality. - The following functions: * `stumpless_free_thread` * `stumpless_get_element_count` * `stumpless_get_target_name` * `stumpless_get_target_default_app_name` * `stumpless_get_target_default_msgid` * `stumpless_param_to_string` * `stumpless_read_buffer` - The following C++ function bindings: * `Entry.GetAppName` * `Entry.GetMessage` * `Entry.GetMsgid` * `Version.Compare` ### Changed - C++ namespace from `stumplesscpp` to `stumpless`. - Including `stumpless/config.h` no longer defines `WIN32_LEAN_AND_MEAN`. - Facilities, options, and severities are now only available in the `stumpless/facility.h`, `stumpless/option.h`, and `stumpless/severity.h` headers, respectively. - Functions that return strings now require the caller to free the string when it is no longer needed. Prior to this version these strings pointed to internal character buffers that could not be modified. The functions affected by this are: * `stumpless_get_element_name` * `stumpless_get_entry_app_name` * `stumpless_get_entry_message` * `stumpless_get_entry_msgid` * `stumpless_get_entry_param_value_by_index` * `stumpless_get_entry_param_value_by_name` * `stumpless_get_param_name` * `stumpless_get_param_name_by_index` * `stumpless_get_param_value` * `stumpless_get_param_value_by_index` * `stumpless_get_param_value_by_name` - The underlying buffer in buffer targets should no longer be read manually, but should instead use the new `stumpless_read_buffer` function as the only way to read messages. - All target open functions no longer require an options or default facility parameter, resulting in much more concise code. If either of these fields need to be adjusted on a target, use the `stumpless_set_option` and `stumpless_set_default_facility` functions after the target has been created. - Facilities and severities are now `enum`s instead of preprocessor symbols. ### Deprecated - `stumpless_destroy_entry` has been deprecated in favor of the more descriptive and deliberate `stumpless_destroy_entry_and_contents` and `stumpless_destroy_entry_only` functions in order to avoid unintentional memory leaks and use-after-free mistakes. - `stumpless_destroy_element` has been deprecated in favor of the more descriptive and deliberate `stumpless_destroy_element_and_contents` and `stumpless_destroy_element_only` functions in order to avoid unintentional memory leaks and use-after-free mistakes. ### Fixed - Memory leak in opening of network targets on systems using `sys/socket.h` for network services. ### Removed - `stumpless` and `vstumpless` functions (use `stump` and `vstump` instead). - `STUMPLESS_SEVERITY_WARN` symbol. ## [1.6.0] - 2020-07-16 ### Added - A number of new functions for working with entries, elements, and params. - A rollup header, `stumpless.hpp`, for the C++ library to make use easier. - Logging functions that can be removed at compile time. ### Fixed - Added missing DLL exports of C++ library in standard Visual Studio builds. - Local socket names are generated using mkstemp instead of using a static counter ([issue #54](https://github.com/goatshriek/stumpless/issues/54)]). - The current target is not left pointing at an invalid target structure after the current target is closed ([issue #52](https://github.com/goatshriek/stumpless/issues/52)). ## [1.5.0] - 2020-05-19 ### Added - `stumpless_version_to_string` function. - Header check enforcement in CI pipeline. - C++ library bindings generated by Wrapture. ### Fixed - Several portability issues: - Build failure in MinGW and Cygwin - Conflicting header inclusions - Missing headers - Missed code in configuration-specific source files - Missing error checks ## [1.4.0] - 2019-03-09 ### Added - Format specifier support for messages and entries. - Generic stumpless_close_target function. - Example and documentation of file targets. - Example and documentation of socket targets. - Functions that can replace syslog and vsyslog (stumplog and vstumplog). - Default targets specific to the platform. ### Fixed - Memory leak where error structures are not freed by stumpless_free_all. - Missing error generation for socket logging. ### Changed - Network examples are no longer run by the examples build target. ## [1.3.1] - 2019-02-15 ### Fixed - Code duplication in network target code. ## [1.3.0] - 2019-02-14 ### Added - Install target and documentation. - Memory leak controlled with stumpless_free_all function. - Vision statement. - STUMPLESS_OPTION_NONE for code readability. - stumpless_perror function. - Network target capability. ### Fixed - Various memory leaks. ## [1.2.0] - 2018-11-09 ### Added - Increased coverage on object cache. - Support for fractional timestamps. - File target capability. - Windows Event Log target capability. - Doxygen documentation support. - Tests for unsupported targets. - Stream target capability. ### Fixed - Use of unsafe fopen when fopen_s is available. - Use of unsafe gmtime function when gmtime_r is available. - Safely convert from size_t to int types. - Inclusion of RFC 5424 test sources in multiple executables, using an object library instead. ## [1.1.2] - 2018-10-04 ### Fixed - Specify googletest release 1.8.1 to fix broken builds. ## [1.1.1] - 2018-08-28 ### Added - Add SonarCloud quality gate badge to README. ## [1.1.0] - 2018-08-27 ### Added - Benchmark tests measure the amount of memory allocated. - Add `stumpless_set_entry_message` function. - Integration with SonarCloud for analysis. ### Fixed - Removed versions prior to 1.0.0 to match repository history. - Benchmark tests now function properly. - Memory efficiency improved significantly. ## [1.0.0] - 2018-07-28 ### Added - Add socket target capability. - Add buffer target capability. - Add Travis CI integration. - Add AppVeyor integration. - Add Google Test suites. - Add Google Benchmark capability.