[PATCH] create non-existent output directory

Jon Davies jon at hedgerows.org.uk
Wed Feb 9 05:31:45 EST 2011


sanitizing the output directory changed to use File::Spec->rel2abs
since abs_path is undef for non-existent directories - this allows the
code that creates the output directory to work
---

I've noticed that get_iplayer failed to download programmes if the
output directory doesn't exist, which isn't unreasonable, but on
looking at the code to see if I could change this I discovered that
it's supposed to try, but fails.

It turns out that to sanitize the output directory it uses abs_path(),
but this returns undef if the path doesn't exist.  Attached below is a
trivial patch to change this to use File::Spec->rel2abs(), which does
something similar, but successfully returns a path even if it doesn't
exist yet.

I suspect this will work cleanly on Win32 boxes, making the 'if'
wrapper around finding the path unnecessary, but I don't have
get_iplayer running on windows anywhere to test it.

Cheers
Jon

diff --git a/get_iplayer b/get_iplayer
index e13d3ea..162a2b3 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;
@@ -4560,7 +4561,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} || '.' );
+		$prog->{dir} = File::Spec->rel2abs( $opt->{ 'output'.$prog->{type} } || $opt->{output} || $ENV{IPLAYER_OUTDIR} || '.' );
 	} else {
 		$prog->{dir} = $opt->{ 'output'.$prog->{type} } || $opt->{output} || $ENV{IPLAYER_OUTDIR} || '.';
 	}



More information about the get_iplayer mailing list