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

(trunk libT) #1671: transmission-remote --get option not including all files

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/libtransmission/rpcimpl.c

    r7853 r7854  
    10411041}
    10421042
    1043 static void
    1044 addToken( tr_benc *    list,
    1045           const char * token,
    1046           size_t       len )
    1047 {
    1048     char *       p;
    1049     const char * end = token + len;
    1050     const long   a = strtol( token, &p, 10 );
    1051 
    1052     if( p == end )
    1053         tr_bencListAddInt( list, a );
    1054     else if( *p == '-' && isdigit( p[1] ) )
    1055     {
    1056         const long b = strtol( p + 1, &p, 10 );
    1057         if( ( p == end ) && ( b > a ) )
    1058         {
    1059             long i;
    1060             for( i = a; i <= b; ++i )
    1061                 tr_bencListAddInt( list, i );
    1062         }
    1063     }
    1064 }
    1065 
    10661043/**
    10671044 * Munge the URI into a usable form.
     
    10751052void
    10761053tr_rpc_parse_list_str( tr_benc     * setme,
    1077                        const char  * str_in,
     1054                       const char  * str,
    10781055                       int           len )
    10791056
    10801057{
    1081     char *       str = tr_strndup( str_in, len );
    1082     int          isNum;
    1083     int          isNumList;
    1084     int          commaCount;
    1085     const char * walk;
    1086 
    1087     isNum = 1;
    1088     isNumList = 1;
    1089     commaCount = 0;
    1090     walk = str;
    1091     for( ; *walk && ( isNumList || isNum ); ++walk )
    1092     {
    1093         if( isNumList ) isNumList = *walk == '-' || isdigit( *walk )
    1094                                     || *walk == ',';
    1095         if( isNum     ) isNum     = *walk == '-' || isdigit( *walk );
    1096         if( *walk == ',' ) ++commaCount;
    1097     }
    1098 
    1099     if( isNum )
    1100         tr_bencInitInt( setme, strtol( str, NULL, 10 ) );
    1101     else if( !isNumList )
     1058    int valueCount;
     1059    int * values = tr_parseNumberRange( str, len, &valueCount );
     1060
     1061    if( valueCount == 0 )
    11021062        tr_bencInitStr( setme, str, len );
    1103     else
    1104     {
    1105         tr_bencInitList( setme, commaCount + 1 );
    1106         walk = str;
    1107         while( *walk )
    1108         {
    1109             const char * p = strchr( walk, ',' );
    1110             if( !p )
    1111                 p = walk + strlen( walk );
    1112             addToken( setme, walk, p - walk );
    1113             if( *p != ',' )
    1114                 break;
    1115             walk = p + 1;
    1116         }
    1117     }
    1118 
    1119     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 );
    11201073}
    11211074
Note: See TracChangeset for help on using the changeset viewer.