Changeset 3573


Ignore:
Timestamp:
Oct 26, 2007, 3:02:35 AM (15 years ago)
Author:
charles
Message:

Quick & dirty fix to crasher ticket #415.

Location:
branches/0.9x
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • branches/0.9x/NEWS

    r3569 r3573  
    1212- gtk:
    1313   + Fix 0.90 packaging errors
     14   + Fix 0.90 assertion failure: "destination != (void*)0"
    1415
    15160.90 (2007/10/23)
  • branches/0.9x/gtk/tr_core.c

    r3461 r3573  
    448448    path = getdownloaddir( );
    449449
    450     torrents = tr_loadTorrents ( self->handle, NULL, paused, &count );
     450    torrents = tr_loadTorrents ( self->handle, path, paused, &count );
    451451    for( i=0; i<count; ++i )
    452452        tr_core_insert( self, tr_torrent_new_preexisting( torrents[i] ) );
  • branches/0.9x/libtransmission/fastresume.c

    r3569 r3573  
    331331
    332332static int
    333 loadFallbackDestination( tr_torrent * tor, FILE * fp )
     333loadDestination( tr_torrent * tor, FILE * fp, const char * destination, int argIsFallback )
    334334{
    335335    int pathlen = 0;
    336336    char path[MAX_PATH_LENGTH];
    337     const int haveDestination = tor->destination && *tor->destination;
    338337
    339338    for( ;; ) {
     
    348347    path[pathlen] = '\0';
    349348
    350     if( pathlen && !haveDestination ) {
    351         tr_free( tor->destination );
    352         tor->destination = tr_strdup( path );
    353     }
     349    if( argIsFallback )
     350        tor->destination = tr_strdup( pathlen ? path : destination );
     351    else
     352        tor->destination = tr_strdup( destination && *destination ? destination : path );
    354353
    355354    return TR_OK;
     
    526525static uint64_t
    527526fastResumeLoadImpl ( tr_torrent   * tor,
    528                      tr_bitfield  * uncheckedPieces )
     527                     tr_bitfield  * uncheckedPieces,
     528                     const char   * destination,
     529                     int            argIsFallback )
    529530{
    530531    char      path[MAX_PATH_LENGTH];
     
    630631            case FR_ID_DESTINATION:
    631632                {
    632                     const int rret = loadFallbackDestination( tor, file );
     633                    const int rret = loadDestination( tor, file, destination, argIsFallback );
    633634
    634635                    if( rret && ( feof(file) || ferror(file) ) )
     
    773774uint64_t
    774775tr_fastResumeLoad( tr_torrent   * tor,
    775                    tr_bitfield  * uncheckedPieces )
    776 {
    777     const uint64_t ret = fastResumeLoadImpl( tor, uncheckedPieces );
     776                   tr_bitfield  * uncheckedPieces,
     777                   const char   * destination,
     778                   int            argIsFallback )
     779{
     780    const uint64_t ret = fastResumeLoadImpl( tor, uncheckedPieces, destination, argIsFallback );
    778781
    779782    if( ! ( ret & TR_FR_PROGRESS ) )
    780783        tr_bitfieldAddRange( uncheckedPieces, 0, tor->info.pieceCount );
    781784
     785    if( !tor->destination )
     786        tor->destination = tr_strdup( destination );
     787
    782788    return ret;
    783789}
  • branches/0.9x/libtransmission/fastresume.h

    r3418 r3573  
    4646 */
    4747uint64_t tr_fastResumeLoad( tr_torrent          * tor,
    48                             struct tr_bitfield  * uncheckedPieces );
     48                            struct tr_bitfield  * uncheckedPieces,
     49                            const char          * destination,
     50                            int                   destinationIsFallback );
    4951
    5052#endif
  • branches/0.9x/libtransmission/torrent.c

    r3492 r3573  
    258258                 tr_torrent * tor,
    259259                 const char * destination,
     260                 int          destinationIsFallback,
    260261                 int          isPaused )
    261262{
     
    267268   
    268269    tr_globalLock( h );
    269 
    270     tor->destination = tr_strdup( destination );
    271270
    272271    tor->handle   = h;
     
    340339    uncheckedPieces = tr_bitfieldNew( tor->info.pieceCount );
    341340
    342     loaded = tr_fastResumeLoad( tor, uncheckedPieces );
     341    loaded = tr_fastResumeLoad( tor, uncheckedPieces, destination, destinationIsFallback );
    343342    assert( tor->destination != NULL );
    344343
     
    450449}
    451450 
     451static tr_torrent *
     452tr_torrentInitImpl( tr_handle   * h,
     453                    const char  * path,
     454                    const char  * destination,
     455                    int           destinationIsFallback,
     456                    int           isPaused,
     457                    int         * error )
     458{
     459    int val;
     460    int tmpError;
     461    tr_torrent * tor = NULL;
     462
     463    if( !error )
     464         error = &tmpError;
     465
     466    if(( val = tr_torrentParse( h, path, destination, NULL )))
     467        *error = val;
     468    else if(!(( tor = tr_new0( tr_torrent, 1 ))))
     469        *error = TR_EOTHER;
     470    else {
     471        tr_metainfoParseFile( &tor->info, h->tag, path, TRUE );
     472        torrentRealInit( h, tor, destination, destinationIsFallback, isPaused );
     473    }
     474
     475    return tor;
     476}
     477
    452478tr_torrent *
    453479tr_torrentInit( tr_handle   * h,
     
    457483                int         * error )
    458484{
    459     int val;
    460     int tmpError;
    461     tr_torrent * tor = NULL;
    462 
    463     if( !error )
    464          error = &tmpError;
    465 
    466     if(( val = tr_torrentParse( h, path, destination, NULL )))
    467         *error = val;
    468     else if(!(( tor = tr_new0( tr_torrent, 1 ))))
    469         *error = TR_EOTHER;
    470     else {
    471         tr_metainfoParseFile( &tor->info, h->tag, path, TRUE );
    472         torrentRealInit( h, tor, destination, isPaused );
    473     }
    474 
    475     return tor;
     485    return tr_torrentInitImpl( h, path, destination, FALSE, isPaused, error );
     486}
     487
     488tr_torrent *
     489tr_torrentLoad( tr_handle    * h,
     490                const char   * metainfoFilename,
     491                const char   * destination,
     492                int            isPaused,
     493                int          * error )
     494{
     495    return tr_torrentInitImpl( h, metainfoFilename, destination, TRUE, isPaused, error );
    476496}
    477497
     
    521541    else {
    522542        tr_metainfoParseHash( &tor->info, h->tag, hashStr );
    523         torrentRealInit( h, tor, destination, isPaused );
     543        torrentRealInit( h, tor, destination, FALSE, isPaused );
    524544    }
    525545
     
    574594    else {
    575595        tr_metainfoParseData( &tor->info, h->tag, data, size, TRUE );
    576         torrentRealInit( h, tor, destination, isPaused );
     596        torrentRealInit( h, tor, destination, FALSE, isPaused );
    577597    }
    578598
     
    13041324    return ret;
    13051325}
    1306 
  • branches/0.9x/libtransmission/transmission.c

    r3492 r3573  
    328328tr_torrent **
    329329tr_loadTorrents ( tr_handle   * h,
    330                   const char  * destination,
     330                  const char  * fallbackDestination,
    331331                  int           isPaused,
    332332                  int         * setmeCount )
     
    351351                char path[MAX_PATH_LENGTH];
    352352                tr_buildPath( path, sizeof(path), torrentDir, d->d_name, NULL );
    353                 tor = tr_torrentInit( h, path, destination, isPaused, NULL );
     353                tor = tr_torrentLoad( h, path, fallbackDestination, isPaused, NULL );
    354354                if( tor != NULL ) {
    355355                    tr_list_append( &list, tor );
  • branches/0.9x/libtransmission/transmission.h

    r3534 r3573  
    308308 */
    309309tr_torrent ** tr_loadTorrents ( tr_handle  * h,
    310                                 const char   * destination,
     310                                const char   * fallback_destination,
    311311                                int            isPaused,
    312312                                int          * setmeCount );
     
    330330                             const char   * metainfo_filename,
    331331                             const char   * destination,
     332                             int            isPaused,
     333                             int          * setme_error );
     334
     335/* This is a stupid hack to fix #415.  Probably I should fold all
     336 * these torrent constructors into a single function that takes
     337 * a function object to hold all these esoteric arguments. */
     338tr_torrent * tr_torrentLoad( tr_handle    * handle,
     339                             const char   * metainfo_filename,
     340                             const char   * fallback_destination,
    332341                             int            isPaused,
    333342                             int          * setme_error );
Note: See TracChangeset for help on using the changeset viewer.