Browse Source

Fix static analyzer errors and warnings

Fix several bugs found by scan-build (more to come).
https://clang-analyzer.llvm.org/scan-build.html

See also current travis-ci build log with static analyzer, e.g.
https://travis-ci.com/fltk/fltk/jobs/285426415
(link may become invalid in the future).
pull/30/head
Albrecht Schlosser 5 years ago
parent
commit
8ea4b5b5b1
  1. 2
      fluid/Fl_Function_Type.cxx
  2. 2
      src/Fl_Preferences.cxx
  3. 14
      src/Fl_Screen_Driver.cxx
  4. 9
      src/Fl_Tabs.cxx

2
fluid/Fl_Function_Type.cxx

@ -394,7 +394,7 @@ void Fl_Function_Type::write_code1() { @@ -394,7 +394,7 @@ void Fl_Function_Type::write_code1() {
}
}
if (havewidgets && !child->name()) write_c(" %s* w;\n", subclassname(child));
if (havewidgets && child && !child->name()) write_c(" %s* w;\n", subclassname(child));
indentation += 2;
}

2
src/Fl_Preferences.cxx

@ -1476,7 +1476,7 @@ void Fl_Preferences::Node::createIndex() { @@ -1476,7 +1476,7 @@ void Fl_Preferences::Node::createIndex() {
int n = nChildren();
if (n>NIndex_) {
NIndex_ = n + 16;
index_ = (Node**)realloc(index_, NIndex_*sizeof(Node**));
index_ = (Node**)realloc(index_, NIndex_*sizeof(Node*));
}
Node *nd;
int i = 0;

14
src/Fl_Screen_Driver.cxx

@ -308,15 +308,21 @@ void Fl_Screen_Driver::rescale_all_windows_from_screen(int screen, float f) @@ -308,15 +308,21 @@ void Fl_Screen_Driver::rescale_all_windows_from_screen(int screen, float f)
int i = 0, count = 0; // count top-level windows, except transient scale-displaying window
Fl_Window *win = Fl::first_window();
while (win) {
if (!win->parent() && (Fl_Window_Driver::driver(win)->screen_num() == screen || rescalable() == SYSTEMWIDE_APP_SCALING) &&
win->user_data() != &Fl_Screen_Driver::transient_scale_display) count++;
if (!win->parent() &&
(Fl_Window_Driver::driver(win)->screen_num() == screen || rescalable() == SYSTEMWIDE_APP_SCALING) &&
win->user_data() != &Fl_Screen_Driver::transient_scale_display) {
count++;
}
win = Fl::next_window(win);
}
if (count == 0)
return;
Fl_Window **win_array = new Fl_Window*[count];
win = Fl::first_window(); // memorize all top-level windows
while (win) {
if (!win->parent() && win->user_data() != &Fl_Screen_Driver::transient_scale_display &&
(Fl_Window_Driver::driver(win)->screen_num() == screen || rescalable() == SYSTEMWIDE_APP_SCALING) ) {
if (!win->parent() &&
(Fl_Window_Driver::driver(win)->screen_num() == screen || rescalable() == SYSTEMWIDE_APP_SCALING) &&
win->user_data() != &Fl_Screen_Driver::transient_scale_display) {
win_array[i++] = win;
}
win = Fl::next_window(win);

9
src/Fl_Tabs.cxx

@ -204,17 +204,18 @@ int Fl_Tabs::handle(int event) { @@ -204,17 +204,18 @@ int Fl_Tabs::handle(int event) {
return 1;
case FL_MOVE: {
int ret = Fl_Group::handle(event);
Fl_Widget *tooltip_widget = Fl_Tooltip::current(), *n = tooltip_widget;
Fl_Widget *tooltip_widget = Fl_Tooltip::current();
Fl_Widget *n; // initialized later
int H = tab_height();
if ( (H>=0) && (Fl::event_y()>y()+H) )
if ( (H >= 0) && (Fl::event_y() > y()+H) )
return ret;
else if ( (H<0) && (Fl::event_y() < y()+h()+H) )
else if ( (H < 0) && (Fl::event_y() < y()+h()+H) )
return ret;
else {
n = which(Fl::event_x(), Fl::event_y());
if (!n) n = this;
}
if (n!=tooltip_widget)
if (n != tooltip_widget)
Fl_Tooltip::enter(n);
return ret; }
case FL_FOCUS:

Loading…
Cancel
Save