mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Cleanup getenv
This commit is contained in:
parent
057b873933
commit
c243fa2358
@ -151,24 +151,28 @@ else:
|
|||||||
return x
|
return x
|
||||||
|
|
||||||
if hasattr(sys, 'getwindowsversion'):
|
if hasattr(sys, 'getwindowsversion'):
|
||||||
import ctypes
|
|
||||||
gev = ctypes.windll.kernel32.GetEnvironmentVariableW
|
|
||||||
|
|
||||||
def getenv(x, default=None):
|
def getenv(x, default=None):
|
||||||
if isinstance(x, bytes):
|
if isinstance(x, bytes):
|
||||||
x = x.decode('mbcs', 'replace')
|
x = x.decode('mbcs', 'replace')
|
||||||
n = 1024
|
|
||||||
buf = ctypes.create_unicode_buffer(n)
|
if getenv.buf is None:
|
||||||
res = gev(x, buf, n)
|
import ctypes
|
||||||
|
import ctypes.wintypes as w
|
||||||
|
getenv.cub = ctypes.create_unicode_buffer
|
||||||
|
getenv.buf = getenv.cub(1024)
|
||||||
|
getenv.gev = ctypes.windll.kernel32.GetEnvironmentVariableW
|
||||||
|
getenv.gev.restype = w.DWORD
|
||||||
|
getenv.gev.argtypes = [w.LPCWSTR, w.LPWSTR, w.DWORD]
|
||||||
|
res = getenv.gev(x, getenv.buf, len(getenv.buf))
|
||||||
if res == 0:
|
if res == 0:
|
||||||
return default
|
return default
|
||||||
if res > n - 4:
|
if res > len(getenv.buf) - 4:
|
||||||
n = res + 8
|
getenv.buf = getenv.cub(res + 8)
|
||||||
buf = ctypes.create_unicode_buffer(n)
|
res = getenv.gev(x, getenv.buf, len(getenv.buf))
|
||||||
res = gev(x, buf, n)
|
|
||||||
if res == 0:
|
if res == 0:
|
||||||
return default
|
return default
|
||||||
return buf.value
|
return getenv.buf.value
|
||||||
|
getenv.buf = None
|
||||||
else:
|
else:
|
||||||
def getenv(x, default=None):
|
def getenv(x, default=None):
|
||||||
ans = os.getenv(x, default)
|
ans = os.getenv(x, default)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user