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;
        }
 



Reply via email to