return b;
}
+static void
+free_blob(struct blob *blob)
+{
+ free_spline(blob->spline);
+ free(blob->r);
+ free(blob);
+}
+
static void
throb_blob (struct blob *b)
{
return layer;
}
+static void
+free_layer(struct layer *layer, Display *dpy)
+{
+ int i;
+ for (i = 0; i < layer->nblobs; i++){
+ free_blob(layer->blobs[i]);
+ }
+ free(layer->blobs);
+ XFreeGC(dpy, layer->gc);
+ free(layer);
+}
+
#ifndef HAVE_COCOA
static void
goop->mode = xor;
else
fprintf (stderr, "%s: bogus mode: \"%s\"\n", progname, s);
+ free(s);
goop->delay = get_integer_resource (dpy, "delay", "Integer");
return goop;
}
+/* Well, the naming of this function is
+ confusing with goop_free()... */
+static void
+free_goop (struct goop *goop, Display *dpy)
+{
+ int i;
+ for (i = 0; i < goop->nlayers; i++){
+ struct layer * layer = goop->layers[i];
+ free_layer(layer, dpy);
+ }
+ free(goop->layers);
+ XFreeGC(dpy, goop->pixmap_gc);
+ XFreeGC(dpy, goop->window_gc);
+}
+
static void *
goop_init (Display *dpy, Window window)
{
{
struct goop *goop = (struct goop *) closure;
- /* #### leaks like crazy */
struct goop *goop2 = goop_init (dpy, window);
+ free_goop(goop, dpy);
memcpy (goop, goop2, sizeof(*goop));
+ free(goop2);
}
static Bool
static void
goop_free (Display *dpy, Window window, void *closure)
{
+ struct goop *goop = (struct goop *) closure;
+ free_goop(goop, dpy);
+ free(goop);
}