Changeset 8184


Ignore:
Timestamp:
Apr 9, 2009, 12:26:54 AM (13 years ago)
Author:
charles
Message:

more benc code simplification

File:
1 edited

Legend:

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

    r8180 r8184  
    384384}
    385385
    386 static tr_benc*
    387 tr_bencDictFindType( tr_benc *    val,
    388                      const char * key,
    389                      int          type )
    390 {
    391     tr_benc * ret = tr_bencDictFind( val, key );
    392 
    393     return ( ret && ( ret->type == type ) ) ? ret : NULL;
     386static tr_bool
     387tr_bencDictFindType( tr_benc * dict, const char * key, int type, tr_benc ** setme )
     388{
     389    return tr_bencIsType( *setme = tr_bencDictFind( dict, key ), type );
    394390}
    395391
     
    437433tr_bencDictFindInt( tr_benc * dict, const char * key, int64_t * setme )
    438434{
    439     tr_bool found = FALSE;
    440     tr_benc * child = tr_bencDictFindType( dict, key, TYPE_INT );
    441 
    442     if( child )
    443         found = tr_bencGetInt( child, setme );
    444 
    445     return found;
     435    return tr_bencGetInt( tr_bencDictFind( dict, key ), setme );
    446436}
    447437
     
    461451tr_bencDictFindList( tr_benc * dict, const char * key, tr_benc ** setme )
    462452{
    463     tr_bool found = FALSE;
    464     tr_benc * child = tr_bencDictFindType( dict, key, TYPE_LIST );
    465 
    466     if( child )
    467     {
    468         if( setme != NULL )
    469             *setme = child;
    470         found = TRUE;
    471     }
    472 
    473     return found;
     453    return tr_bencDictFindType( dict, key, TYPE_LIST, setme );
    474454}
    475455
     
    477457tr_bencDictFindDict( tr_benc * dict, const char * key, tr_benc ** setme )
    478458{
    479     tr_bool found = FALSE;
    480     tr_benc * child = tr_bencDictFindType( dict, key, TYPE_DICT );
    481 
    482     if( child )
    483     {
    484         if( setme != NULL )
    485             *setme = child;
    486         found = TRUE;
    487     }
    488 
    489     return found;
     459    return tr_bencDictFindType( dict, key, TYPE_DICT, setme );
    490460}
    491461
     
    493463tr_bencDictFindStr( tr_benc *  dict, const char *  key, const char ** setme )
    494464{
    495     tr_bool found = FALSE;
    496     tr_benc * child = tr_bencDictFindType( dict, key, TYPE_STR );
    497 
    498     if( child )
    499     {
    500         if( setme )
    501             *setme = child->val.s.s;
    502         found = TRUE;
    503     }
    504 
    505     return found;
     465    return tr_bencGetStr( tr_bencDictFind( dict, key ), setme );
    506466}
    507467
     
    512472                    size_t          * setme_len )
    513473{
    514     tr_bool found = FALSE;
    515     tr_benc * child = tr_bencDictFindType( dict, key, TYPE_STR );
    516 
    517     if( child )
    518     {
     474    tr_benc * child;
     475    const tr_bool found = tr_bencDictFindType( dict, key, TYPE_STR, &child );
     476
     477    if( found ) {
    519478        *setme_raw = (uint8_t*) child->val.s.s;
    520479        *setme_len = child->val.s.i;
    521         found = TRUE;
    522480    }
    523481
     
    12041162        switch( *it )
    12051163        {
    1206             case '/':
    1207             case '\b':
    1208             case '\f':
    1209             case '\n':
    1210             case '\r':
    1211             case '\t':
    1212             case '"':
    1213             case '\\': {
    1214                 char buf[2] = { '\\', *it };
    1215                 evbuffer_add( data->out, buf, 2 );
    1216                 break;
    1217             }
     1164            case '/': evbuffer_add( data->out, "\\/", 2 ); break;
     1165            case '\b': evbuffer_add( data->out, "\\b", 2 ); break;
     1166            case '\f': evbuffer_add( data->out, "\\f", 2 ); break;
     1167            case '\n': evbuffer_add( data->out, "\\n", 2 ); break;
     1168            case '\r': evbuffer_add( data->out, "\\r", 2 ); break;
     1169            case '\t': evbuffer_add( data->out, "\\t", 2 ); break;
     1170            case '"': evbuffer_add( data->out, "\\\"", 2 ); break;
     1171            case '\\': evbuffer_add( data->out, "\\\\", 2 ); break;
    12181172
    12191173            default:
    12201174                if( isascii( *it ) )
    1221                 {
    1222                     /*fprintf( stderr, "[%c]\n", *it );*/
    12231175                    evbuffer_add( data->out, it, 1 );
    1224                 }
    1225                 else
    1226                 {
     1176                else {
    12271177                    const UTF8 * tmp = it;
    12281178                    UTF32        buf = 0;
     
    12351185                        it = tmp - 1;
    12361186                    }
    1237                     /*fprintf( stderr, "[\\u%04x]\n", buf );*/
    12381187                }
    12391188        }
Note: See TracChangeset for help on using the changeset viewer.