From b24d9ef07aeaa01b19fcf6bcab8bf62e3b249614 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 4 Nov 2015 21:51:45 +0530 Subject: [PATCH] More places where SHGetFolder could fail --- src/calibre/constants.py | 12 +++++++++--- src/calibre/utils/fonts/scanner.py | 5 ++++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/calibre/constants.py b/src/calibre/constants.py index fc21d7d4ee..6b43fe364a 100644 --- a/src/calibre/constants.py +++ b/src/calibre/constants.py @@ -92,7 +92,10 @@ def _get_cache_dir(): if iswindows: w = plugins['winutil'][0] - candidate = os.path.join(w.special_folder_path(w.CSIDL_LOCAL_APPDATA), u'%s-cache'%__appname__) + try: + candidate = os.path.join(w.special_folder_path(w.CSIDL_LOCAL_APPDATA), u'%s-cache'%__appname__) + except ValueError: + return confcache elif isosx: candidate = os.path.join(os.path.expanduser(u'~/Library/Caches'), __appname__) else: @@ -206,8 +209,11 @@ if 'CALIBRE_CONFIG_DIRECTORY' in os.environ: elif iswindows: if plugins['winutil'][0] is None: raise Exception(plugins['winutil'][1]) - config_dir = plugins['winutil'][0].special_folder_path(plugins['winutil'][0].CSIDL_APPDATA) - if not os.access(config_dir, os.W_OK|os.X_OK): + try: + config_dir = plugins['winutil'][0].special_folder_path(plugins['winutil'][0].CSIDL_APPDATA) + except ValueError: + config_dir = None + if not config_dir or not os.access(config_dir, os.W_OK|os.X_OK): config_dir = os.path.expanduser('~') config_dir = os.path.join(config_dir, 'calibre') elif isosx: diff --git a/src/calibre/utils/fonts/scanner.py b/src/calibre/utils/fonts/scanner.py index 079f358d5a..ceccd6cbf5 100644 --- a/src/calibre/utils/fonts/scanner.py +++ b/src/calibre/utils/fonts/scanner.py @@ -100,7 +100,10 @@ def font_dirs(): winutil, err = plugins['winutil'] if err: raise RuntimeError('Failed to load winutil: %s'%err) - return [winutil.special_folder_path(winutil.CSIDL_FONTS)] + try: + return [winutil.special_folder_path(winutil.CSIDL_FONTS)] + except ValueError: + return [r'C:\Windows\Fonts'] if isosx: return [ '/Library/Fonts',