Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/parseargs.cfa

    raffb51b r1c893ae  
    11#include "parseargs.hfa"
    22
    3 #include <ctype.h>
    43#include <stdint.h>
    54#include <string.h>
    65#include <errno.h>
    76#include <unistd.h>
     7#include <assert.h>
    88
    99extern "C" {
     
    7474
    7575        int maxv = 'h';
    76         char optstring[(opt_count * 3) + 2] = { '\0' };
     76        assert( opt_count > 0 );
     77        char optstring[opt_count * 3] = { '\0' };
    7778        {
    7879                int idx = 0;
     
    271272bool parse(const char * arg, int & value) {
    272273        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);
    277275        if(*end != '\0') return false;
    278         if(r > (int)MAX) return false;
    279         if(r < (int)MIN) return false;
    280276
    281277        value = r;
     
    283279}
    284280
    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 
    310281bool 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;
    313285        if(r > (unsigned)MAX) return false;
    314286
     
    318290
    319291bool 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;
    322295        if(r > (unsigned long)MAX) return false;
    323296
     
    327300
    328301bool 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;
    335309}
    336310
Note: See TracChangeset for help on using the changeset viewer.