The branch, master, has been updated.

- Log -----------------------------------------------------------------

commit 08b3d492fac48e1b36d46cb236b19eb04ebd1098
Author: Enrico Forestieri <[email protected]>
Date:   Wed Jul 18 22:20:46 2012 +0200

    Fix bug #8254: An encoding problem
    
    Use the short version of a path, which is guaranteed to be ascii and
    works even if the path is not encodable in the current codepage.

diff --git a/lib/configure.py b/lib/configure.py
index 2379b35..168b379 100644
--- a/lib/configure.py
+++ b/lib/configure.py
@@ -62,7 +62,7 @@ def cmdOutput(cmd):
     '''
     if os.name == 'nt':
         b = False
-        cmd = 'cmd /d /c pushd ' + os.getcwd() + '&' + cmd
+        cmd = 'cmd /d /c pushd ' + shortPath(os.getcwdu()) + '&' + cmd
     else:
         b = True
     pipe = subprocess.Popen(cmd, shell=b, close_fds=b, stdin=subprocess.PIPE, \
@@ -73,6 +73,18 @@ def cmdOutput(cmd):
     return output.strip()
 
 
+def shortPath(path):
+    ''' On Windows, return the short version of "path" if possible '''
+    if os.name == 'nt':
+        from ctypes import windll, create_unicode_buffer
+        GetShortPathName = windll.kernel32.GetShortPathNameW
+        shortlen = GetShortPathName(path, 0, 0)
+        shortpath = create_unicode_buffer(shortlen)
+        if GetShortPathName(path, shortpath, shortlen):
+            return shortpath.value
+    return path
+
+
 def setEnviron():
     ''' I do not really know why this is useful, but we might as well keep it.
         NLS nuisances.
@@ -110,18 +122,10 @@ def checkTeXPaths():
         fd, tmpfname = mkstemp(suffix='.ltx')
         if os.name == 'nt':
             from locale import getdefaultlocale
-            from ctypes import windll, create_unicode_buffer
-            GetShortPathName = windll.kernel32.GetShortPathNameW
             language, encoding = getdefaultlocale()
             if encoding == None:
                 encoding = 'latin1'
-            longname = unicode(tmpfname, encoding)
-            shortlen = GetShortPathName(longname, 0, 0)
-            shortname = create_unicode_buffer(shortlen)
-            if GetShortPathName(longname, shortname, shortlen):
-                inpname = shortname.value.replace('\\', '/')
-            else:
-                inpname = tmpfname.replace('\\', '/')
+            inpname = shortPath(unicode(tmpfname, encoding)).replace('\\', '/')
         else:
             inpname = cmdOutput('cygpath -m ' + tmpfname)
         logname = os.path.basename(re.sub("(?i).ltx", ".log", inpname))

-----------------------------------------------------------------------

Summary of changes:
 lib/configure.py |   24 ++++++++++++++----------
 1 files changed, 14 insertions(+), 10 deletions(-)


hooks/post-receive
-- 
The LyX Source Repository

Reply via email to