From: <sv...@op...> - 2025-07-16 13:56:14
|
Author: manx Date: Wed Jul 16 15:56:00 2025 New Revision: 23771 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=23771 Log: [Fix] mpt/filemode/: Fix std::optional lifetimes. [Fix] openmpt123: Fix std::optional lifetimes. Modified: trunk/OpenMPT/openmpt123/openmpt123_terminal.hpp trunk/OpenMPT/src/mpt/filemode/fd.hpp trunk/OpenMPT/src/mpt/filemode/iostream.hpp trunk/OpenMPT/src/mpt/filemode/stdfile.hpp trunk/OpenMPT/src/mpt/filemode/stdio.hpp Modified: trunk/OpenMPT/openmpt123/openmpt123_terminal.hpp ============================================================================== --- trunk/OpenMPT/openmpt123/openmpt123_terminal.hpp Wed Jul 16 15:19:07 2025 (r23770) +++ trunk/OpenMPT/openmpt123/openmpt123_terminal.hpp Wed Jul 16 15:56:00 2025 (r23771) @@ -628,9 +628,9 @@ public: terminal_ui_guard() = default; terminal_ui_guard( const terminal_ui_guard & ) = delete; - terminal_ui_guard( terminal_ui_guard && ) = default; + terminal_ui_guard( terminal_ui_guard && ) = delete; terminal_ui_guard & operator=( const terminal_ui_guard & ) = delete; - terminal_ui_guard & operator=( terminal_ui_guard && ) = default; + terminal_ui_guard & operator=( terminal_ui_guard && ) = delete; ~terminal_ui_guard() = default; }; @@ -639,7 +639,7 @@ class terminal_ui_guard { private: bool changed = false; - termios saved_attributes; + termios saved_attributes{}; public: terminal_ui_guard() { if ( !isatty( STDIN_FILENO ) ) { @@ -654,9 +654,9 @@ changed = true; } terminal_ui_guard( const terminal_ui_guard & ) = delete; - terminal_ui_guard( terminal_ui_guard && ) = default; + terminal_ui_guard( terminal_ui_guard && ) = delete; terminal_ui_guard & operator=( const terminal_ui_guard & ) = delete; - terminal_ui_guard & operator=( terminal_ui_guard && ) = default; + terminal_ui_guard & operator=( terminal_ui_guard && ) = delete; ~terminal_ui_guard() { if ( changed ) { tcsetattr( STDIN_FILENO, TCSANOW, &saved_attributes ); @@ -792,13 +792,13 @@ // nothing break; case stdin_mode::text: - stdin_guard = mpt::filemode::stdio_guard<mpt::filemode::stdio::input>{ get_filemode_api( in_api ), mpt::filemode::mode::text }; + stdin_guard.emplace( get_filemode_api( in_api ), mpt::filemode::mode::text ); break; case stdin_mode::binary: - stdin_guard = mpt::filemode::stdio_guard<mpt::filemode::stdio::input>{ get_filemode_api( in_api ), mpt::filemode::mode::binary }; + stdin_guard.emplace( get_filemode_api( in_api ), mpt::filemode::mode::binary ); break; case stdin_mode::terminal: - stdin_guard = mpt::filemode::stdio_guard<mpt::filemode::stdio::input>{ get_filemode_api( in_api ), mpt::filemode::mode::text }; + stdin_guard.emplace( get_filemode_api( in_api ), mpt::filemode::mode::text ); break; } switch ( out_mode ) { @@ -806,10 +806,10 @@ // nothing break; case stdout_mode::text: - stdout_guard = mpt::filemode::stdio_guard<mpt::filemode::stdio::output>{ get_filemode_api( out_api ), mpt::filemode::mode::text }; + stdout_guard.emplace( get_filemode_api( out_api ), mpt::filemode::mode::text ); break; case stdout_mode::binary: - stdout_guard = mpt::filemode::stdio_guard<mpt::filemode::stdio::output>{ get_filemode_api( out_api ), mpt::filemode::mode::binary }; + stdout_guard.emplace( get_filemode_api( out_api ), mpt::filemode::mode::binary ); break; } switch ( err_mode ) { @@ -817,12 +817,12 @@ // nothing break; case stderr_mode::text: - stderr_guard = mpt::filemode::stdio_guard<mpt::filemode::stdio::error>{ get_filemode_api( err_api ), mpt::filemode::mode::text }; - stdlog_guard = mpt::filemode::stdio_guard<mpt::filemode::stdio::log>{ get_filemode_api( err_api ), mpt::filemode::mode::text }; + stderr_guard.emplace( get_filemode_api( err_api ), mpt::filemode::mode::text ); + stdlog_guard.emplace( get_filemode_api( err_api ), mpt::filemode::mode::text ); break; } if ( in_mode == stdin_mode::terminal ) { - stdin_terminal_guard = std::make_optional<terminal_ui_guard>(); + stdin_terminal_guard.emplace(); } if ( out_mode == stdout_mode::text ) { std_out = std::make_unique<textout_wrapper<textout_destination::destination_stdout>>(); Modified: trunk/OpenMPT/src/mpt/filemode/fd.hpp ============================================================================== --- trunk/OpenMPT/src/mpt/filemode/fd.hpp Wed Jul 16 15:19:07 2025 (r23770) +++ trunk/OpenMPT/src/mpt/filemode/fd.hpp Wed Jul 16 15:56:00 2025 (r23771) @@ -73,9 +73,9 @@ } } fd_guard(const fd_guard &) = delete; - fd_guard(fd_guard &&) = default; + fd_guard(fd_guard &&) = delete; fd_guard & operator=(const fd_guard &) = delete; - fd_guard & operator=(fd_guard &&) = default; + fd_guard & operator=(fd_guard &&) = delete; ~fd_guard() { if (old_mode != -1) { old_mode = setmode(get_fd(), old_mode); @@ -131,9 +131,9 @@ } } fd_guard(const fd_guard &) = delete; - fd_guard(fd_guard &&) = default; + fd_guard(fd_guard &&) = delete; fd_guard & operator=(const fd_guard &) = delete; - fd_guard & operator=(fd_guard &&) = default; + fd_guard & operator=(fd_guard &&) = delete; ~fd_guard() { if (old_mode != -1) { old_mode = _setmode(get_fd(), old_mode); @@ -167,9 +167,9 @@ return; } fd_guard(const fd_guard &) = delete; - fd_guard(fd_guard &&) = default; + fd_guard(fd_guard &&) = delete; fd_guard & operator=(const fd_guard &) = delete; - fd_guard & operator=(fd_guard &&) = default; + fd_guard & operator=(fd_guard &&) = delete; ~fd_guard() = default; }; Modified: trunk/OpenMPT/src/mpt/filemode/iostream.hpp ============================================================================== --- trunk/OpenMPT/src/mpt/filemode/iostream.hpp Wed Jul 16 15:19:07 2025 (r23770) +++ trunk/OpenMPT/src/mpt/filemode/iostream.hpp Wed Jul 16 15:56:00 2025 (r23771) @@ -63,17 +63,17 @@ } public: explicit iostream_guard(mpt::filemode::mode mode) { - guard = std::make_optional<mpt::filemode::FILE_guard<which>>(mode); + guard.emplace(mode); } iostream_guard(const iostream_guard &) = delete; - iostream_guard(iostream_guard &&) = default; + iostream_guard(iostream_guard &&) = delete; iostream_guard & operator=(const iostream_guard &) = delete; - iostream_guard & operator=(iostream_guard &&) = default; + iostream_guard & operator=(iostream_guard &&) = delete; ~iostream_guard() { if constexpr (which != mpt::filemode::stdio::input) { get_stream().flush(); } - guard = std::nullopt; + guard.reset(); } }; Modified: trunk/OpenMPT/src/mpt/filemode/stdfile.hpp ============================================================================== --- trunk/OpenMPT/src/mpt/filemode/stdfile.hpp Wed Jul 16 15:19:07 2025 (r23770) +++ trunk/OpenMPT/src/mpt/filemode/stdfile.hpp Wed Jul 16 15:56:00 2025 (r23771) @@ -54,15 +54,15 @@ public: explicit FILE_guard(mpt::filemode::mode new_mode) { std::fflush(get_FILE()); - guard = std::make_optional<mpt::filemode::fd_guard<which>>(new_mode); + guard.emplace(new_mode); } FILE_guard(const FILE_guard &) = delete; - FILE_guard(FILE_guard &&) = default; + FILE_guard(FILE_guard &&) = delete; FILE_guard & operator=(const FILE_guard &) = delete; - FILE_guard & operator=(FILE_guard &&) = default; + FILE_guard & operator=(FILE_guard &&) = delete; ~FILE_guard() { std::fflush(get_FILE()); - guard = std::nullopt; + guard.reset(); } }; Modified: trunk/OpenMPT/src/mpt/filemode/stdio.hpp ============================================================================== --- trunk/OpenMPT/src/mpt/filemode/stdio.hpp Wed Jul 16 15:19:07 2025 (r23770) +++ trunk/OpenMPT/src/mpt/filemode/stdio.hpp Wed Jul 16 15:56:00 2025 (r23771) @@ -40,13 +40,13 @@ explicit stdio_guard(mpt::filemode::api api, mpt::filemode::mode mode) { switch (api) { case mpt::filemode::api::iostream: - guard = mpt::filemode::iostream_guard<which>(mode); + guard.template emplace<mpt::filemode::iostream_guard<which>>(mode); break; case mpt::filemode::api::file: - guard = mpt::filemode::FILE_guard<which>(mode); + guard.template emplace<mpt::filemode::FILE_guard<which>>(mode); break; case mpt::filemode::api::fd: - guard = mpt::filemode::fd_guard<which>(mode); + guard.template emplace<mpt::filemode::fd_guard<which>>(mode); break; case mpt::filemode::api::none: // nothing; @@ -54,11 +54,11 @@ } } stdio_guard(const stdio_guard &) = delete; - stdio_guard(stdio_guard &&) = default; + stdio_guard(stdio_guard &&) = delete; stdio_guard & operator=(const stdio_guard &) = delete; - stdio_guard & operator=(stdio_guard &&) = default; + stdio_guard & operator=(stdio_guard &&) = delete; ~stdio_guard() { - guard = std::monostate{}; + guard.template emplace<std::monostate>(); } }; |