Author: matt
Date: 2010-11-27 14:08:23 -0800 (Sat, 27 Nov 2010)
New Revision: 7900
Log:
Fixed memory leaks in Fluid - Thanks for the patch (STR 2455)

Modified:
   branches/branch-1.3/fluid/Fl_Type.h
   branches/branch-1.3/fluid/Fl_Widget_Type.cxx
   branches/branch-1.3/fluid/Fl_Widget_Type.h

Modified: branches/branch-1.3/fluid/Fl_Type.h
===================================================================
--- branches/branch-1.3/fluid/Fl_Type.h 2010-11-27 21:46:59 UTC (rev 7899)
+++ branches/branch-1.3/fluid/Fl_Type.h 2010-11-27 22:08:23 UTC (rev 7900)
@@ -166,6 +166,13 @@
   const char* return_type;
   char public_, cdecl_, constructor, havewidgets;
 public:
+  Fl_Function_Type() : 
+    Fl_Type(), 
+    return_type(0L), public_(0), cdecl_(0), constructor(0), havewidgets(0)
+  { }
+  ~Fl_Function_Type() {
+    if (return_type) free((void*)return_type);
+  }
   Fl_Type *make();
   void write_code1();
   void write_code2();
@@ -199,6 +206,10 @@
 class Fl_CodeBlock_Type : public Fl_Type {
   const char* after;
 public:
+  Fl_CodeBlock_Type() : Fl_Type(), after(0L) { }
+  ~Fl_CodeBlock_Type() {
+    if (after) free((void*)after);
+  }
   Fl_Type *make();
   void write_code1();
   void write_code2();
@@ -229,8 +240,12 @@
 };
 
 class Fl_Data_Type : public Fl_Decl_Type {
-       const char *filename_;
+  const char *filename_;
 public:
+  Fl_Data_Type() : Fl_Decl_Type(), filename_(0L) { }
+  ~Fl_Data_Type() {
+    if (filename_) free((void*)filename_);
+  }
   Fl_Type *make();
   void write_code1();
   void write_code2();
@@ -245,6 +260,10 @@
   const char* after;
   char public_;
 public:
+  Fl_DeclBlock_Type() : Fl_Type(), after(0L) { }
+  ~Fl_DeclBlock_Type() {
+    if (after) free((void*)after);
+  }
   Fl_Type *make();
   void write_code1();
   void write_code2();
@@ -279,6 +298,11 @@
   const char* subclass_of;
   char public_;
 public:
+  Fl_Class_Type() : Fl_Type(), subclass_of(0L) { }
+  ~Fl_Class_Type() {
+    if (subclass_of) free((void*)subclass_of);
+  }
+  
   // state variables for output:
   char write_public_state; // true when public: has been printed
   Fl_Class_Type* parent_class; // save class if nested

Modified: branches/branch-1.3/fluid/Fl_Widget_Type.cxx
===================================================================
--- branches/branch-1.3/fluid/Fl_Widget_Type.cxx        2010-11-27 21:46:59 UTC 
(rev 7899)
+++ branches/branch-1.3/fluid/Fl_Widget_Type.cxx        2010-11-27 22:08:23 UTC 
(rev 7900)
@@ -198,7 +198,8 @@
 }
 
 Fl_Widget_Type::Fl_Widget_Type() {
-  for (int n=0; n<NUM_EXTRA_CODE; n++) {extra_code_[n] = 0; subclass_ = 0;}
+  for (int n=0; n<NUM_EXTRA_CODE; n++) {extra_code_[n] = 0; }
+  subclass_ = 0;
   hotspot_ = 0;
   tooltip_ = 0;
   image_name_ = 0;
@@ -216,6 +217,13 @@
     if (o->parent()) ((Fl_Group*)o->parent())->remove(*o);
     delete o;
   }
+  if (subclass_) free((void*)subclass_);
+  if (tooltip_) free((void*)tooltip_);
+  if (image_name_) free((void*)image_name_);
+  if (inactive_name_) free((void*)inactive_name_);
+  for (int n=0; n<NUM_EXTRA_CODE; n++) {
+    if (extra_code_[n]) free((void*) extra_code_[n]);
+  }
 }
 
 void Fl_Widget_Type::extra_code(int m,const char *n) {
@@ -291,6 +299,7 @@
 // initialized parts of the widget that are nyi by fluid.
 
 Fl_Widget_Type *current_widget; // one of the selected ones
+void* const LOAD = (void *)"LOAD"; // "magic" pointer to indicate that we need 
to load values into the dialog
 static int numselected; // number selected
 static int haderror;
 

Modified: branches/branch-1.3/fluid/Fl_Widget_Type.h
===================================================================
--- branches/branch-1.3/fluid/Fl_Widget_Type.h  2010-11-27 21:46:59 UTC (rev 
7899)
+++ branches/branch-1.3/fluid/Fl_Widget_Type.h  2010-11-27 22:08:23 UTC (rev 
7900)
@@ -34,7 +34,7 @@
 struct Fl_Menu_Item;
 class Fluid_Image;
 
-void* const LOAD = (void *)9831;
+extern void* const LOAD;
 extern Fl_Widget_Type *current_widget; // one of the selected ones
 
 //

_______________________________________________
fltk-commit mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk-commit

Reply via email to