mirror of
				https://git.h3cjp.net/H3cJP/citra.git
				synced 2025-10-31 15:04:53 +00:00 
			
		
		
		
	Merge pull request #6602 from SachinVin/wall
Chore: enable `-Werror` on GCC and clang
This commit is contained in:
		
						commit
						35d1b67fd4
					
				
							
								
								
									
										9
									
								
								externals/CMakeLists.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								externals/CMakeLists.txt
									
									
									
									
										vendored
									
									
								
							|  | @ -3,6 +3,8 @@ | |||
| # Suppress warnings from external libraries | ||||
| if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC") | ||||
|     add_compile_options(/W0) | ||||
| else() | ||||
|     add_compile_options(-Wno-error) | ||||
| endif() | ||||
| 
 | ||||
| set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMakeModules) | ||||
|  | @ -112,6 +114,8 @@ add_library(nihstro-headers INTERFACE) | |||
| target_include_directories(nihstro-headers INTERFACE ./nihstro/include) | ||||
| if (MSVC) | ||||
|     target_compile_options(nihstro-headers INTERFACE /W0) | ||||
| else() | ||||
|     target_compile_options(nihstro-headers INTERFACE -Wno-error) | ||||
| endif() | ||||
| 
 | ||||
| # Open Source Archives | ||||
|  | @ -195,6 +199,11 @@ if (ENABLE_WEB_SERVICE) | |||
|     add_library(cpp-jwt INTERFACE) | ||||
|     target_include_directories(cpp-jwt INTERFACE ./cpp-jwt/include) | ||||
|     target_compile_definitions(cpp-jwt INTERFACE CPP_JWT_USE_VENDORED_NLOHMANN_JSON) | ||||
|     if (MSVC) | ||||
|         target_compile_options(cpp-jwt INTERFACE /W0) | ||||
|     else() | ||||
|         target_compile_options(cpp-jwt INTERFACE -Wno-error) | ||||
|     endif() | ||||
| endif() | ||||
| 
 | ||||
| # lodepng | ||||
|  |  | |||
|  | @ -102,6 +102,10 @@ else() | |||
|         -Wno-attributes | ||||
|     ) | ||||
| 
 | ||||
|     if (CITRA_WARNINGS_AS_ERRORS) | ||||
|         add_compile_options(-Werror) | ||||
|     endif() | ||||
| 
 | ||||
|     if (APPLE AND CMAKE_CXX_COMPILER_ID STREQUAL Clang) | ||||
|         add_compile_options("-stdlib=libc++") | ||||
|     endif() | ||||
|  |  | |||
|  | @ -56,35 +56,6 @@ std::condition_variable running_cv; | |||
| 
 | ||||
| } // Anonymous namespace
 | ||||
| 
 | ||||
| static bool DisplayAlertMessage(const char* caption, const char* text, bool yes_no) { | ||||
|     JNIEnv* env = IDCache::GetEnvForThread(); | ||||
| 
 | ||||
|     // Execute the Java method.
 | ||||
|     jboolean result = env->CallStaticBooleanMethod( | ||||
|         IDCache::GetNativeLibraryClass(), IDCache::GetDisplayAlertMsg(), ToJString(env, caption), | ||||
|         ToJString(env, text), yes_no ? JNI_TRUE : JNI_FALSE); | ||||
| 
 | ||||
|     return result != JNI_FALSE; | ||||
| } | ||||
| 
 | ||||
| static std::string DisplayAlertPrompt(const char* caption, const char* text, int buttonConfig) { | ||||
|     JNIEnv* env = IDCache::GetEnvForThread(); | ||||
| 
 | ||||
|     jstring value = reinterpret_cast<jstring>(env->CallStaticObjectMethod( | ||||
|         IDCache::GetNativeLibraryClass(), IDCache::GetDisplayAlertPrompt(), ToJString(env, caption), | ||||
|         ToJString(env, text), buttonConfig)); | ||||
| 
 | ||||
|     return GetJString(env, value); | ||||
| } | ||||
| 
 | ||||
| static int AlertPromptButton() { | ||||
|     JNIEnv* env = IDCache::GetEnvForThread(); | ||||
| 
 | ||||
|     // Execute the Java method.
 | ||||
|     return static_cast<int>(env->CallStaticIntMethod(IDCache::GetNativeLibraryClass(), | ||||
|                                                      IDCache::GetAlertPromptButton())); | ||||
| } | ||||
| 
 | ||||
| static jobject ToJavaCoreError(Core::System::ResultStatus result) { | ||||
|     static const std::map<Core::System::ResultStatus, const char*> CoreErrorNameMap{ | ||||
|         {Core::System::ResultStatus::ErrorSystemFiles, "ErrorSystemFiles"}, | ||||
|  |  | |||
|  | @ -31,7 +31,7 @@ av_hwframe_ctx_init_func av_hwframe_ctx_init; | |||
| av_hwframe_get_buffer_func av_hwframe_get_buffer; | ||||
| av_hwframe_transfer_data_func av_hwframe_transfer_data; | ||||
| av_int_list_length_for_size_func av_int_list_length_for_size; | ||||
| #if LIBAVCODEC_VERSION_MAJOR >= 59 | ||||
| #if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(56, 53, 100) // lavu 56.53.100
 | ||||
| av_opt_child_class_iterate_func av_opt_child_class_iterate; | ||||
| #else | ||||
| av_opt_child_class_next_func av_opt_child_class_next; | ||||
|  | @ -166,7 +166,7 @@ static bool LoadAVUtil() { | |||
|     LOAD_SYMBOL(avutil, av_hwframe_get_buffer); | ||||
|     LOAD_SYMBOL(avutil, av_hwframe_transfer_data); | ||||
|     LOAD_SYMBOL(avutil, av_int_list_length_for_size); | ||||
| #if LIBAVCODEC_VERSION_MAJOR >= 59 | ||||
| #if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(56, 53, 100) // lavu 56.53.100
 | ||||
|     LOAD_SYMBOL(avutil, av_opt_child_class_iterate); | ||||
| #else | ||||
|     LOAD_SYMBOL(avutil, av_opt_child_class_next); | ||||
|  |  | |||
|  | @ -47,7 +47,7 @@ typedef int (*av_hwframe_ctx_init_func)(AVBufferRef*); | |||
| typedef int (*av_hwframe_get_buffer_func)(AVBufferRef*, AVFrame*, int); | ||||
| typedef int (*av_hwframe_transfer_data_func)(AVFrame*, const AVFrame*, int); | ||||
| typedef unsigned (*av_int_list_length_for_size_func)(unsigned, const void*, uint64_t); | ||||
| #if LIBAVCODEC_VERSION_MAJOR >= 59 | ||||
| #if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(56, 53, 100) // lavu 56.53.100
 | ||||
| typedef const AVClass* (*av_opt_child_class_iterate_func)(const AVClass*, void**); | ||||
| #else | ||||
| typedef const AVClass* (*av_opt_child_class_next_func)(const AVClass*, const AVClass*); | ||||
|  | @ -85,7 +85,7 @@ extern av_hwframe_ctx_init_func av_hwframe_ctx_init; | |||
| extern av_hwframe_get_buffer_func av_hwframe_get_buffer; | ||||
| extern av_hwframe_transfer_data_func av_hwframe_transfer_data; | ||||
| extern av_int_list_length_for_size_func av_int_list_length_for_size; | ||||
| #if LIBAVCODEC_VERSION_MAJOR >= 59 | ||||
| #if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(56, 53, 100) // lavu 56.53.100
 | ||||
| extern av_opt_child_class_iterate_func av_opt_child_class_iterate; | ||||
| #else | ||||
| extern av_opt_child_class_next_func av_opt_child_class_next; | ||||
|  |  | |||
|  | @ -102,12 +102,11 @@ static void StripTailDirSlashes(std::string& fname) { | |||
| } | ||||
| 
 | ||||
| bool Exists(const std::string& filename) { | ||||
|     struct stat file_info; | ||||
| 
 | ||||
|     std::string copy(filename); | ||||
|     StripTailDirSlashes(copy); | ||||
| 
 | ||||
| #ifdef _WIN32 | ||||
|     struct stat file_info; | ||||
|     // Windows needs a slash to identify a driver root
 | ||||
|     if (copy.size() != 0 && copy.back() == ':') | ||||
|         copy += DIR_SEP_CHR; | ||||
|  | @ -116,6 +115,7 @@ bool Exists(const std::string& filename) { | |||
| #elif ANDROID | ||||
|     int result = AndroidStorage::FileExists(filename) ? 0 : -1; | ||||
| #else | ||||
|     struct stat file_info; | ||||
|     int result = stat(copy.c_str(), &file_info); | ||||
| #endif | ||||
| 
 | ||||
|  | @ -699,7 +699,7 @@ static const std::string& GetHomeDirectory() { | |||
|  * @return The directory path | ||||
|  * @sa http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
 | ||||
|  */ | ||||
| static const std::string GetUserDirectory(const std::string& envvar) { | ||||
| [[maybe_unused]] static const std::string GetUserDirectory(const std::string& envvar) { | ||||
|     const char* directory = getenv(envvar.c_str()); | ||||
| 
 | ||||
|     std::string user_dir; | ||||
|  |  | |||
|  | @ -16,19 +16,33 @@ | |||
| // Call directly after the command or use the error num.
 | ||||
| // This function might change the error code.
 | ||||
| std::string GetLastErrorMsg() { | ||||
|     constexpr std::size_t buff_size = 255; | ||||
|     char err_str[buff_size]; | ||||
|     std::size_t msg_len; | ||||
| 
 | ||||
| #ifdef _WIN32 | ||||
|     msg_len = | ||||
|         FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, nullptr, GetLastError(), | ||||
|                        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), err_str, buff_size, nullptr); | ||||
|     LPSTR err_str; | ||||
| 
 | ||||
|     DWORD res = FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | | ||||
|                                    FORMAT_MESSAGE_IGNORE_INSERTS, | ||||
|                                nullptr, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), | ||||
|                                reinterpret_cast<LPSTR>(&err_str), 1, nullptr); | ||||
|     if (!res) { | ||||
|         return "(FormatMessageA failed to format error)"; | ||||
|     } | ||||
|     std::string ret(err_str); | ||||
|     LocalFree(err_str); | ||||
|     return ret; | ||||
| #else | ||||
|     char err_str[255]; | ||||
| #if (defined(__GLIBC__) || __ANDROID_API__ >= 23) &&                                               \ | ||||
|     (_GNU_SOURCE || (_POSIX_C_SOURCE < 200112L && _XOPEN_SOURCE < 600)) | ||||
|     // Thread safe (GNU-specific)
 | ||||
|     const char* str = strerror_r(errno, err_str, sizeof(err_str)); | ||||
|     return std::string(str); | ||||
| #else | ||||
|     // Thread safe (XSI-compliant)
 | ||||
|     strerror_r(errno, err_str, buff_size); | ||||
|     msg_len = strnlen(err_str, buff_size); | ||||
| #endif | ||||
| 
 | ||||
|     return std::string(err_str, msg_len); | ||||
|     int second_err = strerror_r(errno, err_str, sizeof(err_str)); | ||||
|     if (second_err != 0) { | ||||
|         return "(strerror_r failed to format error)"; | ||||
|     } | ||||
|     return std::string(err_str); | ||||
| #endif // GLIBC etc.
 | ||||
| #endif // _WIN32
 | ||||
| } | ||||
|  |  | |||
|  | @ -170,7 +170,7 @@ static std::wstring CPToUTF16(u32 code_page, const std::string& input) { | |||
|         MultiByteToWideChar(code_page, 0, input.data(), static_cast<int>(input.size()), nullptr, 0); | ||||
| 
 | ||||
|     if (size == 0) { | ||||
|         return L""; | ||||
|         return {}; | ||||
|     } | ||||
| 
 | ||||
|     std::wstring output(size, L'\0'); | ||||
|  |  | |||
|  | @ -110,7 +110,7 @@ void ARMul_State::Reset() { | |||
|     Reg[13] = 0x10000000; | ||||
|     Reg[15] = 0; | ||||
| 
 | ||||
|     Cpsr = static_cast<u32>(INTBITS) | SVC32MODE; | ||||
|     Cpsr = static_cast<u32>(INTBITS) | static_cast<u32>(SVC32MODE); | ||||
|     Mode = SVC32MODE; | ||||
|     Bank = SVCBANK; | ||||
| 
 | ||||
|  |  | |||
|  | @ -52,7 +52,7 @@ void CheatEngine::AddCheat(const std::shared_ptr<CheatBase>& cheat) { | |||
| 
 | ||||
| void CheatEngine::RemoveCheat(std::size_t index) { | ||||
|     std::unique_lock<std::shared_mutex> lock(cheats_list_mutex); | ||||
|     if (index < 0 || index >= static_cast<int>(cheats_list.size())) { | ||||
|     if (index < 0 || index >= cheats_list.size()) { | ||||
|         LOG_ERROR(Core_Cheats, "Invalid index {}", index); | ||||
|         return; | ||||
|     } | ||||
|  | @ -61,7 +61,7 @@ void CheatEngine::RemoveCheat(std::size_t index) { | |||
| 
 | ||||
| void CheatEngine::UpdateCheat(std::size_t index, const std::shared_ptr<CheatBase>& new_cheat) { | ||||
|     std::unique_lock<std::shared_mutex> lock(cheats_list_mutex); | ||||
|     if (index < 0 || index >= static_cast<int>(cheats_list.size())) { | ||||
|     if (index < 0 || index >= cheats_list.size()) { | ||||
|         LOG_ERROR(Core_Cheats, "Invalid index {}", index); | ||||
|         return; | ||||
|     } | ||||
|  |  | |||
|  | @ -59,21 +59,25 @@ void FFmpegStream::Flush() { | |||
|     SendFrame(nullptr); | ||||
| } | ||||
| 
 | ||||
| void FFmpegStream::WritePacket(AVPacket& packet) { | ||||
|     FFmpeg::av_packet_rescale_ts(&packet, codec_context->time_base, stream->time_base); | ||||
|     packet.stream_index = stream->index; | ||||
| void FFmpegStream::WritePacket(AVPacket* packet) { | ||||
|     FFmpeg::av_packet_rescale_ts(packet, codec_context->time_base, stream->time_base); | ||||
|     packet->stream_index = stream->index; | ||||
|     { | ||||
|         std::lock_guard lock{*format_context_mutex}; | ||||
|         FFmpeg::av_interleaved_write_frame(format_context, &packet); | ||||
|         FFmpeg::av_interleaved_write_frame(format_context, packet); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void FFmpegStream::SendFrame(AVFrame* frame) { | ||||
|     // Initialize packet
 | ||||
|     AVPacket packet; | ||||
|     FFmpeg::av_init_packet(&packet); | ||||
|     packet.data = nullptr; | ||||
|     packet.size = 0; | ||||
|     AVPacket* packet = FFmpeg::av_packet_alloc(); | ||||
|     if (!packet) { | ||||
|         LOG_ERROR(Render, "Frame dropped: av_packet_alloc failed"); | ||||
|     } | ||||
|     SCOPE_EXIT({ FFmpeg::av_packet_free(&packet); }); | ||||
| 
 | ||||
|     packet->data = nullptr; | ||||
|     packet->size = 0; | ||||
| 
 | ||||
|     // Encode frame
 | ||||
|     if (FFmpeg::avcodec_send_frame(codec_context.get(), frame) < 0) { | ||||
|  | @ -82,7 +86,7 @@ void FFmpegStream::SendFrame(AVFrame* frame) { | |||
|     } | ||||
|     int error = 1; | ||||
|     while (error >= 0) { | ||||
|         error = FFmpeg::avcodec_receive_packet(codec_context.get(), &packet); | ||||
|         error = FFmpeg::avcodec_receive_packet(codec_context.get(), packet); | ||||
|         if (error == AVERROR(EAGAIN) || error == AVERROR_EOF) | ||||
|             return; | ||||
|         if (error < 0) { | ||||
|  | @ -485,7 +489,7 @@ bool FFmpegAudioStream::Init(FFmpegMuxer& muxer) { | |||
|     } | ||||
|     codec_context->time_base.num = 1; | ||||
|     codec_context->time_base.den = codec_context->sample_rate; | ||||
| #if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59, 24, 100) | ||||
| #if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59, 24, 100) // lavc 59.24.100
 | ||||
|     codec_context->ch_layout = AV_CHANNEL_LAYOUT_STEREO; | ||||
| #else | ||||
|     codec_context->channel_layout = AV_CH_LAYOUT_STEREO; | ||||
|  | @ -527,7 +531,7 @@ bool FFmpegAudioStream::Init(FFmpegMuxer& muxer) { | |||
|     audio_frame->format = codec_context->sample_fmt; | ||||
|     audio_frame->sample_rate = codec_context->sample_rate; | ||||
| 
 | ||||
| #if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59, 24, 100) | ||||
| #if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59, 24, 100) // lavc 59.24.100
 | ||||
|     auto num_channels = codec_context->ch_layout.nb_channels; | ||||
|     audio_frame->ch_layout = codec_context->ch_layout; | ||||
|     SwrContext* context = nullptr; | ||||
|  | @ -1003,7 +1007,7 @@ void GetOptionList(std::vector<OptionInfo>& out, const AVClass* av_class, bool s | |||
|     } | ||||
| 
 | ||||
|     const AVClass* child_class = nullptr; | ||||
| #if LIBAVCODEC_VERSION_MAJOR >= 59 | ||||
| #if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(56, 53, 100) // lavu 56.53.100
 | ||||
|     void* iter = nullptr; | ||||
|     while ((child_class = FFmpeg::av_opt_child_class_iterate(av_class, &iter))) { | ||||
| #else | ||||
|  |  | |||
|  | @ -37,7 +37,7 @@ public: | |||
| protected: | ||||
|     ~FFmpegStream(); | ||||
| 
 | ||||
|     void WritePacket(AVPacket& packet); | ||||
|     void WritePacket(AVPacket* packet); | ||||
|     void SendFrame(AVFrame* frame); | ||||
| 
 | ||||
|     struct AVCodecContextDeleter { | ||||
|  | @ -52,6 +52,12 @@ protected: | |||
|         } | ||||
|     }; | ||||
| 
 | ||||
|     struct AVPacketDeleter { | ||||
|         void operator()(AVPacket* packet) const { | ||||
|             av_packet_free(&packet); | ||||
|         } | ||||
|     }; | ||||
| 
 | ||||
|     AVFormatContext* format_context{}; | ||||
|     std::mutex* format_context_mutex{}; | ||||
|     std::unique_ptr<AVCodecContext, AVCodecContextDeleter> codec_context{}; | ||||
|  |  | |||
|  | @ -31,7 +31,7 @@ enum class LowPathType : u32 { | |||
| }; | ||||
| 
 | ||||
| union Mode { | ||||
|     u32 hex; | ||||
|     u32 hex = 0; | ||||
|     BitField<0, 1, u32> read_flag; | ||||
|     BitField<1, 1, u32> write_flag; | ||||
|     BitField<2, 1, u32> create_flag; | ||||
|  |  | |||
|  | @ -90,7 +90,7 @@ union CoreVersion { | |||
|         major.Assign(major_ver); | ||||
|     } | ||||
| 
 | ||||
|     u32 raw; | ||||
|     u32 raw = 0; | ||||
|     BitField<8, 8, u32> revision; | ||||
|     BitField<16, 8, u32> minor; | ||||
|     BitField<24, 8, u32> major; | ||||
|  |  | |||
|  | @ -3,6 +3,7 @@ | |||
| // Refer to the license.txt file included.
 | ||||
| 
 | ||||
| #include <algorithm> | ||||
| #include <climits> | ||||
| #include <list> | ||||
| #include <vector> | ||||
| #include <boost/serialization/string.hpp> | ||||
|  | @ -288,7 +289,7 @@ void ThreadManager::DebugThreadQueue() { | |||
| 
 | ||||
|     for (auto& t : thread_list) { | ||||
|         u32 priority = ready_queue.contains(t.get()); | ||||
|         if (priority != -1) { | ||||
|         if (priority != UINT_MAX) { | ||||
|             LOG_DEBUG(Kernel, "0x{:02X} {}", priority, t->GetObjectId()); | ||||
|         } | ||||
|     } | ||||
|  |  | |||
|  | @ -904,7 +904,7 @@ void Module::SetSystemSetupNeeded(bool setup_needed) { | |||
| } | ||||
| 
 | ||||
| bool Module::IsSystemSetupNeeded() { | ||||
|     u32 block; | ||||
|     u32 block{}; | ||||
|     GetConfigInfoBlock(SystemSetupRequiredBlockID, sizeof(block), 0xC, &block); | ||||
|     return (block & 0xFFFF) == 0; | ||||
| } | ||||
|  |  | |||
|  | @ -204,12 +204,11 @@ void ExtraHID::HandleReadCalibrationDataRequest(const std::vector<u8>& request_b | |||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     std::vector<u8> response(5); | ||||
|     std::vector<u8> response(5 + size); | ||||
|     response[0] = static_cast<u8>(ResponseID::ReadCalibrationData); | ||||
|     std::memcpy(&response[1], &request.offset, sizeof(request.offset)); | ||||
|     std::memcpy(&response[3], &request.size, sizeof(request.size)); | ||||
|     response.insert(response.end(), calibration_data.begin() + offset, | ||||
|                     calibration_data.begin() + offset + size); | ||||
|     std::memcpy(&response[5], calibration_data.data() + offset, size); | ||||
|     Send(response); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -303,6 +303,7 @@ std::vector<u8> GenerateEAPoLStartFrame(u16 association_id, const NodeInfo& node | |||
|     std::memcpy(eapol_buffer.data(), &eapol_start, sizeof(eapol_start)); | ||||
| 
 | ||||
|     std::vector<u8> buffer = GenerateLLCHeader(EtherType::EAPoL); | ||||
|     buffer.reserve(buffer.size() + sizeof(EAPoLStartPacket)); | ||||
|     buffer.insert(buffer.end(), eapol_buffer.begin(), eapol_buffer.end()); | ||||
|     return buffer; | ||||
| } | ||||
|  | @ -366,6 +367,7 @@ std::vector<u8> GenerateEAPoLLogoffFrame(const MacAddress& mac_address, u16 netw | |||
|     std::memcpy(eapol_buffer.data(), &eapol_logoff, sizeof(eapol_logoff)); | ||||
| 
 | ||||
|     std::vector<u8> buffer = GenerateLLCHeader(EtherType::EAPoL); | ||||
|     buffer.reserve(buffer.size() + sizeof(EAPoLStartPacket)); | ||||
|     buffer.insert(buffer.end(), eapol_buffer.begin(), eapol_buffer.end()); | ||||
|     return buffer; | ||||
| } | ||||
|  |  | |||
|  | @ -519,9 +519,9 @@ struct CTRPollFD { | |||
|         CTRPollFD result; | ||||
|         result.events.hex = Events::TranslateTo3DS(fd.events, has_libctru_bug).hex; | ||||
|         result.revents.hex = Events::TranslateTo3DS(fd.revents, has_libctru_bug).hex; | ||||
|         for (auto iter = socu.open_sockets.begin(); iter != socu.open_sockets.end(); ++iter) { | ||||
|             if (iter->second.socket_fd == fd.fd) { | ||||
|                 result.fd = iter->first; | ||||
|         for (const auto& socket : socu.open_sockets) { | ||||
|             if (socket.second.socket_fd == fd.fd) { | ||||
|                 result.fd = socket.first; | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|  | @ -662,7 +662,8 @@ struct CTRAddrInfo { | |||
|         }; | ||||
|         ctr_addr.ai_addrlen = static_cast<s32_le>(ctr_addr.ai_addr.raw.len); | ||||
|         if (addr.ai_canonname) | ||||
|             std::strncpy(ctr_addr.ai_canonname, addr.ai_canonname, sizeof(ctr_addr.ai_canonname)); | ||||
|             std::strncpy(ctr_addr.ai_canonname, addr.ai_canonname, | ||||
|                          sizeof(ctr_addr.ai_canonname) - 1); | ||||
|         return ctr_addr; | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -45,7 +45,7 @@ struct ControllerState { | |||
|     union { | ||||
|         struct { | ||||
|             union { | ||||
|                 u16_le hex; | ||||
|                 u16_le hex = 0; | ||||
| 
 | ||||
|                 BitField<0, 1, u16> a; | ||||
|                 BitField<1, 1, u16> b; | ||||
|  | @ -96,7 +96,7 @@ struct ControllerState { | |||
| 
 | ||||
|         struct { | ||||
|             union { | ||||
|                 u32_le hex; | ||||
|                 u32_le hex = 0; | ||||
| 
 | ||||
|                 BitField<0, 5, u32> battery_level; | ||||
|                 BitField<5, 1, u32> zl_not_held; | ||||
|  | @ -136,7 +136,7 @@ static u64 GetInputCount(const std::vector<u8>& input) { | |||
|             break; | ||||
|         } | ||||
| 
 | ||||
|         ControllerState state; | ||||
|         ControllerState state{}; | ||||
|         std::memcpy(&state, input.data() + pos, sizeof(ControllerState)); | ||||
|         if (state.type == ControllerStateType::PadAndCircle) { | ||||
|             input_count++; | ||||
|  | @ -238,7 +238,7 @@ void Movie::CheckInputEnd() { | |||
| } | ||||
| 
 | ||||
| void Movie::Play(Service::HID::PadState& pad_state, s16& circle_pad_x, s16& circle_pad_y) { | ||||
|     ControllerState s; | ||||
|     ControllerState s{}; | ||||
|     std::memcpy(&s, &recorded_input[current_byte], sizeof(ControllerState)); | ||||
|     current_byte += sizeof(ControllerState); | ||||
|     current_input++; | ||||
|  | @ -270,7 +270,7 @@ void Movie::Play(Service::HID::PadState& pad_state, s16& circle_pad_x, s16& circ | |||
| } | ||||
| 
 | ||||
| void Movie::Play(Service::HID::TouchDataEntry& touch_data) { | ||||
|     ControllerState s; | ||||
|     ControllerState s{}; | ||||
|     std::memcpy(&s, &recorded_input[current_byte], sizeof(ControllerState)); | ||||
|     current_byte += sizeof(ControllerState); | ||||
| 
 | ||||
|  | @ -287,7 +287,7 @@ void Movie::Play(Service::HID::TouchDataEntry& touch_data) { | |||
| } | ||||
| 
 | ||||
| void Movie::Play(Service::HID::AccelerometerDataEntry& accelerometer_data) { | ||||
|     ControllerState s; | ||||
|     ControllerState s{}; | ||||
|     std::memcpy(&s, &recorded_input[current_byte], sizeof(ControllerState)); | ||||
|     current_byte += sizeof(ControllerState); | ||||
| 
 | ||||
|  | @ -304,7 +304,7 @@ void Movie::Play(Service::HID::AccelerometerDataEntry& accelerometer_data) { | |||
| } | ||||
| 
 | ||||
| void Movie::Play(Service::HID::GyroscopeDataEntry& gyroscope_data) { | ||||
|     ControllerState s; | ||||
|     ControllerState s{}; | ||||
|     std::memcpy(&s, &recorded_input[current_byte], sizeof(ControllerState)); | ||||
|     current_byte += sizeof(ControllerState); | ||||
| 
 | ||||
|  | @ -321,7 +321,7 @@ void Movie::Play(Service::HID::GyroscopeDataEntry& gyroscope_data) { | |||
| } | ||||
| 
 | ||||
| void Movie::Play(Service::IR::PadState& pad_state, s16& c_stick_x, s16& c_stick_y) { | ||||
|     ControllerState s; | ||||
|     ControllerState s{}; | ||||
|     std::memcpy(&s, &recorded_input[current_byte], sizeof(ControllerState)); | ||||
|     current_byte += sizeof(ControllerState); | ||||
| 
 | ||||
|  | @ -339,7 +339,7 @@ void Movie::Play(Service::IR::PadState& pad_state, s16& c_stick_x, s16& c_stick_ | |||
| } | ||||
| 
 | ||||
| void Movie::Play(Service::IR::ExtraHIDResponse& extra_hid_response) { | ||||
|     ControllerState s; | ||||
|     ControllerState s{}; | ||||
|     std::memcpy(&s, &recorded_input[current_byte], sizeof(ControllerState)); | ||||
|     current_byte += sizeof(ControllerState); | ||||
| 
 | ||||
|  | @ -371,7 +371,7 @@ void Movie::Record(const Service::HID::PadState& pad_state, const s16& circle_pa | |||
|                    const s16& circle_pad_y) { | ||||
|     current_input++; | ||||
| 
 | ||||
|     ControllerState s; | ||||
|     ControllerState s{}; | ||||
|     s.type = ControllerStateType::PadAndCircle; | ||||
| 
 | ||||
|     s.pad_and_circle.a.Assign(static_cast<u16>(pad_state.a)); | ||||
|  | @ -396,7 +396,7 @@ void Movie::Record(const Service::HID::PadState& pad_state, const s16& circle_pa | |||
| } | ||||
| 
 | ||||
| void Movie::Record(const Service::HID::TouchDataEntry& touch_data) { | ||||
|     ControllerState s; | ||||
|     ControllerState s{}; | ||||
|     s.type = ControllerStateType::Touch; | ||||
| 
 | ||||
|     s.touch.x = touch_data.x; | ||||
|  | @ -407,7 +407,7 @@ void Movie::Record(const Service::HID::TouchDataEntry& touch_data) { | |||
| } | ||||
| 
 | ||||
| void Movie::Record(const Service::HID::AccelerometerDataEntry& accelerometer_data) { | ||||
|     ControllerState s; | ||||
|     ControllerState s{}; | ||||
|     s.type = ControllerStateType::Accelerometer; | ||||
| 
 | ||||
|     s.accelerometer.x = accelerometer_data.x; | ||||
|  | @ -418,7 +418,7 @@ void Movie::Record(const Service::HID::AccelerometerDataEntry& accelerometer_dat | |||
| } | ||||
| 
 | ||||
| void Movie::Record(const Service::HID::GyroscopeDataEntry& gyroscope_data) { | ||||
|     ControllerState s; | ||||
|     ControllerState s{}; | ||||
|     s.type = ControllerStateType::Gyroscope; | ||||
| 
 | ||||
|     s.gyroscope.x = gyroscope_data.x; | ||||
|  | @ -430,7 +430,7 @@ void Movie::Record(const Service::HID::GyroscopeDataEntry& gyroscope_data) { | |||
| 
 | ||||
| void Movie::Record(const Service::IR::PadState& pad_state, const s16& c_stick_x, | ||||
|                    const s16& c_stick_y) { | ||||
|     ControllerState s; | ||||
|     ControllerState s{}; | ||||
|     s.type = ControllerStateType::IrRst; | ||||
| 
 | ||||
|     s.ir_rst.x = c_stick_x; | ||||
|  | @ -442,7 +442,7 @@ void Movie::Record(const Service::IR::PadState& pad_state, const s16& c_stick_x, | |||
| } | ||||
| 
 | ||||
| void Movie::Record(const Service::IR::ExtraHIDResponse& extra_hid_response) { | ||||
|     ControllerState s; | ||||
|     ControllerState s{}; | ||||
|     s.type = ControllerStateType::ExtraHidResponse; | ||||
| 
 | ||||
|     s.extra_hid_response.battery_level.Assign(extra_hid_response.buttons.battery_level); | ||||
|  |  | |||
|  | @ -1018,7 +1018,7 @@ public: | |||
|     } | ||||
| 
 | ||||
|     Common::ParamPackage GetNextInput() override { | ||||
|         SDL_Event event; | ||||
|         SDL_Event event{}; | ||||
|         while (state.event_queue.Pop(event)) { | ||||
|             if (event.type != SDL_JOYAXISMOTION || std::abs(event.jaxis.value / 32767.0) < 0.5) { | ||||
|                 continue; | ||||
|  |  | |||
|  | @ -85,42 +85,42 @@ Packet& Packet::operator>>(u8& out_data) { | |||
| } | ||||
| 
 | ||||
| Packet& Packet::operator>>(s16& out_data) { | ||||
|     s16 value; | ||||
|     s16 value = 0; | ||||
|     Read(&value, sizeof(value)); | ||||
|     out_data = ntohs(value); | ||||
|     return *this; | ||||
| } | ||||
| 
 | ||||
| Packet& Packet::operator>>(u16& out_data) { | ||||
|     u16 value; | ||||
|     u16 value = 0; | ||||
|     Read(&value, sizeof(value)); | ||||
|     out_data = ntohs(value); | ||||
|     return *this; | ||||
| } | ||||
| 
 | ||||
| Packet& Packet::operator>>(s32& out_data) { | ||||
|     s32 value; | ||||
|     s32 value = 0; | ||||
|     Read(&value, sizeof(value)); | ||||
|     out_data = ntohl(value); | ||||
|     return *this; | ||||
| } | ||||
| 
 | ||||
| Packet& Packet::operator>>(u32& out_data) { | ||||
|     u32 value; | ||||
|     u32 value = 0; | ||||
|     Read(&value, sizeof(value)); | ||||
|     out_data = ntohl(value); | ||||
|     return *this; | ||||
| } | ||||
| 
 | ||||
| Packet& Packet::operator>>(s64& out_data) { | ||||
|     s64 value; | ||||
|     s64 value = 0; | ||||
|     Read(&value, sizeof(value)); | ||||
|     out_data = ntohll(value); | ||||
|     return *this; | ||||
| } | ||||
| 
 | ||||
| Packet& Packet::operator>>(u64& out_data) { | ||||
|     u64 value; | ||||
|     u64 value = 0; | ||||
|     Read(&value, sizeof(value)); | ||||
|     out_data = ntohll(value); | ||||
|     return *this; | ||||
|  |  | |||
|  | @ -150,7 +150,7 @@ public: | |||
|         setup.uniforms.f[0] = Common::MakeVec(vertex_num, vertex_num, vertex_num, vertex_num); | ||||
| 
 | ||||
|         // The second uniform register and so on are used for receiving input vertices
 | ||||
|         buffer_cur = setup.uniforms.f + 1; | ||||
|         buffer_cur = setup.uniforms.f.data() + 1; | ||||
| 
 | ||||
|         main_vertex_num = regs.pipeline.variable_vertex_main_num_minus_1 + 1; | ||||
|         total_vertex_num = val; | ||||
|  | @ -200,7 +200,7 @@ private: | |||
|     template <class Archive> | ||||
|     void save(Archive& ar, const unsigned int version) const { | ||||
|         serialize_common(this, ar, version); | ||||
|         auto buffer_idx = static_cast<u32>(buffer_cur - setup.uniforms.f); | ||||
|         auto buffer_idx = static_cast<u32>(buffer_cur - setup.uniforms.f.data()); | ||||
|         ar << buffer_idx; | ||||
|     } | ||||
| 
 | ||||
|  | @ -209,7 +209,7 @@ private: | |||
|         serialize_common(this, ar, version); | ||||
|         u32 buffer_idx; | ||||
|         ar >> buffer_idx; | ||||
|         buffer_cur = setup.uniforms.f + buffer_idx; | ||||
|         buffer_cur = setup.uniforms.f.data() + buffer_idx; | ||||
|     } | ||||
| 
 | ||||
|     BOOST_SERIALIZATION_SPLIT_MEMBER() | ||||
|  | @ -229,7 +229,7 @@ public: | |||
|         vs_output_num = regs.pipeline.vs_outmap_total_minus_1_a + 1; | ||||
|         ASSERT(vs_output_num == regs.pipeline.gs_config.stride_minus_1 + 1); | ||||
|         std::size_t vertex_num = regs.pipeline.gs_config.fixed_vertex_num_minus_1 + 1; | ||||
|         buffer_cur = buffer_begin = setup.uniforms.f + regs.pipeline.gs_config.start_index; | ||||
|         buffer_cur = buffer_begin = setup.uniforms.f.data() + regs.pipeline.gs_config.start_index; | ||||
|         buffer_end = buffer_begin + vs_output_num * vertex_num; | ||||
|     } | ||||
| 
 | ||||
|  | @ -273,9 +273,9 @@ private: | |||
|     template <class Archive> | ||||
|     void save(Archive& ar, const unsigned int version) const { | ||||
|         serialize_common(this, ar, version); | ||||
|         auto buffer_offset = static_cast<u32>(buffer_begin - setup.uniforms.f); | ||||
|         auto buffer_idx = static_cast<u32>(buffer_cur - setup.uniforms.f); | ||||
|         auto buffer_size = static_cast<u32>(buffer_end - setup.uniforms.f); | ||||
|         auto buffer_offset = static_cast<u32>(buffer_begin - setup.uniforms.f.data()); | ||||
|         auto buffer_idx = static_cast<u32>(buffer_cur - setup.uniforms.f.data()); | ||||
|         auto buffer_size = static_cast<u32>(buffer_end - setup.uniforms.f.data()); | ||||
|         ar << buffer_offset; | ||||
|         ar << buffer_idx; | ||||
|         ar << buffer_size; | ||||
|  | @ -288,9 +288,9 @@ private: | |||
|         ar >> buffer_offset; | ||||
|         ar >> buffer_idx; | ||||
|         ar >> buffer_size; | ||||
|         buffer_begin = setup.uniforms.f + buffer_offset; | ||||
|         buffer_cur = setup.uniforms.f + buffer_idx; | ||||
|         buffer_end = setup.uniforms.f + buffer_size; | ||||
|         buffer_begin = setup.uniforms.f.data() + buffer_offset; | ||||
|         buffer_cur = setup.uniforms.f.data() + buffer_idx; | ||||
|         buffer_end = setup.uniforms.f.data() + buffer_size; | ||||
|     } | ||||
| 
 | ||||
|     BOOST_SERIALIZATION_SPLIT_MEMBER() | ||||
|  |  | |||
|  | @ -32,8 +32,7 @@ void Shutdown() { | |||
| 
 | ||||
| template <typename T> | ||||
| void Zero(T& o) { | ||||
|     static_assert(std::is_trivially_copyable_v<T>, | ||||
|                   "It's undefined behavior to memset a non-trivially copyable type"); | ||||
|     static_assert(std::is_trivial_v<T>, "It's undefined behavior to memset a non-trivial type"); | ||||
|     memset(&o, 0, sizeof(o)); | ||||
| } | ||||
| 
 | ||||
|  | @ -56,10 +55,10 @@ State::State() : geometry_pipeline(*this) { | |||
| 
 | ||||
| void State::Reset() { | ||||
|     Zero(regs); | ||||
|     Zero(vs); | ||||
|     Zero(gs); | ||||
|     vs = {}; | ||||
|     gs = {}; | ||||
|     Zero(cmd_list); | ||||
|     Zero(immediate); | ||||
|     immediate = {}; | ||||
|     primitive_assembler.Reconfigure(PipelineRegs::TriangleTopology::List); | ||||
|     vs_float_regs_counter = 0; | ||||
|     vs_uniform_write_buffer.fill(0); | ||||
|  |  | |||
|  | @ -241,7 +241,7 @@ private: | |||
| struct Uniforms { | ||||
|     // The float uniforms are accessed by the shader JIT using SSE instructions, and are
 | ||||
|     // therefore required to be 16-byte aligned.
 | ||||
|     alignas(16) Common::Vec4<float24> f[96]; | ||||
|     alignas(16) std::array<Common::Vec4<float24>, 96> f; | ||||
| 
 | ||||
|     std::array<bool, 16> b; | ||||
|     std::array<Common::Vec4<u8>, 4> i; | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue