X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fmisc%2Fprops.cxx;h=8fbbbd585f7952ec14bcca81b45057203516b854;hb=101fdb359871a14726a83cdb5a8bb2c0f6ee5af1;hp=8ff66ca01231cac8c870a314a69e3f330e987170;hpb=9fed9465674cf2f39750fb45a7cf2a446ad01fb1;p=simgear.git diff --git a/simgear/misc/props.cxx b/simgear/misc/props.cxx index 8ff66ca0..8fbbbd58 100644 --- a/simgear/misc/props.cxx +++ b/simgear/misc/props.cxx @@ -17,6 +17,7 @@ using std::sort; #else +#include #include #include @@ -24,7 +25,6 @@ SG_USING_STD(sort); #endif -#include #include #include @@ -222,7 +222,6 @@ copy_string (const char * s) // For some reason, strnlen and // strncpy cause all kinds of crashes. string str = s; - size_t len = strlen(s); char * copy = new char[str.size() + 1]; strcpy(copy, str.c_str()); return copy; @@ -419,7 +418,7 @@ SGPropertyNode::set_string (const char * val) if (_tied) { return _value.string_val->setValue(val); } else { - delete _local_val.string_val; + delete (char *)_local_val.string_val; _local_val.string_val = copy_string(val); return true; } @@ -430,39 +429,53 @@ SGPropertyNode::clear_value () { switch (_type) { case NONE: + break; case ALIAS: _value.alias = 0; break; case BOOL: - delete _value.bool_val; - _value.bool_val = 0; + if (_tied) { + delete _value.bool_val; + _value.bool_val = 0; + } _local_val.bool_val = SGRawValue::DefaultValue; break; case INT: - delete _value.int_val; - _value.int_val = 0; + if (_tied) { + delete _value.int_val; + _value.int_val = 0; + } _local_val.int_val = SGRawValue::DefaultValue; break; case LONG: - delete _value.long_val; - _value.long_val = 0L; + if (_tied) { + delete _value.long_val; + _value.long_val = 0L; + } _local_val.long_val = SGRawValue::DefaultValue; break; case FLOAT: - delete _value.float_val; - _value.float_val = 0; + if (_tied) { + delete _value.float_val; + _value.float_val = 0; + } _local_val.float_val = SGRawValue::DefaultValue; break; case DOUBLE: - delete _value.double_val; - _value.double_val = 0; + if (_tied) { + delete _value.double_val; + _value.double_val = 0; + } _local_val.double_val = SGRawValue::DefaultValue; break; case STRING: case UNSPECIFIED: - delete _value.string_val; - _value.string_val = 0; - delete _local_val.string_val; + if (_tied) { + delete _value.string_val; + _value.string_val = 0; + } else { + delete (char *)_local_val.string_val; + } _local_val.string_val = 0; break; } @@ -663,7 +676,7 @@ SGPropertyNode::SGPropertyNode (const char * name, */ SGPropertyNode::~SGPropertyNode () { - delete _name; + delete (char *)_name; for (int i = 0; i < (int)_children.size(); i++) { delete _children[i]; }