diff options
| -rw-r--r-- | youtube_dl/compat.py | 19 | ||||
| -rw-r--r-- | youtube_dl/utils.py | 9 | 
2 files changed, 24 insertions, 4 deletions
diff --git a/youtube_dl/compat.py b/youtube_dl/compat.py index f4a85443e..cd46693b3 100644 --- a/youtube_dl/compat.py +++ b/youtube_dl/compat.py @@ -1,8 +1,10 @@  from __future__ import unicode_literals +import ctypes  import getpass  import optparse  import os +import platform  import re  import subprocess  import sys @@ -326,6 +328,22 @@ def workaround_optparse_bug9161():          optparse.OptionGroup.add_option = _compat_add_option +if platform.python_implementation() == 'PyPy': +    # PyPy expects byte strings as Windows function names +    # https://github.com/rg3/youtube-dl/pull/4392 +    def compat_WINFUNCTYPE(*args, **kwargs): +        real = ctypes.WINFUNCTYPE(*args, **kwargs) + +        def resf(tpl, *args, **kwargs): +            funcname, dll = tpl +            return real((str(funcname), dll), *args, **kwargs) + +        return resf +else: +    def compat_WINFUNCTYPE(*args, **kwargs): +        return ctypes.WINFUNCTYPE(*args, **kwargs) + +  __all__ = [      'compat_HTTPError',      'compat_chr', @@ -349,6 +367,7 @@ __all__ = [      'compat_urllib_request',      'compat_urlparse',      'compat_urlretrieve', +    'compat_WINFUNCTYPE',      'compat_xml_parse_error',      'shlex_quote',      'subprocess_check_output', diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py index 4b0567c93..bbe554a65 100644 --- a/youtube_dl/utils.py +++ b/youtube_dl/utils.py @@ -41,6 +41,7 @@ from .compat import (      compat_urllib_parse_urlparse,      compat_urllib_request,      compat_urlparse, +    compat_WINFUNCTYPE,      shlex_quote,  ) @@ -817,21 +818,21 @@ def _windows_write_string(s, out):      if fileno not in WIN_OUTPUT_IDS:          return False -    GetStdHandle = ctypes.WINFUNCTYPE( +    GetStdHandle = compat_WINFUNCTYPE(          ctypes.wintypes.HANDLE, ctypes.wintypes.DWORD)(          ("GetStdHandle", ctypes.windll.kernel32))      h = GetStdHandle(WIN_OUTPUT_IDS[fileno]) -    WriteConsoleW = ctypes.WINFUNCTYPE( +    WriteConsoleW = compat_WINFUNCTYPE(          ctypes.wintypes.BOOL, ctypes.wintypes.HANDLE, ctypes.wintypes.LPWSTR,          ctypes.wintypes.DWORD, ctypes.POINTER(ctypes.wintypes.DWORD),          ctypes.wintypes.LPVOID)(("WriteConsoleW", ctypes.windll.kernel32))      written = ctypes.wintypes.DWORD(0) -    GetFileType = ctypes.WINFUNCTYPE(ctypes.wintypes.DWORD, ctypes.wintypes.DWORD)(("GetFileType", ctypes.windll.kernel32)) +    GetFileType = compat_WINFUNCTYPE(ctypes.wintypes.DWORD, ctypes.wintypes.DWORD)(("GetFileType", ctypes.windll.kernel32))      FILE_TYPE_CHAR = 0x0002      FILE_TYPE_REMOTE = 0x8000 -    GetConsoleMode = ctypes.WINFUNCTYPE( +    GetConsoleMode = compat_WINFUNCTYPE(          ctypes.wintypes.BOOL, ctypes.wintypes.HANDLE,          ctypes.POINTER(ctypes.wintypes.DWORD))(          ("GetConsoleMode", ctypes.windll.kernel32))  | 
