Changeset 4707


Ignore:
Timestamp:
Jan 16, 2008, 4:47:58 PM (13 years ago)
Author:
charles
Message:

#623: "transmissioncli -i" crashes. reported by anders in the forums.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/cli/transmissioncli.c

    r4411 r4707  
    3232#include <libtransmission/transmission.h>
    3333#include <libtransmission/makemeta.h>
     34#include <libtransmission/metainfo.h> /* tr_metainfoFree */
    3435#include <libtransmission/utils.h> /* tr_wait */
     36
    3537
    3638/* macro to shut up "unused parameter" warnings */
     
    7577static sig_atomic_t  gotsig        = 0;
    7678static sig_atomic_t  manualUpdate  = 0;
    77 static tr_torrent    * tor;
    7879
    7980static char          * finishCall   = NULL;
     
    8586static void sigHandler       ( int signal );
    8687
    87 char * getStringRatio( float ratio )
     88static char *
     89getStringRatio( float ratio )
    8890{
    8991    static char string[20];
     
    105107}
    106108
    107 int main( int argc, char ** argv )
     109int
     110main( int argc, char ** argv )
    108111{
    109112    int i, error;
    110113    tr_handle  * h;
    111     const tr_stat    * s;
    112114    tr_handle_status * hstat;
    113115    tr_ctor * ctor;
     116    tr_torrent * tor = NULL;
    114117
    115118    printf( "Transmission %s - http://www.transmissionbt.com/\n",
     
    170173    tr_ctorSetPaused( ctor, TR_FORCE, 0 );
    171174    tr_ctorSetDestination( ctor, TR_FORCE, savePath );
     175
     176    if( showInfo )
     177    {
     178        tr_info info;
     179
     180        if( !tr_torrentParse( h, ctor, &info ) )
     181        {
     182            printf( "hash:\t" );
     183            for( i=0; i<SHA_DIGEST_LENGTH; ++i )
     184                printf( "%02x", info.hash[i] );
     185            printf( "\n" );
     186
     187            printf( "name:\t%s\n", info.name );
     188
     189            for( i=0; i<info.trackerTiers; ++i ) {
     190                int j;
     191                printf( "tracker tier #%d:\n", ( i+1 ) );
     192                for( j=0; j<info.trackerList[i].count; ++j ) {
     193                    const tr_tracker_info * tracker = &info.trackerList[i].list[j];
     194                    printf( "\taddress:\t%s:%d\n", tracker->address, tracker->port );
     195                    printf( "\tannounce:\t%s\n", tracker->announce );
     196                    printf( "\n" );
     197                }
     198            }
     199
     200            printf( "size:\t%"PRIu64" (%"PRIu64" * %d + %"PRIu64")\n",
     201                    info.totalSize, info.totalSize / info.pieceSize,
     202                    info.pieceSize, info.totalSize % info.pieceSize );
     203
     204            if( info.comment[0] )
     205                printf( "comment:\t%s\n", info.comment );
     206            if( info.creator[0] )
     207                printf( "creator:\t%s\n", info.creator );
     208            if( info.isPrivate )
     209                printf( "private flag set\n" );
     210
     211            printf( "file(s):\n" );
     212            for( i=0; i<info.fileCount; ++i )
     213                printf( "\t%s (%"PRIu64")\n", info.files[i].name, info.files[i].length );
     214
     215            tr_metainfoFree( &info );
     216        }
     217
     218        tr_ctorFree( ctor );
     219        goto cleanup;
     220    }
     221
     222
    172223    tor = tr_torrentNew( h, ctor, &error );
    173224    tr_ctorFree( ctor );
     
    179230    }
    180231
    181     if( showInfo )
    182     {
    183         const tr_info * info = tr_torrentInfo( tor );
    184 
    185         s = tr_torrentStat( tor );
    186 
    187         /* Print torrent info (quite à la btshowmetainfo) */
    188         printf( "hash:     " );
    189         for( i = 0; i < SHA_DIGEST_LENGTH; i++ )
    190         {
    191             printf( "%02x", info->hash[i] );
    192         }
    193         printf( "\n" );
    194         printf( "tracker:  %s:%d\n",
    195                 s->tracker->address, s->tracker->port );
    196         printf( "announce: %s\n", s->tracker->announce );
    197         printf( "size:     %"PRIu64" (%"PRIu64" * %d + %"PRIu64")\n",
    198                 info->totalSize, info->totalSize / info->pieceSize,
    199                 info->pieceSize, info->totalSize % info->pieceSize );
    200         if( info->comment[0] )
    201         {
    202             printf( "comment:  %s\n", info->comment );
    203         }
    204         if( info->creator[0] )
    205         {
    206             printf( "creator:  %s\n", info->creator );
    207         }
    208         if( info->isPrivate )
    209         {
    210             printf( "private flag set\n" );
    211         }
    212         printf( "file(s):\n" );
    213         for( i = 0; i < info->fileCount; i++ )
    214         {
    215             printf( " %s (%"PRIu64")\n", info->files[i].name,
    216                     info->files[i].length );
    217         }
    218 
    219         goto cleanup;
    220     }
    221    
    222232    if( showScrape )
    223233    {
     
    255265        char string[LINEWIDTH];
    256266        int  chars = 0;
     267        const tr_stat * s;
    257268
    258269        tr_wait( 1000 );
Note: See TracChangeset for help on using the changeset viewer.