Rev

Rev 2230 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | Bug Tracker

Rev 2230 Rev 2398
Line 2... Line 2...
2
######################################################################
2
######################################################################
3
##
3
##
4
##  Created by: Denis Filatov
4
##  Created by: Denis Filatov
5
##  Date      : 10.11.2005
5
##  Date      : 10.11.2005
6
##
6
##
7
##  Copyleft (c) 2003 - 2006
7
##  Copyleft (c) 2003 - 2015
8
##  This code is provided under the CeCill-C license agreement.
8
##  This code is provided under the CeCill-C license agreement.
9
######################################################################
9
######################################################################
10
*********************************************************************/
10
*********************************************************************/
11
#ifdef _MSC_VER
11
#ifdef _MSC_VER
12
#define _CRT_SECURE_NO_WARNINGS
12
#define _CRT_SECURE_NO_WARNINGS
Line 354... Line 354...
354
            if(  val[0] == '0'
354
            if(  val[0] == '0'
355
               ||0==strcasecmp(val, "false")
355
               ||0==strcasecmp(val, "false")
356
               ||0==strcasecmp(val, "no")
356
               ||0==strcasecmp(val, "no")
357
              ){
357
              ){
358
                value.v_boolean = !value.v_boolean;
358
                value.v_boolean = !value.v_boolean;
359
            }else if( !isdigit(val[0])
359
            }else if( !isdigit((int)(val[0]))
360
                     && strcasecmp(val, "true")
360
                     && strcasecmp(val, "true")
361
                     && strcasecmp(val, "yes")
361
                     && strcasecmp(val, "yes")
362
                    ){
362
                    ){
363
                return -1;
363
                return -1;
364
            }
364
            }
Line 417... Line 417...
417
        }
417
        }
418
        break;
418
        break;
419
    case COPT_STRLIST:
419
    case COPT_STRLIST:
420
        if(!opt->vptr || (opt->type & COPT_CALLBACK)) return -1;
420
        if(!opt->vptr || (opt->type & COPT_CALLBACK)) return -1;
421
    case COPT_CFGFILE:
421
    case COPT_CFGFILE:
-
 
422
    case COPT_PATH:
422
    case COPT_STR:
423
    case COPT_STR:
423
        value.v_str = val;
424
        value.v_str = val;
424
        break;
425
        break;
425
    case COPT_HOST:
426
    case COPT_HOST:
426
        if(0 > copt_addr_assign(&value.v_ulong, val)){
427
        if(0 > copt_addr_assign(&value.v_ulong, val)){
Line 447... Line 448...
447
        break;
448
        break;
448
    case COPT_LONG:
449
    case COPT_LONG:
449
    case COPT_ULONG:
450
    case COPT_ULONG:
450
    case COPT_CFGFILE:
451
    case COPT_CFGFILE:
451
    case COPT_STR:
452
    case COPT_STR:
-
 
453
    case COPT_PATH:
452
    case COPT_HOST:
454
    case COPT_HOST:
453
        if(opt->vptr){
455
        if(opt->vptr){
454
            *(long*)opt->vptr = value.v_long;
456
            *(void**)opt->vptr = value.v_str;
455
        }else{
457
        }else{
456
            opt->vptr = (void*)value.v_long;
458
            opt->vptr = (void*)value.v_str;
457
        }
459
        }
458
        break;
460
        break;
459
    case COPT_STRLIST:
461
    case COPT_STRLIST:
460
        {
462
        {
461
            char ** p = opt->vptr;
463
            char ** p = opt->vptr;
Line 689... Line 691...
689
        copt_t * o;
691
        copt_t * o;
690
        unsigned short t;
692
        unsigned short t;
691
693
692
        err = 1;
694
        err = 1;
693
        line ++;
695
        line ++;
694
        while(*key && isspace(*key)) key++;
696
        while(*key && isspace((int)(*key))) key++;
695
        if(0 == *key)continue;
697
        if(0 == *key)continue;
696
        /* search for section */
698
        /* search for section */
697
        if(*key == '['){
699
        if(*key == '['){
698
            if(section){
700
            if(section){
699
                if(in_sect){
701
                if(in_sect){
700
                    /* section loading finished */
702
                    /* section loading finished */
701
                    in_sect =0;
703
                    in_sect =0;
702
                    break;
704
                    break;
703
                }
705
                }
704
                key++;
706
                key++;
705
                while(*key && isspace(*key)) key++;
707
                while(*key && isspace((int)(*key))) key++;
706
                e = strchr(key, ']');
708
                e = strchr(key, ']');
707
                if(e == NULL)           goto error;
709
                if(e == NULL)           goto error;
708
                *e = 0;
710
                *e = 0;
709
                if(0==strcmp(section, key)){
711
                if(0==strcmp(section, key)){
710
                    in_sect = 1;
712
                    in_sect = 1;
Line 717... Line 719...
717
        if(*key == '#' || *key == ';')  continue;
719
        if(*key == '#' || *key == ';')  continue;
718
720
719
        e = strchr(key, '=');
721
        e = strchr(key, '=');
720
        if(NULL == e)                   goto error;
722
        if(NULL == e)                   goto error;
721
        val = e+1;
723
        val = e+1;
722
        while(e>key && isspace(*(e-1)))e--;
724
        while(e>key && isspace((int)(*(e-1))))e--;
723
        if(e == key)                    goto error;
725
        if(e == key)                    goto error;
724
        *e = 0;
726
        *e = 0;
725
727
726
        while(*val && isspace(*val)) val ++;
728
        while(*val && isspace((int)(*val))) val ++;
727
729
728
        for(o=opts; o->type != COPT_END; o++){
730
        for(o=opts; o->type != COPT_END; o++){
729
            if(o->lopt && 0==strcmp(o->lopt, key))
731
            if(o->lopt && 0==strcmp(o->lopt, key))
730
                break;
732
                break;
731
        }
733
        }
Line 734... Line 736...
734
            goto error;
736
            goto error;
735
        }
737
        }
736
        t = o->type & COPT_TYPE_MASK;
738
        t = o->type & COPT_TYPE_MASK;
737
739
738
        e = val + strlen(val);
740
        e = val + strlen(val);
739
        while(e>val && isspace(*(e-1))) *(--e) = 0;
741
        while(e>val && isspace((int)(*(e-1)))) *(--e) = 0;
740
742
741
        if(   t == COPT_STR
743
        if(   t == COPT_STR
742
           || t == COPT_STRLIST
744
           || t == COPT_STRLIST
743
          ){
745
          ){
744
                        if(0==strcmp("NULL", val) || 0==strcmp("null", val)) val = NULL;
746
                        if(0==strcmp("NULL", val) || 0==strcmp("null", val)) val = NULL;