Changeset 12076


Ignore:
Timestamp:
Mar 3, 2011, 7:59:12 PM (10 years ago)
Author:
jordan
Message:

(trunk libT) add an "existing dir" argument to tr_fdFileCheckout().

existing_dir: An ancestor of filename which must already exist and won't be created by tr_fdFileCheckout(). In implementation this is the download directory and prevents directories from being created in error, such as a mount point for an external drive when the drive is unplugged.

Location:
trunk/libtransmission
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/libtransmission/fdlimit.c

    r11881 r12076  
    351351static int
    352352cached_file_open( struct tr_cached_file  * o,
     353                  const char             * existing_dir,
    353354                  const char             * filename,
    354355                  tr_bool                  writable,
     
    359360    struct stat sb;
    360361    tr_bool alreadyExisted;
     362
     363    /* confirm that existing_dir, if specified, exists on the disk */
     364    if( existing_dir && *existing_dir && stat( existing_dir, &sb ) )
     365    {
     366        const int err = errno;
     367        tr_err( _( "Couldn't open \"%1$s\": %2$s" ), existing_dir, tr_strerror( err ) );
     368        return err;
     369    }
    361370
    362371    /* create subfolders, if any */
     
    566575                   int                      torrent_id,
    567576                   tr_file_index_t          i,
     577                   const char             * existing_dir,
    568578                   const char             * filename,
    569579                   tr_bool                  writable,
     
    581591    if( !cached_file_is_open( o ) )
    582592    {
    583         const int err = cached_file_open( o, filename, writable, allocation, file_size );
     593        const int err = cached_file_open( o, existing_dir, filename, writable, allocation, file_size );
    584594        if( err ) {
    585595            errno = err;
  • trunk/libtransmission/fdlimit.h

    r11817 r12076  
    5555 * piece data.
    5656 *
    57  * - if doWrite is true, subfolders in torrentFile are created if necessary.
    58  * - if doWrite is true, the target file is created if necessary.
     57 * - if do_write is true, subfolders in torrentFile are created if necessary.
     58 * - if do_write is true, the target file is created if necessary.
     59 *
     60 * @param existing_dir An ancestor of filename which must already exist and
     61 *                     won't be created by tr_fdFileCheckout(). This prevents
     62 *                     directories from being created in error, such as a mount
     63 *                     point for an external drive when the drive is unplugged.
    5964 *
    6065 * on success, a file descriptor >= 0 is returned.
     
    6469 */
    6570int  tr_fdFileCheckout( tr_session             * session,
    66                         int                      torrentId,
    67                         tr_file_index_t          fileNum,
    68                         const char             * fileName,
    69                         tr_bool                  doWrite,
    70                         tr_preallocation_mode    preallocationMode,
    71                         uint64_t                 desiredFileSize );
     71                        int                      torrent_id,
     72                        tr_file_index_t          file_num,
     73                        const char             * existing_dir,
     74                        const char             * filename,
     75                        tr_bool                  do_write,
     76                        tr_preallocation_mode    preallocation_mode,
     77                        uint64_t                 preallocation_file_size );
    7278
    7379int tr_fdFileGetCached( tr_session             * session,
    74                         int                      torrentId,
    75                         tr_file_index_t          fileNum,
     80                        int                      torrent_id,
     81                        tr_file_index_t          file_num,
    7682                        tr_bool                  doWrite );
    7783
     
    8692void tr_fdFileClose( tr_session        * session,
    8793                     const tr_torrent  * tor,
    88                      tr_file_index_t     fileNo );
     94                     tr_file_index_t     file_num );
    8995
    9096
  • trunk/libtransmission/inout.c

    r11811 r12076  
    121121            char * filename = tr_buildPath( base, subpath, NULL );
    122122
    123             if( ( fd = tr_fdFileCheckout( session, tor->uniqueId, fileIndex, filename,
     123            if( ( fd = tr_fdFileCheckout( session, tor->uniqueId, fileIndex,
     124                                          base, filename,
    124125                                          doWrite, preallocationMode, file->length ) ) < 0 )
    125126            {
  • trunk/libtransmission/inout.h

    r11709 r12076  
    6161 * Converts a piece index + offset into a file index + offset.
    6262 */
    63 void     tr_ioFindFileLocation( const tr_torrent * tor,
    64                                 tr_piece_index_t   pieceIndex,
    65                                 uint32_t           pieceOffset,
    66                                 tr_file_index_t * fileIndex,
    67                                 uint64_t *        fileOffset );
     63void tr_ioFindFileLocation( const tr_torrent * tor,
     64                             tr_piece_index_t   pieceIndex,
     65                             uint32_t           pieceOffset,
     66                             tr_file_index_t  * fileIndex,
     67                             uint64_t         * fileOffset );
    6868
    6969
Note: See TracChangeset for help on using the changeset viewer.