Ticket #3297: makemeta.diff

File makemeta.diff, 2.1 KB (added by charles, 12 years ago)

untested diff

  • libtransmission/makemeta.c

     
    2323
    2424#include "transmission.h"
    2525#include "crypto.h" /* tr_sha1 */
     26#include "fdlimit.h" /* tr_open_file_for_scanning() */
    2627#include "session.h"
    2728#include "bencode.h"
    2829#include "makemeta.h"
     
    203204    uint8_t *buf;
    204205    uint64_t totalRemain;
    205206    uint64_t off = 0;
    206     FILE *   fp;
     207    int fd;
    207208
    208209    if( !b->totalSize )
    209210        return ret;
     
    211212    buf = tr_valloc( b->pieceSize );
    212213    b->pieceIndex = 0;
    213214    totalRemain = b->totalSize;
    214     fp = fopen( b->files[fileIndex].filename, "rb" );
    215     if( !fp )
     215    fd = tr_open_file_for_scanning( b->files[fileIndex].filename );
     216    if( fd < 0 )
    216217    {
    217218        b->my_errno = errno;
    218219        tr_strlcpy( b->errfile,
     
    236237        {
    237238            const uint64_t n_this_pass =
    238239                MIN( ( b->files[fileIndex].size - off ), pieceRemain );
    239             fread( bufptr, 1, n_this_pass, fp );
     240            read( fd, bufptr, n_this_pass );
    240241            bufptr += n_this_pass;
    241242            off += n_this_pass;
    242243            pieceRemain -= n_this_pass;
    243244            if( off == b->files[fileIndex].size )
    244245            {
    245246                off = 0;
    246                 fclose( fp );
    247                 fp = NULL;
     247                tr_close_file( fd );
     248                fd = -1;
    248249                if( ++fileIndex < b->fileCount )
    249250                {
    250                     fp = fopen( b->files[fileIndex].filename, "rb" );
    251                     if( !fp )
     251                    fd = tr_open_file_for_scanning( b->files[fileIndex].filename );
     252                    if( fd < 0 )
    252253                    {
    253254                        b->my_errno = errno;
    254255                        tr_strlcpy( b->errfile,
     
    282283          || ( walk - ret == (int)( SHA_DIGEST_LENGTH * b->pieceCount ) ) );
    283284    assert( b->abortFlag || !totalRemain );
    284285
    285     if( fp )
    286         fclose( fp );
     286    if( fd >= 0 )
     287        tr_close_file( fd );
    287288
    288289    tr_free( buf );
    289290    return ret;