Skip to content

Commit

Permalink
Fix Coverity Uninitialized Scalar Warnings
Browse files Browse the repository at this point in the history
Coverity notes that SDL_UserEvent.windowID is never initialized. SDL documents that memset() should be used to initialize the structure. Subclassing the struct to add various constructors for clarity and future-proofing.

This closes

    CID 1380246
    CID 1380234
    CID 1380159
    CID 1380152
    CID 1356356

Earlier commit for these warnings only fixed the timestamp.
  • Loading branch information
GregoryLundberg authored and jyrkive committed Sep 17, 2017
1 parent 5027d54 commit c6f523f
Show file tree
Hide file tree
Showing 6 changed files with 57 additions and 62 deletions.
16 changes: 3 additions & 13 deletions src/events.cpp
Expand Up @@ -18,6 +18,7 @@
#include "log.hpp"
#include "quit_confirmation.hpp"
#include "video.hpp"
#include "sdl/userevent.hpp"

#if defined _WIN32
#include "desktop/windows_tray_notification.hpp"
Expand Down Expand Up @@ -548,12 +549,7 @@ void pump()
&& std::abs(event.button.x - last_click_x) < DoubleClickMaxMove
&& std::abs(event.button.y - last_click_y) < DoubleClickMaxMove
) {
SDL_UserEvent user_event;
user_event.type = DOUBLE_CLICK_EVENT;
user_event.code = 0;
user_event.data1 = reinterpret_cast<void*>(event.button.x);
user_event.data2 = reinterpret_cast<void*>(event.button.y);
user_event.timestamp = std::time(nullptr);
sdl::UserEvent user_event(DOUBLE_CLICK_EVENT, event.button.x, event.button.y);
::SDL_PushEvent(reinterpret_cast<SDL_Event*>(&user_event));
}

Expand Down Expand Up @@ -755,13 +751,7 @@ void call_in_main_thread(const std::function<void(void)>& f)
invoked_function_data fdata{false, f};

SDL_Event sdl_event;
SDL_UserEvent sdl_userevent;

sdl_userevent.type = INVOKE_FUNCTION_EVENT;
sdl_userevent.code = 0;
sdl_userevent.data1 = &fdata;
sdl_userevent.data2 = nullptr;
sdl_userevent.timestamp = std::time(nullptr);
sdl::UserEvent sdl_userevent(INVOKE_FUNCTION_EVENT, &fdata);

sdl_event.type = INVOKE_FUNCTION_EVENT;
sdl_event.user = sdl_userevent;
Expand Down
9 changes: 2 additions & 7 deletions src/gui/core/event/distributor.cpp
Expand Up @@ -23,6 +23,7 @@
#include "gui/widgets/widget.hpp"
#include "gui/widgets/window.hpp"
#include "gui/widgets/text_box_base.hpp"
#include "sdl/userevent.hpp"

#include "utils/functional.hpp"

Expand Down Expand Up @@ -60,13 +61,7 @@ static Uint32 popup_callback(Uint32 /*interval*/, void* /*param*/)
DBG_GUI_E << "Pushing popup removal event in queue.\n";

SDL_Event event;
SDL_UserEvent data;

data.type = HOVER_REMOVE_POPUP_EVENT;
data.code = 0;
data.data1 = 0;
data.data2 = 0;
data.timestamp = std::time(nullptr);
sdl::UserEvent data(HOVER_REMOVE_POPUP_EVENT);

event.type = HOVER_REMOVE_POPUP_EVENT;
event.user = data;
Expand Down
9 changes: 2 additions & 7 deletions src/gui/core/event/handler.cpp
Expand Up @@ -25,6 +25,7 @@
#include "hotkey/hotkey_item.hpp"
#include "video.hpp"
#include "serialization/unicode_cast.hpp"
#include "sdl/userevent.hpp"

#include <cassert>

Expand Down Expand Up @@ -79,13 +80,7 @@ static Uint32 timer_sdl_draw_event(Uint32, void*)
// DBG_GUI_E << "Pushing draw event in queue.\n";

SDL_Event event;
SDL_UserEvent data;

data.type = DRAW_EVENT;
data.code = 0;
data.data1 = nullptr;
data.data2 = nullptr;
data.timestampt = std::time(nullptr);
sdl::UserEvent data(DRAW_EVENT);

event.type = DRAW_EVENT;
event.user = data;
Expand Down
25 changes: 4 additions & 21 deletions src/gui/widgets/window.cpp
Expand Up @@ -61,6 +61,7 @@
#include "formula/variant.hpp"
#include "video.hpp"
#include "wml_exception.hpp"
#include "sdl/userevent.hpp"

#include "utils/functional.hpp"

Expand Down Expand Up @@ -136,13 +137,7 @@ static Uint32 draw_timer(Uint32, void*)
// DBG_GUI_E << "Pushing draw event in queue.\n";

SDL_Event event;
SDL_UserEvent data;

data.type = DRAW_EVENT;
data.code = 0;
data.data1 = nullptr;
data.data2 = nullptr;
data.timestamp = std::time(nullptr);
sdl::UserEvent data(DRAW_EVENT);

event.type = DRAW_EVENT;
event.user = data;
Expand Down Expand Up @@ -189,13 +184,7 @@ static bool helptip()
DBG_GUI_E << "Pushing SHOW_HELPTIP_EVENT event in queue.\n";

SDL_Event event;
SDL_UserEvent data;

data.type = SHOW_HELPTIP_EVENT;
data.code = 0;
data.data1 = nullptr;
data.data2 = nullptr;
data.timestamp = std::time(nullptr);
sdl::UserEvent data(SHOW_HELPTIP_EVENT);

event.type = SHOW_HELPTIP_EVENT;
event.user = data;
Expand Down Expand Up @@ -600,13 +589,7 @@ int window::show(const bool restore, const unsigned auto_close_timeout)
draw();

SDL_Event event;
SDL_UserEvent data;

data.type = CLOSE_WINDOW_EVENT;
data.code = manager::instance().get_id(*this);
data.data1 = nullptr;
data.data2 = nullptr;
data.timestamp = std::time(nullptr);
sdl::UserEvent data(CLOSE_WINDOW_EVENT, manager::instance().get_id(*this));

event.type = CLOSE_WINDOW_EVENT;
event.user = data;
Expand Down
43 changes: 43 additions & 0 deletions src/sdl/userevent.hpp
@@ -0,0 +1,43 @@
/*
Copyright (C) 2017 the Battle for Wesnoth Project http://www.wesnoth.org/
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY.
See the COPYING file for more details.
*/

#pragma once

#include <SDL_events.h>

namespace sdl
{
class UserEvent : public SDL_UserEvent
{
public:
UserEvent() : SDL_UserEvent() {
}

UserEvent(int type) : UserEvent() {
this->type = type;
}

UserEvent(int type, int code) : UserEvent(type) {
this->code = code;
}

UserEvent(int type, int data1, int data2) : UserEvent(type) {
this->data1 = reinterpret_cast<void*>(data1);
this->data2 = reinterpret_cast<void*>(data2);
}

UserEvent(int type, void* data1) : UserEvent(type) {
this->data1 = data1;
}
};
}
17 changes: 3 additions & 14 deletions src/video.cpp
Expand Up @@ -20,6 +20,7 @@
#include "log.hpp"
#include "preferences/general.hpp"
#include "sdl/window.hpp"
#include "sdl/userevent.hpp"

#include <cassert>
#include <vector>
Expand Down Expand Up @@ -66,13 +67,7 @@ void trigger_full_redraw() {
}

SDL_Event drawEvent;
SDL_UserEvent data;

data.type = DRAW_ALL_EVENT;
data.code = 0;
data.data1 = nullptr;
data.data2 = nullptr;
data.timestamp = std::time(nullptr);
sdl::UserEvent data(DRAW_ALL_EVENT);

drawEvent.type = DRAW_ALL_EVENT;
drawEvent.user = data;
Expand Down Expand Up @@ -153,13 +148,7 @@ void CVideo::video_event_handler::handle_window_event(const SDL_Event &event)
//if(display::get_singleton())
//display::get_singleton()->redraw_everything();
SDL_Event drawEvent;
SDL_UserEvent data;

data.type = DRAW_ALL_EVENT;
data.code = 0;
data.data1 = nullptr;
data.data2 = nullptr;
data.timestamp = std::time(nullptr);
sdl::UserEvent data(DRAW_ALL_EVENT);

drawEvent.type = DRAW_ALL_EVENT;
drawEvent.user = data;
Expand Down

0 comments on commit c6f523f

Please sign in to comment.