Fixed memory leaks in Fluid - Thanks for the patch (STR 2455)

git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@7900 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
Matthias Melcher 2010-11-27 22:08:23 +00:00
parent e36e07f313
commit 6b301d4365
3 changed files with 36 additions and 3 deletions

View File

@ -166,6 +166,13 @@ class Fl_Function_Type : public Fl_Type {
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 @@ public:
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 @@ public:
};
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 @@ class Fl_DeclBlock_Type : public Fl_Type {
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 @@ class Fl_Class_Type : public Fl_Type {
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

View File

@ -198,7 +198,8 @@ void Fl_Widget_Type::setlabel(const char *n) {
}
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 @@ Fl_Widget_Type::~Fl_Widget_Type() {
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 @@ static Fl_Window *the_panel;
// 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;

View File

@ -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
//