Handle more fields memory management insie the bx_param_c.

Remove more strdups
This commit is contained in:
Stanislav Shwartsman 2006-05-30 17:01:27 +00:00
parent a57d0a6aa9
commit 4b7e7087aa
5 changed files with 118 additions and 111 deletions

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: config.cc,v 1.105 2006-05-29 22:33:38 sshwarts Exp $
// $Id: config.cc,v 1.106 2006-05-30 17:01:27 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2002 MandrakeSoft S.A.
@ -461,7 +461,7 @@ void bx_init_options()
path = new bx_param_filename_c(optnum1,
"path",
"Path",
strdup(descr),
descr,
"", BX_PATHNAME_LEN);
sprintf(label, "Name of optional ROM image #%d", i+1);
strcat(label, " : %s");
@ -470,7 +470,7 @@ void bx_init_options()
optaddr = new bx_param_num_c(optnum1,
"addr",
"Address",
strdup(descr),
descr,
0, BX_MAX_BIT32U,
0);
optaddr->set_base(16);
@ -490,7 +490,7 @@ void bx_init_options()
path = new bx_param_filename_c(optnum2,
"path",
"Path",
strdup(descr),
descr,
"", BX_PATHNAME_LEN);
sprintf(label, "Name of optional RAM image #%d", i+1);
strcat(label, " : %s");
@ -499,7 +499,7 @@ void bx_init_options()
optaddr = new bx_param_num_c(optnum2,
"addr",
"Address",
strdup(descr),
descr,
0, BX_MAX_BIT32U,
0);
optaddr->set_base(16);
@ -585,8 +585,8 @@ void bx_init_options()
sprintf (label, "PCI slot #%d device", i+1);
bx_param_string_c *devname = new bx_param_string_c(slot,
name,
strdup(label),
strdup(descr),
label,
descr,
"", BX_PATHNAME_LEN);
// add to deplist
*pci_deps_ptr++ = devname;
@ -838,8 +838,8 @@ void bx_init_options()
sprintf(descr, "Name of drive #%d in boot sequence (A, C or CD)", i+1);
bx_param_enum_c *bootdrive = new bx_param_enum_c(boot_params,
name,
strdup(label),
strdup(descr),
label,
descr,
&bochs_bootdisk_names[(i==0)?BX_BOOT_FLOPPYA:BX_BOOT_NONE],
(i==0)?BX_BOOT_FLOPPYA:BX_BOOT_NONE,
(i==0)?BX_BOOT_FLOPPYA:BX_BOOT_NONE);
@ -1233,17 +1233,11 @@ void bx_init_options()
menu->get_options()->set(bx_list_c::SERIES_ASK);
sprintf(label, "Enable parallel port #%d", i+1);
sprintf(descr, "Controls whether parallel port #%d is installed or not", i+1);
enabled = new bx_param_bool_c(menu,
"enabled",
strdup(label),
strdup(descr),
enabled = new bx_param_bool_c(menu, "enabled", label, descr,
(i==0)? 1 : 0); // only enable #1 by default
sprintf(label, "Parallel port #%d output file", i+1);
sprintf(descr, "Data written to parport#%d by the guest OS is written to this file", i+1);
path = new bx_param_filename_c(menu,
"outfile",
strdup(label),
strdup(descr),
path = new bx_param_filename_c(menu, "outfile", label, descr,
"", BX_PATHNAME_LEN);
deplist = new bx_list_c(NULL, 1);
deplist->add(path);
@ -1270,27 +1264,16 @@ void bx_init_options()
menu->get_options()->set(bx_list_c::SERIES_ASK);
sprintf(label, "Enable serial port #%d (COM%d)", i+1, i+1);
sprintf(descr, "Controls whether COM%d is installed or not", i+1);
enabled = new bx_param_bool_c(menu,
"enabled",
strdup(label),
strdup(descr),
enabled = new bx_param_bool_c(menu, "enabled", label, descr,
(i==0)?1 : 0); // only enable the first by default
sprintf(label, "I/O mode of the serial device for COM%d", i+1);
sprintf(descr, "The mode can be one these: 'null', 'file', 'term', 'raw', 'mouse', 'socket'");
mode = new bx_param_enum_c(menu,
"mode",
strdup(label),
strdup(descr),
serial_mode_list,
0,
0);
mode = new bx_param_enum_c(menu, "mode", label, descr,
serial_mode_list, 0, 0);
mode->set_ask_format("Choose I/O mode of the serial device [%s] ");
sprintf(label, "Pathname of the serial device for COM%d", i+1);
sprintf(descr, "The path can be a real serial device or a pty (X/Unix only)");
path = new bx_param_filename_c(menu,
"dev",
strdup(label),
strdup(descr),
path = new bx_param_filename_c(menu, "dev", label, descr,
"", BX_PATHNAME_LEN);
deplist = new bx_list_c(NULL, 2);
deplist->add(mode);
@ -1311,11 +1294,7 @@ void bx_init_options()
menu->set_enabled(BX_SUPPORT_PCIUSB);
sprintf(label, "Enable usb hub #%d", i+1);
sprintf(descr, "Controls whether %s is installed or not", group);
enabled = new bx_param_bool_c(menu,
"enabled",
strdup(label),
strdup(descr),
0);
enabled = new bx_param_bool_c(menu, "enabled", label, descr, 0);
enabled->set_enabled(BX_SUPPORT_PCIUSB);
port = new bx_param_string_c(menu,
"port1",
@ -1747,7 +1726,7 @@ char *bx_find_bochsrc ()
}
assert (fd != NULL && rcfile[0] != 0);
fclose (fd);
return strdup (rcfile);
return strdup(rcfile);
}
static int parse_bochsrc(const char *rcfile)

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: init.cc,v 1.110 2006-05-29 22:33:38 sshwarts Exp $
// $Id: init.cc,v 1.111 2006-05-30 17:01:27 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001 MandrakeSoft S.A.
@ -392,7 +392,7 @@ void BX_CPU_C::register_state(void)
BXRS_PARAM_SPECIAL32(list, cpu_version, param_save_handler, param_restore_handler);
BXRS_PARAM_SPECIAL32(list, cpuid_std, param_save_handler, param_restore_handler);
BXRS_PARAM_SPECIAL32(list, cpuid_ext, param_save_handler, param_restore_handler);
BXRS_HEX_PARAM_SIMPLE(list, cpu_mode);
BXRS_DEC_PARAM_SIMPLE(list, cpu_mode);
BXRS_HEX_PARAM_SIMPLE(list, inhibit_mask);
#if BX_SUPPORT_X86_64
BXRS_HEX_PARAM_SIMPLE(list, RAX);

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: siminterface.cc,v 1.155 2006-05-30 16:05:50 vruppert Exp $
// $Id: siminterface.cc,v 1.156 2006-05-30 17:01:27 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// See siminterface.h for description of the siminterface concept.
@ -1176,30 +1176,39 @@ void bx_real_sim_c::save_sr_param(FILE *fp, bx_param_c *node, const char *sr_pat
// define methods of bx_param_* and family
/////////////////////////////////////////////////////////////////////////
bx_object_c::bx_object_c(Bit32u id)
{
this->id = id;
this->type = BXT_OBJECT;
}
void bx_object_c::set_type(bx_objtype type)
{
this->type = type;
}
const char* bx_param_c::default_text_format = NULL;
bx_param_c::bx_param_c(Bit32u id, const char *param_name, char *description)
bx_param_c::bx_param_c(Bit32u id, const char *param_name, const char *param_desc)
: bx_object_c(id)
{
set_type(BXT_PARAM);
this->name = new char[strlen(param_name)+1];
strcpy(this->name, param_name);
this->description = description;
this->description = NULL;
set_description(param_desc);
this->label = NULL;
this->text_format = default_text_format;
this->long_text_format = default_text_format;
this->ask_format = NULL;
this->group_name = NULL;
this->runtime_param = 0;
this->enabled = 1;
this->parent = NULL;
}
bx_param_c::bx_param_c(Bit32u id, const char *param_name, const char *param_label, const char *param_desc)
: bx_object_c(id)
{
set_type(BXT_PARAM);
this->name = new char[strlen(param_name)+1];
strcpy(this->name, param_name);
this->description = NULL;
set_description(param_desc);
this->label = NULL;
set_label(param_label);
this->text_format = default_text_format;
this->long_text_format = default_text_format;
this->ask_format = NULL;
this->group_name = NULL;
this->runtime_param = 0;
this->enabled = 1;
@ -1209,6 +1218,30 @@ bx_param_c::bx_param_c(Bit32u id, const char *param_name, char *description)
bx_param_c::~bx_param_c()
{
delete [] name;
delete [] label;
delete [] description;
}
void bx_param_c::set_description(const char *text)
{
delete [] this->description;
if (text) {
this->description = new char[strlen(text)+1];
strcpy(this->description, text);
} else {
this->description = NULL;
}
}
void bx_param_c::set_label(const char *text)
{
delete [] this->label;
if (text) {
this->label = new char[strlen(text)+1];
strcpy(this->label, text);
} else {
this->label = NULL;
}
}
int bx_param_c::get_param_path(char *path_out, int maxlen)
@ -1236,14 +1269,13 @@ const char* bx_param_c::set_default_format(const char *f)
bx_param_num_c::bx_param_num_c(bx_param_c *parent,
const char *name,
char *label,
char *description,
const char *label,
const char *description,
Bit64s min, Bit64s max, Bit64s initial_val,
bx_bool is_shadow)
: bx_param_c(SIM->gen_param_id(), name, description)
: bx_param_c(SIM->gen_param_id(), name, label, description)
{
set_type(BXT_PARAM_NUM);
this->label = label;
this->min = min;
this->max = max;
this->initial_val = initial_val;
@ -1594,8 +1626,8 @@ void bx_shadow_num_c::reset()
bx_param_bool_c::bx_param_bool_c(bx_param_c *parent,
const char *name,
char *label,
char *description,
const char *label,
const char *description,
Bit64s initial_val,
bx_bool is_shadow)
: bx_param_num_c(parent, name, label, description, 0, 1, initial_val, is_shadow)
@ -1605,7 +1637,7 @@ bx_param_bool_c::bx_param_bool_c(bx_param_c *parent,
bx_shadow_bool_c::bx_shadow_bool_c(bx_param_c *parent,
const char *name,
char *label,
const char *label,
bx_bool *ptr_to_real_val,
Bit8u bitnum)
: bx_param_bool_c(parent, name, label, NULL, (Bit64s) *ptr_to_real_val, 1)
@ -1650,8 +1682,8 @@ void bx_shadow_bool_c::set(Bit64s newval)
bx_param_enum_c::bx_param_enum_c(bx_param_c *parent,
const char *name,
char *label,
char *description,
const char *label,
const char *description,
char **choices,
Bit64s initial_val,
Bit64s value_base)
@ -1689,14 +1721,13 @@ bx_bool bx_param_enum_c::set_by_name(const char *string)
bx_param_string_c::bx_param_string_c(bx_param_c *parent,
const char *name,
char *label,
char *description,
const char *label,
const char *description,
const char *initial_val,
int maxsize)
: bx_param_c(SIM->gen_param_id(), name, description)
: bx_param_c(SIM->gen_param_id(), name, label, description)
{
set_type(BXT_PARAM_STRING);
this->label = label;
if (maxsize < 0)
maxsize = strlen(initial_val) + 1;
this->val = new char[maxsize];
@ -1718,9 +1749,9 @@ bx_param_string_c::bx_param_string_c(bx_param_c *parent,
bx_param_filename_c::bx_param_filename_c(bx_param_c *parent,
const char *name,
char *label,
char *description,
char *initial_val,
const char *label,
const char *description,
const char *initial_val,
int maxsize)
: bx_param_string_c(parent, name, label, description, initial_val, maxsize)
{
@ -1729,14 +1760,14 @@ bx_param_filename_c::bx_param_filename_c(bx_param_c *parent,
bx_param_string_c::~bx_param_string_c()
{
if (this->val != NULL) delete [] this->val;
if (this->initial_val != NULL) delete [] this->initial_val;
if (this->options != NULL) delete this->options;
if (val != NULL) delete [] val;
if (initial_val != NULL) delete [] initial_val;
if (options != NULL) delete options;
}
void bx_param_string_c::reset()
{
strncpy(this->val, this->initial_val, maxsize);
strncpy(val, initial_val, maxsize);
}
void bx_param_string_c::set_handler(param_string_event_handler handler)
@ -1894,10 +1925,10 @@ bx_list_c::bx_list_c(bx_param_c *parent, const char *name, char *title, bx_param
bx_list_c::~bx_list_c()
{
if (this->list) delete [] this->list;
if (this->title != NULL) delete this->title;
if (this->options != NULL) delete this->options;
if (this->choice != NULL) delete this->choice;
if (list != NULL) delete [] list;
if (title != NULL) delete title;
if (options != NULL) delete options;
if (choice != NULL) delete choice;
}
void bx_list_c::init(const char *list_title)

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: siminterface.h,v 1.193 2006-05-29 22:33:38 sshwarts Exp $
// $Id: siminterface.h,v 1.194 2006-05-30 17:01:27 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Intro to siminterface by Bryce Denney:
@ -578,12 +578,12 @@ private:
Bit32u id;
bx_objtype type;
protected:
void set_type(bx_objtype type);
void set_type(bx_objtype _type) { type = _type; }
public:
bx_object_c(Bit32u id);
bx_object_c(Bit32u _id): id(_id), type(BXT_OBJECT) {}
virtual ~bx_object_c() {}
Bit32u get_id() { return id; }
Bit8u get_type() { return type; }
Bit32u get_id() const { return id; }
Bit8u get_type() const { return type; }
};
#define BASE_DEC 10
@ -603,7 +603,8 @@ protected:
int runtime_param;
int enabled;
public:
bx_param_c(Bit32u id, const char *name, char *description);
bx_param_c(Bit32u id, const char *name, const char *description);
bx_param_c(Bit32u id, const char *name, const char *label, const char *description);
virtual ~bx_param_c();
bx_param_c *get_parent() { return (bx_param_c *) parent; }
int get_param_path(char *path_out, int maxlen);
@ -613,14 +614,15 @@ public:
const char *get_long_format() const {return long_text_format;}
void set_ask_format(char *format) {ask_format = format; }
char *get_ask_format() {return ask_format;}
void set_label(char *text) {label = text;}
char *get_label() {return label;}
void set_label(const char *text);
void set_description(const char *text);
const char *get_label() const {return label;}
void set_runtime_param(int val) { runtime_param = val; }
int get_runtime_param() { return runtime_param; }
void set_group(char *group) {group_name = group;}
char *get_group() {return group_name;}
const char *get_name() const { return name; }
char *get_description() { return description; }
const char *get_description() const { return description; }
int get_enabled() const { return enabled; }
virtual void set_enabled(int enabled) { this->enabled = enabled; }
virtual void reset() {}
@ -676,8 +678,8 @@ public:
} bx_numopt_bits;
bx_param_num_c(bx_param_c *parent,
const char *name,
char *label,
char *description,
const char *label,
const char *description,
Bit64s min, Bit64s max, Bit64s initial_val,
bx_bool is_shadow = 0);
virtual void reset();
@ -694,14 +696,14 @@ public:
virtual void set(Bit64s val);
void set_base(int base) { this->base = base; }
void set_initial_val(Bit64s initial_val);
int get_base() { return base; }
int get_base() const { return base; }
void set_range(Bit64u min, Bit64u max);
Bit64s get_min() { return min; }
Bit64s get_max() { return max; }
static Bit32u set_default_base(Bit32u val);
static Bit32u get_default_base() { return default_base; }
void set_options(Bit32u options) { this->options = options; }
Bit32u get_options() { return options; }
Bit32u get_options() const { return options; }
#if BX_USE_TEXTCONFIG
virtual void text_print(FILE *fp);
virtual int text_ask(FILE *fpin, FILE *fpout);
@ -778,8 +780,8 @@ class BOCHSAPI bx_param_bool_c : public bx_param_num_c {
public:
bx_param_bool_c(bx_param_c *parent,
const char *name,
char *label,
char *description,
const char *label,
const char *description,
Bit64s initial_val,
bx_bool is_shadow = 0);
#if BX_USE_TEXTCONFIG
@ -796,7 +798,7 @@ class BOCHSAPI bx_shadow_bool_c : public bx_param_bool_c {
public:
bx_shadow_bool_c(bx_param_c *parent,
const char *name,
char *label,
const char *label,
bx_bool *ptr_to_real_val,
Bit8u bitnum = 0);
bx_shadow_bool_c(bx_param_c *parent,
@ -813,8 +815,8 @@ class BOCHSAPI bx_param_enum_c : public bx_param_num_c {
public:
bx_param_enum_c(bx_param_c *parent,
const char *name,
char *label,
char *description,
const char *label,
const char *description,
char **choices,
Bit64s initial_val,
Bit64s value_base = 0);
@ -847,8 +849,8 @@ public:
} bx_string_opt_bits;
bx_param_string_c(bx_param_c *parent,
const char *name,
char *label,
char *description,
const char *label,
const char *description,
const char *initial_val,
int maxsize=-1);
virtual ~bx_param_string_c();
@ -878,9 +880,9 @@ class BOCHSAPI bx_param_filename_c : public bx_param_string_c {
public:
bx_param_filename_c(bx_param_c *parent,
const char *name,
char *label,
char *description,
char *initial_val,
const char *label,
const char *description,
const char *initial_val,
int maxsize=-1);
};
@ -894,7 +896,7 @@ public:
Bit8u *ptr_to_data,
Bit32u data_size);
Bit8u *getptr() {return data_ptr;}
Bit32u get_size() {return data_size;}
Bit32u get_size() const {return data_size;}
};
#endif
@ -950,7 +952,7 @@ public:
void add(bx_param_c *param);
bx_param_c *get(int index);
bx_param_c *get_by_name(const char *name);
int get_size() { return size; }
int get_size() const { return size; }
bx_param_num_c *get_options() { return options; }
bx_param_num_c *get_choice() { return choice; }
bx_param_string_c *get_title() { return title; }

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: logio.cc,v 1.53 2006-03-06 22:32:02 sshwarts Exp $
// $Id: logio.cc,v 1.54 2006-05-30 17:01:27 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001 MandrakeSoft S.A.
@ -281,11 +281,7 @@ logfunctions::logfunctions(iofunc_t *iofunc)
logfunctions::~logfunctions(void)
{
if ( this->prefix )
{
free(this->prefix);
this->prefix = NULL;
}
if (this->prefix) free(this->prefix);
}
void logfunctions::setio(iofunc_t *i)
@ -600,11 +596,10 @@ logfunc_t *genlog = NULL;
void bx_center_print (FILE *file, char *line, int maxwidth)
{
int imax;
int len = strlen(line);
if (len > maxwidth)
BX_PANIC (("bx_center_print: line is too long: '%s'", line));
imax = (maxwidth - len) >> 1;
int imax = (maxwidth - len) >> 1;
for (int i=0; i<imax; i++) fputc (' ', file);
fputs (line, file);
}