@cryptotaxi247 / kubo / commits / a9bd17241

commands: Fixed handling of int/uint option values

Matt Bell committed Nov 10, 2014 at 22:41 UTC a9bd172414c8553ba59b394b52aa25945a05fbc1
1 file changed +12 -11
commands/request.go
+12 -11
@@ -129,10 +129,18 @@ var converters = map[reflect.Kind]converter{
129 return strconv.ParseBool(v)
130 },
131 Int: func(v string) (interface{}, error) {
132 - return strconv.ParseInt(v, 0, 32)
132 + val, err := strconv.ParseInt(v, 0, 32)
133 + if err != nil {
134 + return nil, err
135 + }
136 + return int(val), err
137 },
138 Uint: func(v string) (interface{}, error) {
135 - return strconv.ParseInt(v, 0, 32)
139 + val, err := strconv.ParseUint(v, 0, 32)
140 + if err != nil {
141 + return nil, err
142 + }
143 + return int(val), err
144 },
145 Float: func(v string) (interface{}, error) {
146 return strconv.ParseFloat(v, 64)
@@ -140,8 +148,6 @@ var converters = map[reflect.Kind]converter{
148 }
149
150 func (r *request) ConvertOptions() error {
143 - converted := make(map[string]interface{})
144 -
151 for k, v := range r.options {
152 opt, ok := r.optionDefs[k]
153 if !ok {
@@ -149,8 +155,6 @@ func (r *request) ConvertOptions() error {
155 }
156
157 kind := reflect.TypeOf(v).Kind()
152 - var value interface{}
153 -
158 if kind != opt.Type {
159 if kind == String {
160 convert := converters[opt.Type]
@@ -163,14 +167,14 @@ func (r *request) ConvertOptions() error {
167 return fmt.Errorf("Could not convert string value '%s' to type '%s'",
168 v, opt.Type.String())
169 }
166 - value = val
170 + r.options[k] = val
171
172 } else {
173 return fmt.Errorf("Option '%s' should be type '%s', but got type '%s'",
174 k, opt.Type.String(), kind.String())
175 }
176 } else {
173 - value = v
177 + r.options[k] = v
178 }
179
180 for _, name := range opt.Names {
@@ -178,12 +182,9 @@ func (r *request) ConvertOptions() error {
182 return fmt.Errorf("Duplicate command options were provided ('%s' and '%s')",
183 k, name)
184 }
181 -
182 - converted[name] = value
185 }
186 }
187
186 - r.options = converted
188 return nil
189 }
190