diff -r a26dee45c467 -r 1aee02c1e294 tool/CommandDownload.cpp --- a/tool/CommandDownload.cpp Sat May 31 17:21:53 2014 +1200 +++ b/tool/CommandDownload.cpp Sat May 31 18:08:27 2014 +1200 @@ -173,16 +173,17 @@ throwCommandException(err); } data.data_size = contents.size(); - data.data = new uint8_t[data.data_size + 1]; + uint8_t *sdo_data = new uint8_t[data.data_size + 1]; + data.data = sdo_data; try { data.data_size = interpretAsType( - dataType, contents, data.data, data.data_size); + dataType, contents, sdo_data, data.data_size); } catch (SizeException &e) { - delete [] data.data; + delete [] sdo_data; throwCommandException(e.what()); } catch (ios::failure &e) { - delete [] data.data; + delete [] sdo_data; err << "Invalid value argument '" << args[2] << "' for type '" << dataType->name << "'!"; throwInvalidUsageException(err); @@ -195,16 +196,17 @@ data.data_size = DefaultBufferSize; } - data.data = new uint8_t[data.data_size + 1]; + uint8_t *sdo_data = new uint8_t[data.data_size + 1]; + data.data = sdo_data; try { data.data_size = interpretAsType( - dataType, args[valueIndex], data.data, data.data_size); + dataType, args[valueIndex], sdo_data, data.data_size); } catch (SizeException &e) { - delete [] data.data; + delete [] sdo_data; throwCommandException(e.what()); } catch (ios::failure &e) { - delete [] data.data; + delete [] sdo_data; err << "Invalid value argument '" << args[2] << "' for type '" << dataType->name << "'!"; throwInvalidUsageException(err); @@ -212,19 +214,6 @@ } try { - data.data_size = interpretAsType( - dataType, args[valueIndex], data.data, data.data_size); - } catch (SizeException &e) { - delete [] data.data; - throwCommandException(e.what()); - } catch (ios::failure &e) { - delete [] data.data; - err << "Invalid value argument '" << args[2] - << "' for type '" << dataType->name << "'!"; - throwInvalidUsageException(err); - } - - try { m.sdoDownload(&data); } catch (MasterDeviceSdoAbortException &e) { delete [] data.data;