Ignore:
Timestamp:
Oct 21, 2009, 7:33:37 PM (12 years ago)
Author:
charles
Message:

libT doesn't need to create the Incomplete directory until it's needed

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/libtransmission/fdlimit.c

    r9339 r9346  
    279279static int
    280280TrOpenFile( int                      i,
    281             const char             * folder,
    282             const char             * torrentFile,
     281            const char             * filename,
    283282            tr_bool                  doWrite,
    284283            tr_preallocation_mode    preallocationMode,
     
    287286    struct tr_openfile * file = &gFd->openFiles[i];
    288287    int                  flags;
    289     char               * filename;
    290288    struct stat          sb;
    291289    tr_bool              alreadyExisted;
    292290
    293     /* confirm the parent folder exists */
    294     if( stat( folder, &sb ) || !S_ISDIR( sb.st_mode ) )
    295     {
    296         tr_err( _( "Couldn't create \"%1$s\": \"%2$s\" is not a folder" ), torrentFile, folder );
    297         return ENOENT;
    298     }
    299 
    300291    /* create subfolders, if any */
    301     filename = tr_buildPath( folder, torrentFile, NULL );
    302292    if( doWrite )
    303293    {
    304         char * tmp = tr_dirname( filename );
    305         const int err = tr_mkdirp( tmp, 0777 ) ? errno : 0;
     294        char * dir = tr_dirname( filename );
     295        const int err = tr_mkdirp( dir, 0777 ) ? errno : 0;
    306296        if( err ) {
    307             tr_err( _( "Couldn't create \"%1$s\": %2$s" ), tmp, tr_strerror( err ) );
    308             tr_free( tmp );
    309             tr_free( filename );
     297            tr_err( _( "Couldn't create \"%1$s\": %2$s" ), dir, tr_strerror( err ) );
     298            tr_free( dir );
    310299            return err;
    311300        }
    312         tr_free( tmp );
     301        tr_free( dir );
    313302    }
    314303
     
    335324        const int err = errno;
    336325        tr_err( _( "Couldn't open \"%1$s\": %2$s" ), filename, tr_strerror( err ) );
    337         tr_free( filename );
    338326        return err;
    339327    }
     
    363351#endif
    364352
    365     tr_free( filename );
    366353    return 0;
    367354}
     
    426413tr_fdFileCheckout( int                      torrentId,
    427414                   tr_file_index_t          fileNum,
    428                    const char             * folder,
    429                    const char             * torrentFile,
     415                   const char             * filename,
    430416                   tr_bool                  doWrite,
    431417                   tr_preallocation_mode    preallocationMode,
     
    434420    int i, winner = -1;
    435421    struct tr_openfile * o;
    436     char filename[MAX_PATH_LENGTH];
    437422
    438423    assert( torrentId > 0 );
    439     assert( folder && *folder );
    440     assert( torrentFile && *torrentFile );
     424    assert( filename && *filename );
    441425    assert( tr_isBool( doWrite ) );
    442426
    443     tr_snprintf( filename, sizeof( filename ), "%s%c%s", folder, TR_PATH_DELIMITER, torrentFile );
    444427    dbgmsg( "looking for file '%s', writable %c", filename, doWrite ? 'y' : 'n' );
    445428
     
    505488    if( !fileIsOpen( o ) )
    506489    {
    507         const int err = TrOpenFile( winner, folder, torrentFile, doWrite,
     490        const int err = TrOpenFile( winner, filename, doWrite,
    508491                                    preallocationMode, desiredFileSize );
    509492        if( err ) {
Note: See TracChangeset for help on using the changeset viewer.