130 strValue << args[1]; |
130 strValue << args[1]; |
131 strValue >> resetiosflags(ios::basefield); // guess base from prefix |
131 strValue >> resetiosflags(ios::basefield); // guess base from prefix |
132 strValue.exceptions(ios::failbit); |
132 strValue.exceptions(ios::failbit); |
133 |
133 |
134 try { |
134 try { |
135 if (dataType->name == "int8") { |
135 if (string(dataType->name) == "int8") { |
136 int16_t val; // uint8_t is interpreted as char |
136 int16_t val; // uint8_t is interpreted as char |
137 strValue >> val; |
137 strValue >> val; |
138 if (val > 127 || val < -128) |
138 if (val > 127 || val < -128) |
139 throw ios::failure("Value out of range"); |
139 throw ios::failure("Value out of range"); |
140 *data.data = (int8_t) val; |
140 *data.data = (int8_t) val; |
141 } else if (dataType->name == "int16") { |
141 } else if (string(dataType->name) == "int16") { |
142 int16_t val; |
142 int16_t val; |
143 strValue >> val; |
143 strValue >> val; |
144 *(int16_t *) data.data = cpu_to_le16(val); |
144 *(int16_t *) data.data = cpu_to_le16(val); |
145 } else if (dataType->name == "int32") { |
145 } else if (string(dataType->name) == "int32") { |
146 int32_t val; |
146 int32_t val; |
147 strValue >> val; |
147 strValue >> val; |
148 *(int32_t *) data.data = cpu_to_le32(val); |
148 *(int32_t *) data.data = cpu_to_le32(val); |
149 } else if (dataType->name == "int64") { |
149 } else if (string(dataType->name) == "int64") { |
150 int64_t val; |
150 int64_t val; |
151 strValue >> val; |
151 strValue >> val; |
152 *(int64_t *) data.data = cpu_to_le64(val); |
152 *(int64_t *) data.data = cpu_to_le64(val); |
153 } else if (dataType->name == "uint8") { |
153 } else if (string(dataType->name) == "uint8") { |
154 uint16_t val; // uint8_t is interpreted as char |
154 uint16_t val; // uint8_t is interpreted as char |
155 strValue >> val; |
155 strValue >> val; |
156 if (val > 0xff) |
156 if (val > 0xff) |
157 throw ios::failure("Value out of range"); |
157 throw ios::failure("Value out of range"); |
158 *data.data = (uint8_t) val; |
158 *data.data = (uint8_t) val; |
159 } else if (dataType->name == "uint16") { |
159 } else if (string(dataType->name) == "uint16") { |
160 uint16_t val; |
160 uint16_t val; |
161 strValue >> val; |
161 strValue >> val; |
162 *(uint16_t *) data.data = cpu_to_le16(val); |
162 *(uint16_t *) data.data = cpu_to_le16(val); |
163 } else if (dataType->name == "uint32") { |
163 } else if (string(dataType->name) == "uint32") { |
164 uint32_t val; |
164 uint32_t val; |
165 strValue >> val; |
165 strValue >> val; |
166 *(uint32_t *) data.data = cpu_to_le32(val); |
166 *(uint32_t *) data.data = cpu_to_le32(val); |
167 } else if (dataType->name == "uint64") { |
167 } else if (string(dataType->name) == "uint64") { |
168 uint64_t val; |
168 uint64_t val; |
169 strValue >> val; |
169 strValue >> val; |
170 *(uint64_t *) data.data = cpu_to_le64(val); |
170 *(uint64_t *) data.data = cpu_to_le64(val); |
171 } else if (dataType->name == "string" || |
171 } else if (string(dataType->name) == "string" || |
172 dataType->name == "octet_string") { |
172 string(dataType->name) == "octet_string") { |
173 data.length = strValue.str().size(); |
173 data.length = strValue.str().size(); |
174 if (!data.length) { |
174 if (!data.length) { |
175 err << "Zero-size string now allowed!"; |
175 err << "Zero-size string now allowed!"; |
176 throwCommandException(err); |
176 throwCommandException(err); |
177 } |
177 } |