--- ftp.pl Sat May 30 05:02:43 1998 +++ - Tue Jan 29 18:06:25 2002 @@ -270,6 +270,13 @@ $SIG{ 'PIPE' } = "ftp'ftp__sighandler"; } +# Setup a signal handler for user interrupts. +sub ftp'set_user_signals +{ + $ftp_logger = @_; + $SIG{ 'INT' } = "ftp'ftp__sighandler"; +} + # &ftp'set_namemap( function to map outgoing name, function to map incoming ) sub ftp'set_namemap { @@ -279,7 +286,6 @@ } } - # &ftp'open( hostname or address, # port to use, # retry on call failure, @@ -581,6 +587,9 @@ return 0; } + # shut down our end of the socket + &close_data_socket; + # read the close # $ret = &expect($timeout, @@ -590,9 +599,6 @@ $ret = 0; } - # shut down our end of the socket - &close_data_socket; - if( ! $ret ){ return 0; } @@ -778,7 +784,8 @@ # # open the local fname # concatenate on the end if restarting, else just overwrite - if( !open( FH, ($restart ? '>>' : '>') . $loc_fname ) ){ + # Fix for " ../" bug from Herbert Xu 2002/01/24 + if( !open( FH, ($restart ? '>>' : '>'), $loc_fname ) ){ print $showfd "Cannot create local file $loc_fname\n"; # shut down our end of the socket @@ -915,12 +922,34 @@ return $ret == 1; } +# &ftp'deldir( remote dirname ) +# Delete a directory from the remote site. +# returns 1 if successful, 0 otherwise +# Debian bug #103753, RMD not implemented, jiangmin@cds.ne.jp sub deldir { - local( $fname ) = @_; + local( $rem_fname ) = @_; + + local( $ret ); + + if( ! $service_open ){ + return 0; + } + + if( $mapunixout ){ + $rem_fname = eval "&$mapunixout( \$rem_fname, 'd' )"; + } + + &send( "RMD $rem_fname" ); + + $ret = &expect( $timeout, + 2, 1 ); # Deleted $rem_fname + if( $ret == 99 ){ + &service_closed(); + $ret = 0; + } - # not yet implemented - # RMD + return $ret == 1; } # &ftp'put( local filename, remote filename, restart where left off )