summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2006-12-04 13:36:27 +0000
committerrubidium <rubidium@openttd.org>2006-12-04 13:36:27 +0000
commitc02e39945e2533c7f51f650bcaa00fa11af6a784 (patch)
tree87b758a53a963b20bb7bf0e88784a52d0e736c58
parent7086936bab7dc7d7ab7715e3b57fb19ebc019367 (diff)
downloadopenttd-c02e39945e2533c7f51f650bcaa00fa11af6a784.tar.xz
(svn r7352) -Codechange: add widget_count parameter to the window.
-Codechange: check whether widget indices are valid for all the (Set|Is)WindowWidget(Disabled|Lowered|Hidden) and related functions.
-rw-r--r--window.c4
-rw-r--r--window.h8
2 files changed, 12 insertions, 0 deletions
diff --git a/window.c b/window.c
index 58de0affa..2b9d10910 100644
--- a/window.c
+++ b/window.c
@@ -316,6 +316,7 @@ void DeleteWindow(Window *w)
SetWindowDirty(w);
free(w->widget);
w->widget = NULL;
+ w->widget_count = 0;
/* Find the window in the z-array, and effectively remove it
* by moving all windows after it one to the left */
@@ -519,8 +520,10 @@ void AssignWidgetToWindow(Window *w, const Widget *widget)
w->widget = realloc(w->widget, sizeof(*w->widget) * index);
memcpy(w->widget, widget, sizeof(*w->widget) * index);
+ w->widget_count = index - 1;
} else {
w->widget = NULL;
+ w->widget_count = 0;
}
}
@@ -877,6 +880,7 @@ void UnInitWindowSystem(void)
FOR_ALL_WINDOWS(wz) {
free((*wz)->widget);
(*wz)->widget = NULL;
+ (*wz)->widget_count = 0;
}
}
diff --git a/window.h b/window.h
index adfe106df..534bfb4e1 100644
--- a/window.h
+++ b/window.h
@@ -331,6 +331,7 @@ struct Window {
ViewPort *viewport;
const Widget *original_widget;
Widget *widget;
+ uint widget_count;
uint32 desc_flags;
WindowMessage message;
@@ -640,6 +641,7 @@ void DrawWindowViewport(const Window *w);
*/
static inline void SetWindowWidgetDisabledState(Window *w, byte widget_index, bool disab_stat)
{
+ assert(widget_index < w->widget_count);
SB(w->widget[widget_index].display_flags, WIDG_DISABLED, 1, !!disab_stat);
}
@@ -682,6 +684,7 @@ static inline bool IsWidgetDisabled(const Widget *wi)
*/
static inline bool IsWindowWidgetDisabled(Window *w, byte widget_index)
{
+ assert(widget_index < w->widget_count);
return IsWidgetDisabled(&w->widget[widget_index]);
}
@@ -695,6 +698,7 @@ static inline bool IsWindowWidgetDisabled(Window *w, byte widget_index)
*/
static inline void SetWindowWidgetHiddenState(Window *w, byte widget_index, bool hidden_stat)
{
+ assert(widget_index < w->widget_count);
SB(w->widget[widget_index].display_flags, WIDG_HIDDEN, 1, !!hidden_stat);
}
@@ -737,6 +741,7 @@ static inline bool IsWidgetHidden(const Widget *wi)
*/
static inline bool IsWindowWidgetHidden(Window *w, byte widget_index)
{
+ assert(widget_index < w->widget_count);
return IsWidgetHidden(&w->widget[widget_index]);
}
@@ -748,6 +753,7 @@ static inline bool IsWindowWidgetHidden(Window *w, byte widget_index)
*/
static inline void SetWindowWidgetLoweredState(Window *w, byte widget_index, bool lowered_stat)
{
+ assert(widget_index < w->widget_count);
SB(w->widget[widget_index].display_flags, WIDG_LOWERED, 1, !!lowered_stat);
}
@@ -758,6 +764,7 @@ static inline void SetWindowWidgetLoweredState(Window *w, byte widget_index, boo
*/
static inline void ToggleWidgetLoweredState(Window *w, byte widget_index)
{
+ assert(widget_index < w->widget_count);
TOGGLEBIT(w->widget[widget_index].display_flags, WIDG_LOWERED);
}
@@ -789,6 +796,7 @@ static inline void RaiseWindowWidget(Window *w, byte widget_index)
*/
static inline bool IsWindowWidgetLowered(Window *w, byte widget_index)
{
+ assert(widget_index < w->widget_count);
return HASBIT(w->widget[widget_index].display_flags, WIDG_LOWERED);
}