tool/CommandDownload.cpp
changeset 2622 1aee02c1e294
parent 2411 01370d59233d
--- 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;