The patch below was proposed by Jon Davies here:

http://lists.infradead.org/pipermail/get_iplayer/2011-February/000803.html

I tested on Windows and determined that - as Jon suggested - 
File::Spec->rel2abs() 
would work on all platforms for sanitising the output directory path, so I have 
changed his code accordingly.  It also appears that Cwd::abs_path() 
(used on Linux/OSX for sanitising) behaves slightly differently on Windows, 
so it seems like a good idea to rationalise here.  The credit for this is 
Jon's, 
but if it breaks on your machine, the blame is mine.

Updated get_iplayer script is here:

https://github.com/dinkypumpkin/get_iplayer/raw/patched/get_iplayer

Commit history here:

https://github.com/dinkypumpkin/get_iplayer/commits/patched/

Patch follows -

get_iplayer uses Cwd::abs_path() to sanitise the output directory,
but this returns undef if the path doesn't exist.  This patch
substitutes Cwd::abs_path() with File::Spec->rel2abs(), which
does something similar, but successfully returns a path even if
it doesn't exist yet.  File::Spec->rel2abs() works in Windows,
so there is no longer a need for OS-specific sanitising of the
output directory.
---
 get_iplayer |    7 ++-----
 1 files changed, 2 insertions(+), 5 deletions(-)

diff --git a/get_iplayer b/get_iplayer
index 311ddaf..81d6dea 100755
--- a/get_iplayer
+++ b/get_iplayer
@@ -54,6 +54,7 @@ use Fcntl;
 use File::Copy;
 use File::Path;
 use File::stat;
+use File::Spec;
 use Getopt::Long;
 use HTML::Entities;
 use HTTP::Cookies;
@@ -4584,11 +4585,7 @@ sub generate_filenames {
        }
 
        # Determine direcotry and find it's absolute path
-       if ( $^O !~ /^MSWin32$/ ) {
-               $prog->{dir} = abs_path( $opt->{ 'output'.$prog->{type} } || 
$opt->{output} || $ENV{IPLAYER_OUTDIR} || '.' );
-       } else {
-               $prog->{dir} = $opt->{ 'output'.$prog->{type} } || 
$opt->{output} || $ENV{IPLAYER_OUTDIR} || '.';
-       }
+       $prog->{dir} = File::Spec->rel2abs( $opt->{ 'output'.$prog->{type} } || 
$opt->{output} || $ENV{IPLAYER_OUTDIR} || '.' );
        
        # Add modename to default format string if multimode option is used
        $format .= ' <mode>' if $opt->{multimode};
-- 
1.7.4.3


_______________________________________________
get_iplayer mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/get_iplayer

Reply via email to