Since I don't have cvs write access yet, I'm attaching two patches.
Patch #1 adds dmalloc support to the automake scripts, and includes a
#ifdef in a key header file (resource.h) that I believe gets passed to
everything else. And also includes a minor fix to resource.c to fix a
potentially invalid free().
But then several files break compilation:
engine/game.c kgraphics.c kmenu.c
basically, there are several places there where we're calling
port->free(GFXW(port)); (or something like that)..
and dmalloc is shitting bricks over this, as it basically redefines what
free() is.
So, I've renamed the gfx_widgets's free call to widfree. Patch #2 is
attached for that and everything it affects. :)
- Pizza
--
Solomon Peachy pizzaATfucktheusers.org
I ain't broke, but I'm badly bent. ICQ# 1318344
Patience comes to those who wait.
...It's not "Beanbag Love", it's a "Transanimate Relationship"...
-- Attached file included as plaintext by Listar --
Index: configure.in
===================================================================
RCS file: /home/cvs/freesci/configure.in,v
retrieving revision 1.33
diff -u -r1.33 configure.in
--- configure.in 2001/01/11 15:57:22 1.33
+++ configure.in 2001/01/14 21:58:03
@@ -45,6 +45,8 @@
[CFLAGS="-Wall $CFLAGS"],
[])
+AM_WITH_DMALLOC
+
AC_C_PARAMETRIZED_BIGENDIAN
AC_OUTPUT(Makefile \
Index: src/include/resource.h
===================================================================
RCS file: /home/cvs/freesci/src/include/resource.h,v
retrieving revision 1.35
diff -u -r1.35 resource.h
--- src/include/resource.h 2001/01/11 20:43:07 1.35
+++ src/include/resource.h 2001/01/14 21:58:04
@@ -35,6 +35,10 @@
/*#define _SCI_RESOURCE_DEBUG */
/*#define _SCI_DECOMPRESS_DEBUG*/
+#ifdef WITH_DMALLOC
+#include <dmalloc.h>
+#endif
+
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
Index: src/scicore/resource.c
===================================================================
RCS file: /home/cvs/freesci/src/scicore/resource.c,v
retrieving revision 1.11
diff -u -r1.11 resource.c
--- src/scicore/resource.c 2001/01/11 15:57:23 1.11
+++ src/scicore/resource.c 2001/01/14 21:58:04
@@ -294,8 +294,11 @@
void killlist(struct singly_linked_resources_struct *rs)
{
- if (rs->next) killlist(rs->next);
- free(rs->next);
+ if (rs->next) {
+ killlist(rs->next);
+ free(rs->next);
+ rs->next = NULL;
+ }
}
-- Attached file included as plaintext by Listar --
Index: src/engine/game.c
===================================================================
RCS file: /home/cvs/freesci/src/engine/game.c,v
retrieving revision 1.28
diff -u -r1.28 game.c
--- src/engine/game.c 2001/01/11 20:43:07 1.28
+++ src/engine/game.c 2001/01/14 22:04:13
@@ -195,7 +195,7 @@
sciprintf("Freeing graphics\n");
- s->visual->free(GFXW(s->visual));
+ s->visual->widfree(GFXW(s->visual));
s->wm_port = s->titlebar_port = s->picture_port = NULL;
s->visual = NULL;
Index: src/engine/kgraphics.c
===================================================================
RCS file: /home/cvs/freesci/src/engine/kgraphics.c,v
retrieving revision 1.54
diff -u -r1.54 kgraphics.c
--- src/engine/kgraphics.c 2001/01/13 22:03:35 1.54
+++ src/engine/kgraphics.c 2001/01/14 22:04:13
@@ -310,7 +310,7 @@
}
port->parent->add(GFXWC(port->parent), GFXW(newport));
- port->free(GFXW(port));
+ port->widfree(GFXW(port));
}
@@ -998,8 +998,8 @@
GFX_ASSERT(gfxop_new_pic(s->gfx_state, pic_nr, 1, PARAM_OR_ALT(3, 0)));
}
- s->wm_port->free(GFXW(s->wm_port));
- s->picture_port->free(GFXW(s->picture_port));
+ s->wm_port->widfree(GFXW(s->wm_port));
+ s->picture_port->widfree(GFXW(s->picture_port));
s->wm_port = gfxw_new_port(s->visual, NULL, gfx_rect(0, 10, 320, 190),
s->ega_colors[0], transparent);
s->picture_port = gfxw_new_port(s->visual, NULL, gfx_rect(0, 10, 320, 190),
s->ega_colors[0], transparent);
@@ -1467,7 +1467,7 @@
widget->draw_bounds.y +=
s->dyn_views->bounds.y - widget->parent->bounds.y;
widget->draw_bounds.x +=
s->dyn_views->bounds.x - widget->parent->bounds.x;
}
- else widget->free(GFXW(widget));
+ else widget->widfree(GFXW(widget));
}
}
@@ -1713,7 +1713,7 @@
SCIkwarn(SCIkERROR,"DISPOSING DISPLAY LIST! This shouldn't happen anymore!\n");
BREAKPOINT();
- list->free(GFXW(list));
+ list->widfree(GFXW(list));
*list_ptr = NULL;
}
Index: src/engine/kmenu.c
===================================================================
RCS file: /home/cvs/freesci/src/engine/kmenu.c,v
retrieving revision 1.11
diff -u -r1.11 kmenu.c
--- src/engine/kmenu.c 2001/01/14 20:08:31 1.11
+++ src/engine/kmenu.c 2001/01/14 22:04:14
@@ -189,7 +189,7 @@
}
- port->free(GFXW(port));
+ port->widfree(GFXW(port));
s->visual->draw(GFXW(s->visual), gfx_point(0,0));
gfxop_update(s->gfx_state);
@@ -372,7 +372,7 @@
sciw_set_menubar(s, s->titlebar_port, s->menubar,
menu_nr);
if (port)
- port->free(GFXW(port));
+ port->widfree(GFXW(port));
port = sciw_new_menu(s, s->titlebar_port, s->menubar,
menu_nr);
s->wm_port->add(GFXWC(s->wm_port), GFXW(port));
@@ -398,7 +398,7 @@
} /* while (menu_mode) */
if (port) {
- port->free(GFXW(port));
+ port->widfree(GFXW(port));
port = NULL;
sciw_set_status_bar(s, s->titlebar_port, s->status_bar_text);
Index: src/gfx/widgets.c
===================================================================
RCS file: /home/cvs/freesci/src/gfx/widgets.c,v
retrieving revision 1.32
diff -u -r1.32 widgets.c
--- src/gfx/widgets.c 2001/01/11 15:57:23 1.32
+++ src/gfx/widgets.c 2001/01/14 22:04:14
@@ -151,7 +151,7 @@
widget_serial_number_counter &= MAX_SERIAL_NUMBER;
widget->draw = NULL;
- widget->free = NULL;
+ widget->widfree = NULL;
widget->tag = NULL;
widget->print = _gfxwop_print_empty;
widget->compare_to = widget->equals = widget->superarea_of = NULL;
@@ -334,7 +334,7 @@
gfxw_bin_op *compare_to, gfxw_bin_op *equals, gfxw_bin_op *superarea_of)
{
widget->draw = draw;
- widget->free = free;
+ widget->widfree = free;
widget->tag = tag;
widget->print = print;
widget->compare_to = compare_to;
@@ -1383,7 +1383,7 @@
while (seeker) {
gfxw_widget_t *next = seeker->next;
- seeker->free(seeker);
+ seeker->widfree(seeker);
seeker = next;
}
@@ -1442,7 +1442,7 @@
if (redshirt->flags & GFXW_FLAG_TAGGED) {
seekerp = (redshirt->next);
- redshirt->free(redshirt); /* He's dead, Jim. */
+ redshirt->widfree(redshirt); /* He's dead, Jim. */
} else
seekerp = (seekerp)->next;
}
@@ -1456,7 +1456,7 @@
while (seeker) {
gfxw_widget_t *next = seeker->next;
- seeker->free(seeker);
+ seeker->widfree(seeker);
seeker = next;
}
return 0;
@@ -1511,12 +1511,12 @@
return 0;
if ((*seekerp)->equals(*seekerp, widget)) {
- widget->free(widget);
+ widget->widfree(widget);
(*seekerp)->flags &= ~GFXW_FLAG_TAGGED;
return 1;
} else {
if (!(widget->flags & GFXW_FLAG_MULTI_ID))
- (*seekerp)->free(*seekerp);
+ (*seekerp)->widfree(*seekerp);
return 0;
}
}
@@ -1711,12 +1711,12 @@
#if 0
if (widget->equals(GFXW(widget), GFXW(*seekerp))) {
widget->next = (*seekerp)->next;
- (*seekerp)->free(GFXW(*seekerp));
+ (*seekerp)->widfree(GFXW(*seekerp));
*seekerp = widget;
return (_parentize_widget(container, widget));
#endif
if (widget->equals(GFXW(widget), GFXW(*seekerp)))
- (*seekerp)->free(GFXW(*seekerp));
+ (*seekerp)->widfree(GFXW(*seekerp));
if (*seekerp)
seekerp = &((*seekerp)->next);
@@ -1965,7 +1965,7 @@
}
if (port->decorations)
- port->decorations->free(GFXW(port->decorations));
+ port->decorations->widfree(GFXW(port->decorations));
return _gfxwop_container_free(widget);
}
@@ -2098,7 +2098,7 @@
}
parent = (gfxw_port_t *) port->parent;
- if (port->free(GFXW(port)))
+ if (port->widfree(GFXW(port)))
return parent;
while (parent && !GFXW_IS_PORT(parent))
@@ -2233,7 +2233,7 @@
gfxw_widget_t *next = widget->next;
if (gfxw_widget_matches_snapshot(snapshot, widget) && !(widget->flags
& GFXW_FLAG_IMMUNE_TO_SNAPSHOTS))
- widget->free(widget);
+ widget->widfree(widget);
else {
if (GFXW_IS_CONTAINER(widget))
_gfxw_free_contents_appropriately(GFXWC(widget),
snapshot);
Index: src/gfx/sci_widgets.c
===================================================================
RCS file: /home/cvs/freesci/src/gfx/sci_widgets.c,v
retrieving revision 1.19
diff -u -r1.19 sci_widgets.c
--- src/gfx/sci_widgets.c 2001/01/12 19:04:42 1.19
+++ src/gfx/sci_widgets.c 2001/01/14 22:04:14
@@ -39,7 +39,7 @@
clear_titlebar(gfxw_port_t *titlebar)
{
if (titlebar->contents) {
- titlebar->contents->free(titlebar->contents);
+ titlebar->contents->widfree(titlebar->contents);
titlebar->contents = NULL;
titlebar->nextpp = &(titlebar->contents);
}
@@ -422,7 +422,7 @@
if (font_height <= 0) {
GFXERROR("Attempt to create list control with invalid font %d\n",
font_nr);
- list->free(GFXW(list));
+ list->widfree(GFXW(list));
return NULL;
}