mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Another win32 API function
This commit is contained in:
parent
c478139248
commit
0e5ae8b978
@ -618,6 +618,24 @@ set_handle_information(PyObject *self, PyObject *args) {
|
|||||||
Py_RETURN_NONE;
|
Py_RETURN_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
get_long_path_name(PyObject *self, PyObject *args) {
|
||||||
|
wchar_raii path;
|
||||||
|
if (!PyArg_ParseTuple(args, "O&", py_to_wchar_no_none, &path)) return NULL;
|
||||||
|
DWORD sz = GetLongPathNameW(path.ptr(), NULL, 0) * 2;
|
||||||
|
if (!sz) return PyErr_SetExcFromWindowsErrWithFilenameObject(PyExc_OSError, 0, PyTuple_GET_ITEM(args, 0));
|
||||||
|
wchar_t *buf = (wchar_t*) PyMem_Malloc(sz);
|
||||||
|
if (!buf) return PyErr_NoMemory();
|
||||||
|
if (!GetLongPathNameW(path.ptr(), buf, sz-1)) {
|
||||||
|
PyMem_Free(buf);
|
||||||
|
return PyErr_SetExcFromWindowsErrWithFilenameObject(PyExc_OSError, 0, PyTuple_GET_ITEM(args, 0));
|
||||||
|
}
|
||||||
|
buf[sz-1] = 0;
|
||||||
|
PyObject *ans = PyUnicode_FromWideChar(buf, -1);
|
||||||
|
PyMem_Free(buf);
|
||||||
|
return ans;
|
||||||
|
}
|
||||||
|
|
||||||
// Boilerplate {{{
|
// Boilerplate {{{
|
||||||
static const char winutil_doc[] = "Defines utility methods to interface with windows.";
|
static const char winutil_doc[] = "Defines utility methods to interface with windows.";
|
||||||
|
|
||||||
@ -626,6 +644,7 @@ static PyMethodDef winutil_methods[] = {
|
|||||||
M(get_dll_directory, METH_NOARGS),
|
M(get_dll_directory, METH_NOARGS),
|
||||||
M(create_named_pipe, METH_VARARGS),
|
M(create_named_pipe, METH_VARARGS),
|
||||||
M(set_handle_information, METH_VARARGS),
|
M(set_handle_information, METH_VARARGS),
|
||||||
|
M(get_long_path_name, METH_VARARGS),
|
||||||
|
|
||||||
{"special_folder_path", winutil_folder_path, METH_VARARGS,
|
{"special_folder_path", winutil_folder_path, METH_VARARGS,
|
||||||
"special_folder_path(csidl_id) -> path\n\n"
|
"special_folder_path(csidl_id) -> path\n\n"
|
||||||
|
@ -39,7 +39,7 @@ def safe_xml_fromstring(string_or_bytes, recover=True):
|
|||||||
|
|
||||||
def find_tests():
|
def find_tests():
|
||||||
import unittest, tempfile, os
|
import unittest, tempfile, os
|
||||||
from calibre.constants import iswindows
|
from calibre.constants import iswindows, plugins
|
||||||
|
|
||||||
class TestXMLParse(unittest.TestCase):
|
class TestXMLParse(unittest.TestCase):
|
||||||
|
|
||||||
@ -48,8 +48,7 @@ def find_tests():
|
|||||||
tf.write(b'external')
|
tf.write(b'external')
|
||||||
self.temp_file = os.path.abspath(tf.name)
|
self.temp_file = os.path.abspath(tf.name)
|
||||||
if iswindows:
|
if iswindows:
|
||||||
import win32api
|
self.temp_file = plugins['winutil'][0].get_long_path_name(self.temp_file)
|
||||||
self.temp_file = win32api.GetLongPathNameW(self.temp_file)
|
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
os.remove(self.temp_file)
|
os.remove(self.temp_file)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user