| 
							- diff -Naur Python-3.8.0-orig/Include/pylifecycle.h Python-3.8.0/Include/pylifecycle.h
 - --- Python-3.8.0-orig/Include/pylifecycle.h	2019-10-14 16:34:47.000000000 +0300
 - +++ Python-3.8.0/Include/pylifecycle.h	2019-10-22 10:02:36.752112100 +0300
 - @@ -21,6 +21,12 @@
 -  PyAPI_FUNC(PyThreadState *) Py_NewInterpreter(void);
 -  PyAPI_FUNC(void) Py_EndInterpreter(PyThreadState *);
 -  
 - +PyAPI_FUNC(wchar_t) Py_GetSepW(const wchar_t *);
 - +PyAPI_FUNC(char) Py_GetSepA(const char *);
 - +
 - +PyAPI_FUNC(void) Py_NormalizeSepsW(wchar_t *);
 - +PyAPI_FUNC(void) Py_NormalizeSepsA(char *);
 - +
 -  
 -  /* Py_PyAtExit is for the atexit module, Py_AtExit is for low-level
 -   * exit functions.
 - diff -Naur Python-3.8.0-orig/Lib/ntpath.py Python-3.8.0/Lib/ntpath.py
 - --- Python-3.8.0-orig/Lib/ntpath.py	2019-10-14 16:34:47.000000000 +0300
 - +++ Python-3.8.0/Lib/ntpath.py	2019-10-22 10:02:37.157712800 +0300
 - @@ -11,9 +11,7 @@
 -  curdir = '.'
 -  pardir = '..'
 -  extsep = '.'
 - -sep = '\\'
 -  pathsep = ';'
 - -altsep = '/'
 -  defpath = '.;C:\\bin'
 -  devnull = 'nul'
 -  
 - @@ -23,6 +21,15 @@
 -  import genericpath
 -  from genericpath import *
 -  
 - +if sys.platform == "win32" and "MSYSTEM" in os.environ:
 - +    sep = '/'
 - +    altsep = '\\'
 - +else:
 - +    sep = '\\'
 - +    altsep = '/'
 - +bsep = str.encode(sep)
 - +baltsep = str.encode(altsep)
 - +
 -  __all__ = ["normcase","isabs","join","splitdrive","split","splitext",
 -             "basename","dirname","commonprefix","getsize","getmtime",
 -             "getatime","getctime", "islink","exists","lexists","isdir","isfile",
 - @@ -33,9 +40,27 @@
 -  
 -  def _get_bothseps(path):
 -      if isinstance(path, bytes):
 - -        return b'\\/'
 - +        return bsep+baltsep
 - +    else:
 - +        return sep+altsep
 - +
 - +def _get_sep(path):
 - +    if isinstance(path, bytes):
 - +        return bsep
 - +    else:
 - +        return sep
 - +
 - +def _get_altsep(path):
 - +    if isinstance(path, bytes):
 - +        return baltsep
 - +    else:
 - +        return altsep
 - +
 - +def _get_colon(path):
 - +    if isinstance(path, bytes):
 - +        return b':'
 -      else:
 - -        return '\\/'
 - +        return ':'
 -  
 -  # Normalize the case of a pathname and map slashes to backslashes.
 -  # Other normalizations (such as optimizing '../' away) are not done
 - @@ -47,9 +72,9 @@
 -      Makes all characters lowercase and all slashes into backslashes."""
 -      s = os.fspath(s)
 -      if isinstance(s, bytes):
 - -        return s.replace(b'/', b'\\').lower()
 - +        return s.replace(baltsep, bsep).lower()
 -      else:
 - -        return s.replace('/', '\\').lower()
 - +        return s.replace(altsep, sep).lower()
 -  
 -  
 -  # Return whether a path is absolute.
 - @@ -68,14 +93,9 @@
 -  # Join two (or more) paths.
 -  def join(path, *paths):
 -      path = os.fspath(path)
 - -    if isinstance(path, bytes):
 - -        sep = b'\\'
 - -        seps = b'\\/'
 - -        colon = b':'
 - -    else:
 - -        sep = '\\'
 - -        seps = '\\/'
 - -        colon = ':'
 - +    sep = _get_sep(path)
 - +    seps = _get_bothseps(path)
 - +    colon = _get_colon(path)
 -      try:
 -          if not paths:
 -              path[:0] + sep  #23780: Ensure compatible data type even if p is null.
 - @@ -134,14 +154,9 @@
 -      """
 -      p = os.fspath(p)
 -      if len(p) >= 2:
 - -        if isinstance(p, bytes):
 - -            sep = b'\\'
 - -            altsep = b'/'
 - -            colon = b':'
 - -        else:
 - -            sep = '\\'
 - -            altsep = '/'
 - -            colon = ':'
 - +        sep = _get_sep(p)
 - +        altsep = _get_altsep(p)
 - +        colon = _get_colon(p)
 -          normp = p.replace(altsep, sep)
 -          if (normp[0:2] == sep*2) and (normp[2:3] != sep):
 -              # is a UNC path:
 - @@ -195,9 +210,9 @@
 -  def splitext(p):
 -      p = os.fspath(p)
 -      if isinstance(p, bytes):
 - -        return genericpath._splitext(p, b'\\', b'/', b'.')
 - +        return genericpath._splitext(p, bsep, baltsep, b'.')
 -      else:
 - -        return genericpath._splitext(p, '\\', '/', '.')
 - +        return genericpath._splitext(p, sep, altsep, '.')
 -  splitext.__doc__ = genericpath._splitext.__doc__
 -  
 -  
 - @@ -442,15 +457,13 @@
 -  def normpath(path):
 -      """Normalize path, eliminating double slashes, etc."""
 -      path = os.fspath(path)
 - +    sep = _get_sep(path)
 - +    altsep = _get_altsep(path)
 -      if isinstance(path, bytes):
 - -        sep = b'\\'
 - -        altsep = b'/'
 -          curdir = b'.'
 -          pardir = b'..'
 -          special_prefixes = (b'\\\\.\\', b'\\\\?\\')
 -      else:
 - -        sep = '\\'
 - -        altsep = '/'
 -          curdir = '.'
 -          pardir = '..'
 -          special_prefixes = ('\\\\.\\', '\\\\?\\')
 - @@ -620,6 +620,7 @@
 -                  # strip the prefix anyway.
 -                  if ex.winerror == initial_winerror:
 -                      path = spath
 - +        path = normpath(path)
 -          return path
 -  
 -  
 - @@ -645,12 +658,11 @@
 -  def relpath(path, start=None):
 -      """Return a relative version of a path"""
 -      path = os.fspath(path)
 - +    sep = _get_sep(path)
 -      if isinstance(path, bytes):
 - -        sep = b'\\'
 -          curdir = b'.'
 -          pardir = b'..'
 -      else:
 - -        sep = '\\'
 -          curdir = '.'
 -          pardir = '..'
 -  
 - @@ -705,13 +717,11 @@
 -          raise ValueError('commonpath() arg is an empty sequence')
 -  
 -      paths = tuple(map(os.fspath, paths))
 - +    sep = _get_sep(paths[0])
 - +    altsep = _get_altsep(paths[0])
 -      if isinstance(paths[0], bytes):
 - -        sep = b'\\'
 - -        altsep = b'/'
 -          curdir = b'.'
 -      else:
 - -        sep = '\\'
 - -        altsep = '/'
 -          curdir = '.'
 -  
 -      try:
 - diff -Naur Python-3.8.0-orig/Modules/posixmodule.c Python-3.8.0/Modules/posixmodule.c
 - --- Python-3.8.0-orig/Modules/posixmodule.c	2019-10-22 10:00:56.988936800 +0300
 - +++ Python-3.8.0/Modules/posixmodule.c	2019-10-22 10:02:37.547713500 +0300
 - @@ -3438,6 +3438,7 @@
 -          return PyErr_SetFromWindowsErr(0);
 -      }
 -  
 - +    Py_NormalizeSepsW(wbuf2);
 -      PyObject *resobj = PyUnicode_FromWideChar(wbuf2, len);
 -      if (wbuf2 != wbuf) {
 -          PyMem_RawFree(wbuf2);
 - @@ -3886,6 +3887,7 @@
 -          result = GetFullPathNameW(path->wide, result, woutbufp, &wtemp);
 -      }
 -      if (result) {
 - +        Py_NormalizeSepsW(woutbufp);
 -          v = PyUnicode_FromWideChar(woutbufp, wcslen(woutbufp));
 -          if (path->narrow)
 -              Py_SETREF(v, PyUnicode_EncodeFSDefault(v));
 - @@ -3962,6 +3964,7 @@
 -          target_path = tmp;
 -      }
 -  
 - +    Py_NormalizeSepsW(target_path);
 -      result = PyUnicode_FromWideChar(target_path, result_length);
 -      if (result && path->narrow) {
 -          Py_SETREF(result, PyUnicode_EncodeFSDefault(result));
 - diff -Naur Python-3.8.0-orig/Python/initconfig.c Python-3.8.0/Python/initconfig.c
 - --- Python-3.8.0-orig/Python/initconfig.c	2019-10-14 16:34:47.000000000 +0300
 - +++ Python-3.8.0/Python/initconfig.c	2019-10-22 10:02:37.968914200 +0300
 - @@ -98,7 +98,7 @@
 -  "PYTHONDEVMODE: enable the development mode.\n"
 -  "PYTHONPYCACHEPREFIX: root directory for bytecode cache (pyc) files.\n";
 -  
 - -#if defined(MS_WINDOWS)
 - +#if defined(_MSC_VER)
 -  #  define PYTHONHOMEHELP "<prefix>\\python{major}{minor}"
 -  #else
 -  #  define PYTHONHOMEHELP "<prefix>/lib/pythonX.X"
 - @@ -1129,7 +1129,7 @@
 -      }
 -  
 -      /* Last fall back: hardcoded name */
 - -#ifdef MS_WINDOWS
 - +#ifdef _MSC_VER
 -      const wchar_t *default_program_name = L"python";
 -  #else
 -      const wchar_t *default_program_name = L"python3";
 - diff -Naur Python-3.8.0-orig/Python/pathconfig.c Python-3.8.0/Python/pathconfig.c
 - --- Python-3.8.0-orig/Python/pathconfig.c	2019-10-14 16:34:47.000000000 +0300
 - +++ Python-3.8.0/Python/pathconfig.c	2019-10-22 10:02:38.358914900 +0300
 - @@ -13,6 +13,114 @@
 -  extern "C" {
 -  #endif
 -  
 - +#ifdef __MINGW32__
 - +#define wcstok  wcstok_s
 - +#include <windows.h>
 - +#endif
 - +
 - +char
 - +Py_GetSepA(const char *name)
 - +{
 - +    char* msystem = (char*)2; /* So that non Windows use / as sep */
 - +    static char sep = '\0';
 - +#ifdef _WIN32
 - +    /* https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247%28v=vs.85%29.aspx
 - +     * The "\\?\" prefix .. indicate that the path should be passed to the system with minimal
 - +     * modification, which means that you cannot use forward slashes to represent path separators
 - +     */
 - +    if (name != NULL && memcmp(name, "\\\\?\\", sizeof("\\\\?\\") - sizeof(char)) == 0)
 - +    {
 - +        return '\\';
 - +    }
 - +#endif
 - +    if (sep != '\0')
 - +        return sep;
 - +#if defined(__MINGW32__)
 - +    msystem = Py_GETENV("MSYSTEM");
 - +#endif
 - +    if (msystem != NULL)
 - +        sep = '/';
 - +    else
 - +        sep = '\\';
 - +    return sep;
 - +}
 - +
 - +static char
 - +Py_GetAltSepA(const char *name)
 - +{
 - +    char sep = Py_GetSepA(name);
 - +    if (sep == '/')
 - +        return '\\';
 - +    return '/';
 - +}
 - +
 - +void
 - +Py_NormalizeSepsA(char *name)
 - +{
 - +    char sep = Py_GetSepA(name);
 - +    char altsep = Py_GetAltSepA(name);
 - +    char* seps;
 - +    if (strlen(name) > 1 && name[1] == ':') {
 - +        name[0] = toupper(name[0]);
 - +    }
 - +    seps = strchr(name, altsep);
 - +    while(seps) {
 - +        *seps = sep;
 - +        seps = strchr(seps, altsep);
 - +    }
 - +}
 - +
 - +wchar_t
 - +Py_GetSepW(const wchar_t *name)
 - +{
 - +    char* msystem = (char*)2; /* So that non Windows use / as sep */
 - +    static wchar_t sep = L'\0';
 - +#ifdef _WIN32
 - +    /* https://msdn.microsoft.com/en-gb/library/windows/desktop/aa365247%28v=vs.85%29.aspx
 - +     * The "\\?\" prefix .. indicate that the path should be passed to the system with minimal
 - +     * modification, which means that you cannot use forward slashes to represent path separators
 - +     */
 - +    if (name != NULL && memcmp(name, L"\\\\?\\", sizeof(L"\\\\?\\") - sizeof(wchar_t)) == 0)
 - +    {
 - +        return L'\\';
 - +    }
 - +#endif
 - +    if (sep != L'\0')
 - +        return sep;
 - +#if defined(__MINGW32__)
 - +    msystem = Py_GETENV("MSYSTEM");
 - +#endif
 - +    if (msystem != NULL)
 - +        sep = L'/';
 - +    else
 - +        sep = L'\\';
 - +    return sep;
 - +}
 - +
 - +static wchar_t
 - +Py_GetAltSepW(const wchar_t *name)
 - +{
 - +    char sep = Py_GetSepW(name);
 - +    if (sep == L'/')
 - +        return L'\\';
 - +    return L'/';
 - +}
 - +
 - +void
 - +Py_NormalizeSepsW(wchar_t *name)
 - +{
 - +    wchar_t sep = Py_GetSepW(name);
 - +    wchar_t altsep = Py_GetAltSepW(name);
 - +    wchar_t* seps;
 - +    if (wcslen(name) > 1 && name[1] == L':') {
 - +        name[0] = towupper(name[0]);
 - +    }
 - +    seps = wcschr(name, altsep);
 - +    while(seps) {
 - +        *seps = sep;
 - +        seps = wcschr(seps, altsep);
 - +    }
 - +}
 -  
 -  _PyPathConfig _Py_path_config = _PyPathConfig_INIT;
 -  #ifdef MS_WINDOWS
 - @@ -560,6 +668,7 @@
 -      if (_Py_path_config.program_name == NULL) {
 -          Py_FatalError("Py_SetProgramName() failed: out of memory");
 -      }
 - +    Py_NormalizeSepsW(_Py_path_config.program_name);
 -  }
 -  
 -  void
 - diff -Naur Python-3.8.0-orig/Python/traceback.c Python-3.8.0/Python/traceback.c
 - --- Python-3.8.0-orig/Python/traceback.c	2019-10-14 16:34:47.000000000 +0300
 - +++ Python-3.8.0/Python/traceback.c	2019-10-22 10:02:39.170116300 +0300
 - @@ -315,7 +315,7 @@
 -      filepath = PyBytes_AS_STRING(filebytes);
 -  
 -      /* Search tail of filename in sys.path before giving up */
 - -    tail = strrchr(filepath, SEP);
 - +    tail = strrchr(filepath, Py_GetSepA(filepath));
 -      if (tail == NULL)
 -          tail = filepath;
 -      else
 
 
  |