Changes in libcfa/src/parseargs.cfa [affb51b:1c893ae]
- File:
-
- 1 edited
-
libcfa/src/parseargs.cfa (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/parseargs.cfa
raffb51b r1c893ae 1 1 #include "parseargs.hfa" 2 2 3 #include <ctype.h>4 3 #include <stdint.h> 5 4 #include <string.h> 6 5 #include <errno.h> 7 6 #include <unistd.h> 7 #include <assert.h> 8 8 9 9 extern "C" { … … 74 74 75 75 int maxv = 'h'; 76 char optstring[(opt_count * 3) + 2] = { '\0' }; 76 assert( opt_count > 0 ); 77 char optstring[opt_count * 3] = { '\0' }; 77 78 { 78 79 int idx = 0; … … 271 272 bool parse(const char * arg, int & value) { 272 273 char * end; 273 274 errno = 0; 275 long long int r = strtoll(arg, &end, 0); 276 if(errno) return false; 274 int r = strtoll(arg, &end, 10); 277 275 if(*end != '\0') return false; 278 if(r > (int)MAX) return false;279 if(r < (int)MIN) return false;280 276 281 277 value = r; … … 283 279 } 284 280 285 static unsigned long long int strict_strtoull( const char * arg, int base) {286 errno = 0;287 {288 const char * in = arg;289 for() {290 if('\0' == *in) {291 errno = EINVAL;292 return 0;293 }294 if(!isspace(*in)) break;295 in++;296 }297 if(!isdigit(*in)) {298 errno = EINVAL;299 return 0;300 }301 }302 303 *char end;304 unsigned long long int r = strtoull(arg, &end, base);305 if(*end != '\0') errno = EINVAL;306 if(errno) return 0;307 return r;308 }309 310 281 bool parse(const char * arg, unsigned & value) { 311 unsigned long long int r = strict_strtoull(arg, 0); 312 if(errno) return false; 282 char * end; 283 unsigned long long int r = strtoull(arg, &end, 10); 284 if(*end != '\0') return false; 313 285 if(r > (unsigned)MAX) return false; 314 286 … … 318 290 319 291 bool parse(const char * arg, unsigned long & value) { 320 unsigned long long int r = strict_strtoull(arg, 0); 321 if(errno) return false; 292 char * end; 293 unsigned long long int r = strtoull(arg, &end, 10); 294 if(*end != '\0') return false; 322 295 if(r > (unsigned long)MAX) return false; 323 296 … … 327 300 328 301 bool parse(const char * arg, unsigned long long & value) { 329 unsigned long long int r = strict_strtoull(arg, 0); 330 if(errno) return false; 331 if(r > (unsigned long long)MAX) return false; 332 333 value = r; 334 return true; 302 char * end; 303 unsigned long long int r = strtoull(arg, &end, 10); 304 if(*end != '\0') return false; 305 if(r > (unsigned long long)MAX) return false; 306 307 value = r; 308 return true; 335 309 } 336 310
Note:
See TracChangeset
for help on using the changeset viewer.