commit: f45c185fa9f7bab1714cbde1227c421e170c027a
parent 1bd96c3a60e40d2490be834f95b9acca6c74eb07
Author: Philipp Hagemeister <phihag@phihag.de>
Date: Mon, 13 May 2013 09:20:08 +0200
Do not re-encode / to # if / is a platform separator, and correctly handle permission errors (Fixes #831)
Diffstat:
1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py
@@ -1,6 +1,7 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
+import errno
import gzip
import io
import json
@@ -334,12 +335,20 @@ def sanitize_open(filename, open_mode):
stream = open(encodeFilename(filename), open_mode)
return (stream, filename)
except (IOError, OSError) as err:
- # In case of error, try to remove win32 forbidden chars
- filename = re.sub(u'[/<>:"\\|\\\\?\\*]', u'#', filename)
+ if err.errno in (errno.EACCES,):
+ raise
- # An exception here should be caught in the caller
- stream = open(encodeFilename(filename), open_mode)
- return (stream, filename)
+ # In case of error, try to remove win32 forbidden chars
+ alt_filename = os.path.join(
+ re.sub(u'[/<>:"\\|\\\\?\\*]', u'#', path_part)
+ for path_part in os.path.split(filename)
+ )
+ if alt_filename == filename:
+ raise
+ else:
+ # An exception here should be caught in the caller
+ stream = open(encodeFilename(filename), open_mode)
+ return (stream, alt_filename)
def timeconvert(timestr):