mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 05:16:21 +00:00
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.
This commit is contained in:
parent
c999e35e54
commit
08b3d492fa
@ -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))
|
||||
|
Loading…
Reference in New Issue
Block a user