[Python-checkins] r68901 - in python/branches/release30-maint: Lib/tkinter/_fix.py Misc/NEWS
martin.v.loewis
python-checkins at python.org
Sat Jan 24 17:25:44 CET 2009
Author: martin.v.loewis
Date: Sat Jan 24 17:25:04 2009
New Revision: 68901
Log:
Merged revisions 68898 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
................
r68898 | martin.v.loewis | 2009-01-24 17:19:45 +0100 (Sa, 24 Jan 2009) | 10 lines
Merged revisions 68893 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r68893 | martin.v.loewis | 2009-01-24 16:47:27 +0100 (Sa, 24 Jan 2009) | 3 lines
Issue #3881: Help Tcl to load even when started through the
unreadable local symlink to "Program Files" on Vista.
........
................
Modified:
python/branches/release30-maint/ (props changed)
python/branches/release30-maint/Lib/tkinter/_fix.py
python/branches/release30-maint/Misc/NEWS
Modified: python/branches/release30-maint/Lib/tkinter/_fix.py
==============================================================================
--- python/branches/release30-maint/Lib/tkinter/_fix.py (original)
+++ python/branches/release30-maint/Lib/tkinter/_fix.py Sat Jan 24 17:25:04 2009
@@ -10,6 +10,40 @@
# <TCL_LIBRARY>\..\tcl<TCL_VERSION>, so anything close to
# the real Tcl library will do.
+# Expand symbolic links on Vista
+try:
+ import ctypes
+ ctypes.windll.kernel32.GetFinalPathNameByHandleW
+except (ImportError, AttributeError):
+ def convert_path(s):
+ return s
+else:
+ def convert_path(s):
+ if isinstance(s, bytes):
+ s = s.decode("mbcs")
+ hdir = ctypes.windll.kernel32.\
+ CreateFileW(s, 0x80, # FILE_READ_ATTRIBUTES
+ 1, # FILE_SHARE_READ
+ None, 3, # OPEN_EXISTING
+ 0x02000000, # FILE_FLAG_BACKUP_SEMANTICS
+ None)
+ if hdir == -1:
+ # Cannot open directory, give up
+ return s
+ buf = ctypes.create_unicode_buffer("", 32768)
+ res = ctypes.windll.kernel32.\
+ GetFinalPathNameByHandleW(hdir, buf, len(buf),
+ 0) # VOLUME_NAME_DOS
+ ctypes.windll.kernel32.CloseHandle(hdir)
+ if res == 0:
+ # Conversion failed (e.g. network location)
+ return s
+ s = buf[:res]
+ # Ignore leading \\?\
+ if s.startswith("\\\\?\\"):
+ s = s[4:]
+ return s
+
prefix = os.path.join(sys.prefix,"tcl")
if not os.path.exists(prefix):
# devdir/../tcltk/lib
@@ -17,6 +51,7 @@
prefix = os.path.abspath(prefix)
# if this does not exist, no further search is needed
if os.path.exists(prefix):
+ prefix = convert_path(prefix)
if "TCL_LIBRARY" not in os.environ:
for name in os.listdir(prefix):
if name.startswith("tcl"):
Modified: python/branches/release30-maint/Misc/NEWS
==============================================================================
--- python/branches/release30-maint/Misc/NEWS (original)
+++ python/branches/release30-maint/Misc/NEWS Sat Jan 24 17:25:04 2009
@@ -100,6 +100,9 @@
Library
-------
+- Issue #3881: Help Tcl to load even when started through the
+ unreadable local symlink to "Program Files" on Vista.
+
- Issue #4710: Extract directories properly in the zipfile module;
allow adding directories to a zipfile.
More information about the Python-checkins
mailing list