Ignore:
Timestamp:
Feb 9, 2009, 5:34:43 PM (13 years ago)
Author:
charles
Message:

(1.5x libT) backport #1671, #1798

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/1.5x/libtransmission/rpcimpl.c

    r7813 r7855  
    983983        tr_bencFree( &response );
    984984    }
    985 
    986     if( methods[i].immediate )
     985    else if( methods[i].immediate )
    987986    {
    988987        int64_t tag;
     
    10421041}
    10431042
    1044 static void
    1045 addToken( tr_benc *    list,
    1046           const char * token,
    1047           size_t       len )
    1048 {
    1049     char *       p;
    1050     const char * end = token + len;
    1051     const long   a = strtol( token, &p, 10 );
    1052 
    1053     if( p == end )
    1054         tr_bencListAddInt( list, a );
    1055     else if( *p == '-' && isdigit( p[1] ) )
    1056     {
    1057         const long b = strtol( p + 1, &p, 10 );
    1058         if( ( p == end ) && ( b > a ) )
    1059         {
    1060             long i;
    1061             for( i = a; i <= b; ++i )
    1062                 tr_bencListAddInt( list, i );
    1063         }
    1064     }
    1065 }
    1066 
    10671043/**
    10681044 * Munge the URI into a usable form.
     
    10761052void
    10771053tr_rpc_parse_list_str( tr_benc     * setme,
    1078                        const char  * str_in,
     1054                       const char  * str,
    10791055                       int           len )
    10801056
    10811057{
    1082     char *       str = tr_strndup( str_in, len );
    1083     int          isNum;
    1084     int          isNumList;
    1085     int          commaCount;
    1086     const char * walk;
    1087 
    1088     isNum = 1;
    1089     isNumList = 1;
    1090     commaCount = 0;
    1091     walk = str;
    1092     for( ; *walk && ( isNumList || isNum ); ++walk )
    1093     {
    1094         if( isNumList ) isNumList = *walk == '-' || isdigit( *walk )
    1095                                     || *walk == ',';
    1096         if( isNum     ) isNum     = *walk == '-' || isdigit( *walk );
    1097         if( *walk == ',' ) ++commaCount;
    1098     }
    1099 
    1100     if( isNum )
    1101         tr_bencInitInt( setme, strtol( str, NULL, 10 ) );
    1102     else if( !isNumList )
     1058    int valueCount;
     1059    int * values = tr_parseNumberRange( str, len, &valueCount );
     1060
     1061    if( valueCount == 0 )
    11031062        tr_bencInitStr( setme, str, len );
    1104     else
    1105     {
    1106         tr_bencInitList( setme, commaCount + 1 );
    1107         walk = str;
    1108         while( *walk )
    1109         {
    1110             const char * p = strchr( walk, ',' );
    1111             if( !p )
    1112                 p = walk + strlen( walk );
    1113             addToken( setme, walk, p - walk );
    1114             if( *p != ',' )
    1115                 break;
    1116             walk = p + 1;
    1117         }
    1118     }
    1119 
    1120     tr_free( str );
     1063    else if( valueCount == 1 )
     1064        tr_bencInitInt( setme, values[0] );
     1065    else {
     1066        int i;
     1067        tr_bencInitList( setme, valueCount );
     1068        for( i=0; i<valueCount; ++i )
     1069            tr_bencListAddInt( setme, values[i] );
     1070    }
     1071
     1072    tr_free( values );
    11211073}
    11221074
Note: See TracChangeset for help on using the changeset viewer.