Changeset 6601


Ignore:
Timestamp:
Aug 20, 2008, 7:00:52 PM (13 years ago)
Author:
charles
Message:

allocate torrent/resume filenames on the heap instead of the stack

Location:
trunk/libtransmission
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/libtransmission/metainfo.c

    r6600 r6601  
    124124}
    125125
    126 static void
     126static char*
    127127getTorrentFilename( const tr_handle  * handle,
    128                     const tr_info    * inf,
    129                     char             * buf,
    130                     size_t             buflen )
    131 {
    132     const char * dir = tr_getTorrentDir( handle );
    133     char base[MAX_PATH_LENGTH];
    134     tr_snprintf( base, sizeof( base ), "%s.%16.16s.torrent", inf->name, inf->hashString );
    135     tr_buildPath( buf, buflen, dir, base, NULL );
    136 }
    137 
    138 static void
     128                    const tr_info    * inf )
     129{
     130    return tr_strdup_printf( "%s%c%s.%16.16s.torrent",
     131                             tr_getTorrentDir( handle ),
     132                             TR_PATH_DELIMITER,
     133                             inf->name,
     134                             inf->hashString );
     135}
     136
     137static char*
    139138getTorrentOldFilename( const tr_handle * handle,
    140                        const tr_info   * info,
    141                        char            * name,
    142                        size_t            len )
    143 {
    144     const char * torDir = tr_getTorrentDir( handle );
    145 
    146     if( !handle->tag )
    147     {
    148         tr_buildPath( name, len, torDir, info->hashString, NULL );
    149     }
    150     else
    151     {
    152         char base[1024];
    153         tr_snprintf( base, sizeof(base), "%s-%s", info->hashString, handle->tag );
    154         tr_buildPath( name, len, torDir, base, NULL );
    155     }
     139                       const tr_info   * inf )
     140{
     141    char * ret;
     142    struct evbuffer * buf = evbuffer_new( );
     143    evbuffer_add_printf( buf, "%s%c%s",
     144                         tr_getTorrentDir( handle ),
     145                         TR_PATH_DELIMITER,
     146                         inf->hashString );
     147    if( handle->tag )
     148        evbuffer_add_printf( buf, "-%s", handle->tag );
     149    ret = tr_strndup( EVBUFFER_DATA( buf ), EVBUFFER_LENGTH( buf ) );
     150    evbuffer_free( buf );
     151    return ret;
    156152}
    157153
     
    161157{
    162158    struct stat new_sb;
    163     char new_name[MAX_PATH_LENGTH];
    164 
    165     getTorrentFilename( handle, inf, new_name, sizeof( new_name ) );
     159    char * new_name = getTorrentFilename( handle, inf );
    166160
    167161    if( stat( new_name, &new_sb ) || ( ( new_sb.st_mode & S_IFMT ) != S_IFREG ) )
    168162    {
    169         char old_name[MAX_PATH_LENGTH];
     163        char * old_name = getTorrentOldFilename( handle, inf );
    170164        size_t contentLen;
    171165        uint8_t * content;
    172166
    173167        tr_mkdirp( tr_getTorrentDir( handle ), 0777 );
    174         getTorrentOldFilename( handle, inf, old_name, sizeof( old_name ) );
    175168        if(( content = tr_loadFile( old_name, &contentLen )))
    176169        {
     
    196189
    197190        tr_free( content );
    198     }
     191        tr_free( old_name );
     192    }
     193
     194    tr_free( new_name );
    199195}
    200196
     
    435431
    436432    /* filename of Transmission's copy */
    437     getTorrentFilename( handle, inf, buf, sizeof( buf ) );
    438433    tr_free( inf->torrent );
    439     inf->torrent = tr_strdup( buf );
     434    inf->torrent = getTorrentFilename( handle, inf );
    440435
    441436    return TR_OK;
     
    534529                        const tr_info   * inf )
    535530{
    536     char filename[MAX_PATH_LENGTH];
    537 
    538     getTorrentFilename( handle, inf, filename, sizeof( filename ) );
     531    char * filename;
     532
     533    filename = getTorrentFilename( handle, inf );
    539534    unlink( filename );
    540 
    541     getTorrentOldFilename( handle, inf, filename, sizeof( filename ) );
     535    tr_free( filename );
     536
     537    filename = getTorrentOldFilename( handle, inf );
    542538    unlink( filename );
     539    tr_free( filename );
    543540}
    544541
  • trunk/libtransmission/resume.c

    r6600 r6601  
    4848#define KEY_PROGRESS_BITFIELD "bitfield"
    4949
    50 static void
    51 getResumeFilename( char * buf, size_t buflen, const tr_torrent * tor )
    52 {
    53     const char * dir = tr_getResumeDir( tor->handle );
    54     char base[MAX_PATH_LENGTH];
    55     tr_snprintf( base, sizeof( base ), "%s.%16.16s.resume",
    56                  tor->info.name,
    57                  tor->info.hashString );
    58     tr_buildPath( buf, buflen, dir, base, NULL );
     50static char*
     51getResumeFilename( const tr_torrent * tor )
     52{
     53    return tr_strdup_printf( "%s%c%s.%16.16s.resume",
     54                             tr_getResumeDir( tor->handle ),
     55                             TR_PATH_DELIMITER,
     56                             tor->info.name,
     57                             tor->info.hashString );
    5958}
    6059
     
    349348{
    350349    tr_benc top;
    351     char filename[MAX_PATH_LENGTH];
     350    char * filename;
    352351
    353352    if( !tor )
     
    379378    saveSpeedLimits( &top, tor );
    380379
    381     getResumeFilename( filename, sizeof( filename ), tor );
     380    filename = getResumeFilename( tor );
    382381    tr_bencSaveFile( filename, &top );
     382    tr_free( filename );
    383383
    384384    tr_bencFree( &top );
     
    392392    const char * str;
    393393    uint64_t fieldsLoaded = 0;
    394     char filename[MAX_PATH_LENGTH];
     394    char * filename;
    395395    tr_benc top;
    396396
    397     getResumeFilename( filename, sizeof( filename ), tor );
     397    filename = getResumeFilename( tor );
    398398
    399399    if( tr_bencLoadFile( filename, &top ) )
     
    409409        }
    410410
     411        tr_free( filename );
    411412        return fieldsLoaded;
    412413    }
     
    485486
    486487    tr_bencFree( &top );
     488    tr_free( filename );
    487489    return fieldsLoaded;
    488490}
     
    548550tr_torrentRemoveResume( const tr_torrent * tor )
    549551{
    550     char filename[MAX_PATH_LENGTH];
    551     getResumeFilename( filename, sizeof( filename ), tor );
     552    char * filename = getResumeFilename( tor );
    552553    unlink( filename );
    553554    tr_fastResumeRemove( tor );
    554 }
     555    tr_free( filename );
     556}
Note: See TracChangeset for help on using the changeset viewer.