Ignore:
Timestamp:
Oct 19, 2009, 5:05:00 AM (12 years ago)
Author:
charles
Message:

(trunk) #1483: move completed torrents to a user-specified directory + #629: different file extension for incomplete files

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/libtransmission/fdlimit.c

    r9066 r9328  
    8484struct tr_openfile
    8585{
    86     tr_bool    isWritable;
    87     int        torrentId;
    88     char       filename[MAX_PATH_LENGTH];
    89     int        fd;
    90     uint64_t   date;
     86    tr_bool          isWritable;
     87    int              torrentId;
     88    tr_file_index_t  fileNum;
     89    char             filename[MAX_PATH_LENGTH];
     90    int              fd;
     91    uint64_t         date;
    9192};
    9293
     
    382383}
    383384
     385int
     386tr_fdFileGetCached( int              torrentId,
     387                    tr_file_index_t  fileNum,
     388                    tr_bool          doWrite )
     389{
     390    int i;
     391    struct tr_openfile * o;
     392
     393    assert( torrentId > 0 );
     394    assert( tr_isBool( doWrite ) );
     395
     396    /* is it already open? */
     397    for( i=0; i<gFd->openFileLimit; ++i )
     398    {
     399        o = &gFd->openFiles[i];
     400
     401        if( !fileIsOpen( o ) )
     402            continue;
     403        if( torrentId != o->torrentId )
     404            continue;
     405        if( fileNum != o->fileNum )
     406            continue;
     407
     408        break;
     409    }
     410
     411    if( ( o != NULL ) && ( !doWrite || o->isWritable ) )
     412    {
     413        o->date = tr_date( );
     414        return o->fd;
     415    }
     416
     417    return -1;
     418}
     419
    384420/* returns an fd on success, or a -1 on failure and sets errno */
    385421int
    386422tr_fdFileCheckout( int                      torrentId,
     423                   tr_file_index_t          fileNum,
    387424                   const char             * folder,
    388425                   const char             * torrentFile,
     
    412449        if( torrentId != o->torrentId )
    413450            continue;
    414         if( strcmp( filename, o->filename ) )
     451        if( fileNum != o->fileNum )
    415452            continue;
    416453
     
    479516    dbgmsg( "checking out '%s' in slot %d", filename, winner );
    480517    o->torrentId = torrentId;
     518    o->fileNum = fileNum;
    481519    o->date = tr_date( );
    482520    return o->fd;
     
    484522
    485523void
    486 tr_fdFileClose( const char * filename )
     524tr_fdFileClose( const tr_torrent * tor, tr_file_index_t fileNum )
    487525{
    488526    struct tr_openfile * o;
    489527    const struct tr_openfile * end;
    490 
     528    const int torrentId = tr_torrentId( tor );
    491529    for( o=gFd->openFiles, end=o+gFd->openFileLimit; o!=end; ++o )
    492530    {
    493         if( !fileIsOpen( o ) || strcmp( filename, o->filename ) )
    494             continue;
    495         dbgmsg( "tr_fdFileClose closing \"%s\"", filename );
     531        if( !fileIsOpen( o ) )
     532            continue;
     533        if( torrentId != o->torrentId )
     534            continue;
     535        if( fileNum != o->fileNum )
     536            continue;
     537
     538        dbgmsg( "tr_fdFileClose closing \"%s\"", o->filename );
    496539        TrCloseFile( o );
    497540    }
Note: See TracChangeset for help on using the changeset viewer.