Changeset 12692


Ignore:
Timestamp:
Aug 16, 2011, 10:42:43 PM (10 years ago)
Author:
jordan
Message:

(trunk libT) #4377 "Incomplete Folder removed when sub-folder of Default Location" -- fix r12665-r12667 regression reported by KyleK in comment:31

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/libtransmission/torrent.c

    r12667 r12692  
    27602760    for( f=0; f<tor->info.fileCount; ++f )
    27612761    {
    2762         char * subpath;
    2763         const char * base;
    2764 
    2765         if( tr_torrentFindFile2( tor, f, &base, &subpath, NULL ) )
     2762        char * filename = tr_buildPath( top, tor->info.files[f].name, NULL );
     2763        if( !fileExists( filename, NULL ) ) {
     2764                char * partial = tr_torrentBuildPartial( tor, f );
     2765                tr_free( filename );
     2766                filename = tr_buildPath( top, partial, NULL );
     2767                tr_free( partial );
     2768                if( !fileExists( filename, NULL ) ) {
     2769                        tr_free( filename );
     2770                        filename = NULL;
     2771                }
     2772        }
     2773
     2774        if( filename != NULL )
    27662775        {
    2767             char * source = tr_buildPath( base, subpath, NULL );
    2768             char * target = tr_buildPath( tmpdir, subpath, NULL );
     2776            char * target = tr_buildPath( tmpdir, tor->info.files[f].name, NULL );
    27692777            char * target_dir = tr_dirname( target );
    27702778            tr_mkdirp( target_dir, 0777 );
    2771             rename( source, target );
     2779            rename( filename, target );
    27722780            tr_ptrArrayAppend( &files, target );
    27732781            tr_free( target_dir );
    2774             tr_free( source );
    2775             tr_free( subpath );
     2782            tr_free( filename );
    27762783        }
    27772784    }
     
    27952802            {
    27962803                char * file = tr_buildPath( tmpdir, d->d_name, NULL );
    2797                 tr_ptrArrayInsertSorted( &folders, tr_strdup( d->d_name ), vstrcmp );
    27982804                func( file );
    27992805                tr_free( file );
     
    28232829    ***/
    28242830
     2831    /* build a list of 'top's child directories that belong to this torrent */
     2832    for( f=0; f<tor->info.fileCount; ++f )
     2833    {
     2834        char * dir;
     2835        char * filename;
     2836
     2837        /* get the directory that this file goes in... */
     2838        filename = tr_buildPath( top, tor->info.files[f].name, NULL );
     2839        dir = tr_dirname( filename );
     2840        tr_free( filename );
     2841
     2842        if( !tr_is_same_file( top, dir ) ) {
     2843            for( ;; ) {
     2844                char * parent = tr_dirname( dir );
     2845                if( tr_is_same_file( top, parent ) ) {
     2846                    if( tr_ptrArrayFindSorted( &folders, dir, vstrcmp ) == NULL ) {
     2847                        tr_ptrArrayInsertSorted( &folders, tr_strdup( dir ), vstrcmp );
     2848                    }
     2849                    break;
     2850                }
     2851                tr_free( dir );
     2852                dir = parent;
     2853            }
     2854        }
     2855    }
    28252856    for( i=0, n=tr_ptrArraySize(&folders); i<n; ++i )
    2826     {
    2827         char * folder = tr_buildPath( top, tr_ptrArrayNth(&folders,i), NULL );
    2828         removeEmptyFoldersAndJunkFiles( folder );
    2829         tr_free( folder );
    2830     }
     2857        removeEmptyFoldersAndJunkFiles( tr_ptrArrayNth( &folders, i ) );
    28312858
    28322859    /* cleanup */
Note: See TracChangeset for help on using the changeset viewer.