diff options
Diffstat (limited to 'PC')
-rw-r--r-- | PC/_msi.c | 18 | ||||
-rw-r--r-- | PC/clinic/msvcrtmodule.c.h | 28 | ||||
-rw-r--r-- | PC/msvcrtmodule.c | 70 | ||||
-rw-r--r-- | PC/winreg.c | 2 |
4 files changed, 69 insertions, 49 deletions
@@ -948,8 +948,8 @@ static PyTypeObject msidb_Type = { }; #define Py_NOT_PERSIST(x, flag) \ - (x != (int)(flag) && \ - x != ((int)(flag) | MSIDBOPEN_PATCHFILE)) + (x != (SIZE_T)(flag) && \ + x != ((SIZE_T)(flag) | MSIDBOPEN_PATCHFILE)) #define Py_INVALID_PERSIST(x) \ (Py_NOT_PERSIST(x, MSIDBOPEN_READONLY) && \ @@ -972,7 +972,7 @@ static PyObject* msiopendb(PyObject *obj, PyObject *args) behavior. */ if (Py_INVALID_PERSIST(persist)) return msierror(ERROR_INVALID_PARAMETER); - status = MsiOpenDatabase(path, (LPCSTR)persist, &h); + status = MsiOpenDatabase(path, (LPCSTR)(SIZE_T)persist, &h); if (status != ERROR_SUCCESS) return msierror(status); @@ -1038,12 +1038,12 @@ PyInit__msi(void) if (m == NULL) return NULL; - PyModule_AddIntConstant(m, "MSIDBOPEN_CREATEDIRECT", (long)MSIDBOPEN_CREATEDIRECT); - PyModule_AddIntConstant(m, "MSIDBOPEN_CREATE", (long)MSIDBOPEN_CREATE); - PyModule_AddIntConstant(m, "MSIDBOPEN_DIRECT", (long)MSIDBOPEN_DIRECT); - PyModule_AddIntConstant(m, "MSIDBOPEN_READONLY", (long)MSIDBOPEN_READONLY); - PyModule_AddIntConstant(m, "MSIDBOPEN_TRANSACT", (long)MSIDBOPEN_TRANSACT); - PyModule_AddIntConstant(m, "MSIDBOPEN_PATCHFILE", (long)MSIDBOPEN_PATCHFILE); + PyModule_AddIntConstant(m, "MSIDBOPEN_CREATEDIRECT", (long)(SIZE_T)MSIDBOPEN_CREATEDIRECT); + PyModule_AddIntConstant(m, "MSIDBOPEN_CREATE", (long)(SIZE_T)MSIDBOPEN_CREATE); + PyModule_AddIntConstant(m, "MSIDBOPEN_DIRECT", (long)(SIZE_T)MSIDBOPEN_DIRECT); + PyModule_AddIntConstant(m, "MSIDBOPEN_READONLY", (long)(SIZE_T)MSIDBOPEN_READONLY); + PyModule_AddIntConstant(m, "MSIDBOPEN_TRANSACT", (long)(SIZE_T)MSIDBOPEN_TRANSACT); + PyModule_AddIntConstant(m, "MSIDBOPEN_PATCHFILE", (long)(SIZE_T)MSIDBOPEN_PATCHFILE); PyModule_AddIntMacro(m, MSICOLINFO_NAMES); PyModule_AddIntMacro(m, MSICOLINFO_TYPES); diff --git a/PC/clinic/msvcrtmodule.c.h b/PC/clinic/msvcrtmodule.c.h index c6545ac..debd9b0 100644 --- a/PC/clinic/msvcrtmodule.c.h +++ b/PC/clinic/msvcrtmodule.c.h @@ -113,13 +113,13 @@ PyDoc_STRVAR(msvcrt_open_osfhandle__doc__, {"open_osfhandle", (PyCFunction)msvcrt_open_osfhandle, METH_FASTCALL, msvcrt_open_osfhandle__doc__}, static long -msvcrt_open_osfhandle_impl(PyObject *module, intptr_t handle, int flags); +msvcrt_open_osfhandle_impl(PyObject *module, void *handle, int flags); static PyObject * msvcrt_open_osfhandle(PyObject *module, PyObject **args, Py_ssize_t nargs) { PyObject *return_value = NULL; - intptr_t handle; + void *handle; int flags; long _return_value; @@ -148,7 +148,7 @@ PyDoc_STRVAR(msvcrt_get_osfhandle__doc__, #define MSVCRT_GET_OSFHANDLE_METHODDEF \ {"get_osfhandle", (PyCFunction)msvcrt_get_osfhandle, METH_O, msvcrt_get_osfhandle__doc__}, -static intptr_t +static void * msvcrt_get_osfhandle_impl(PyObject *module, int fd); static PyObject * @@ -156,16 +156,16 @@ msvcrt_get_osfhandle(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int fd; - intptr_t _return_value; + void *_return_value; if (!PyArg_Parse(arg, "i:get_osfhandle", &fd)) { goto exit; } _return_value = msvcrt_get_osfhandle_impl(module, fd); - if ((_return_value == -1) && PyErr_Occurred()) { + if ((_return_value == NULL || _return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) { goto exit; } - return_value = PyLong_FromVoidPtr((void *)_return_value); + return_value = PyLong_FromVoidPtr(_return_value); exit: return return_value; @@ -426,26 +426,26 @@ PyDoc_STRVAR(msvcrt_CrtSetReportFile__doc__, #define MSVCRT_CRTSETREPORTFILE_METHODDEF \ {"CrtSetReportFile", (PyCFunction)msvcrt_CrtSetReportFile, METH_FASTCALL, msvcrt_CrtSetReportFile__doc__}, -static long -msvcrt_CrtSetReportFile_impl(PyObject *module, int type, int file); +static void * +msvcrt_CrtSetReportFile_impl(PyObject *module, int type, void *file); static PyObject * msvcrt_CrtSetReportFile(PyObject *module, PyObject **args, Py_ssize_t nargs) { PyObject *return_value = NULL; int type; - int file; - long _return_value; + void *file; + void *_return_value; - if (!_PyArg_ParseStack(args, nargs, "ii:CrtSetReportFile", + if (!_PyArg_ParseStack(args, nargs, "i"_Py_PARSE_INTPTR":CrtSetReportFile", &type, &file)) { goto exit; } _return_value = msvcrt_CrtSetReportFile_impl(module, type, file); - if ((_return_value == -1) && PyErr_Occurred()) { + if ((_return_value == NULL || _return_value == INVALID_HANDLE_VALUE) && PyErr_Occurred()) { goto exit; } - return_value = PyLong_FromLong(_return_value); + return_value = PyLong_FromVoidPtr(_return_value); exit: return return_value; @@ -569,4 +569,4 @@ exit: #ifndef MSVCRT_SET_ERROR_MODE_METHODDEF #define MSVCRT_SET_ERROR_MODE_METHODDEF #endif /* !defined(MSVCRT_SET_ERROR_MODE_METHODDEF) */ -/*[clinic end generated code: output=8e9e57c48c4defcc input=a9049054013a1b77]*/ +/*[clinic end generated code: output=e86cf578e7f1ffd2 input=a9049054013a1b77]*/ diff --git a/PC/msvcrtmodule.c b/PC/msvcrtmodule.c index 59bf54f..fa9ad9d 100644 --- a/PC/msvcrtmodule.c +++ b/PC/msvcrtmodule.c @@ -33,14 +33,20 @@ #endif /*[python input] -class intptr_t_converter(CConverter): - type = 'intptr_t' +class HANDLE_converter(CConverter): + type = 'void *' format_unit = '"_Py_PARSE_INTPTR"' -class handle_return_converter(long_return_converter): - type = 'intptr_t' - cast = '(void *)' - conversion_fn = 'PyLong_FromVoidPtr' +class HANDLE_return_converter(CReturnConverter): + type = 'void *' + + def render(self, function, data): + self.declare(data) + self.err_occurred_if( + "_return_value == NULL || _return_value == INVALID_HANDLE_VALUE", + data) + data.return_conversion.append( + 'return_value = PyLong_FromVoidPtr(_return_value);\n') class byte_char_return_converter(CReturnConverter): type = 'int' @@ -59,7 +65,7 @@ class wchar_t_return_converter(CReturnConverter): data.return_conversion.append( 'return_value = PyUnicode_FromOrdinal(_return_value);\n') [python start generated code]*/ -/*[python end generated code: output=da39a3ee5e6b4b0d input=b59f1663dba11997]*/ +/*[python end generated code: output=da39a3ee5e6b4b0d input=2b25dc89e9e59534]*/ /*[clinic input] module msvcrt @@ -152,7 +158,7 @@ msvcrt_setmode_impl(PyObject *module, int fd, int flags) /*[clinic input] msvcrt.open_osfhandle -> long - handle: intptr_t + handle: HANDLE flags: int / @@ -164,13 +170,13 @@ to os.fdopen() to create a file object. [clinic start generated code]*/ static long -msvcrt_open_osfhandle_impl(PyObject *module, intptr_t handle, int flags) -/*[clinic end generated code: output=cede871bf939d6e3 input=cb2108bbea84514e]*/ +msvcrt_open_osfhandle_impl(PyObject *module, void *handle, int flags) +/*[clinic end generated code: output=b2fb97c4b515e4e6 input=d5db190a307cf4bb]*/ { int fd; _Py_BEGIN_SUPPRESS_IPH - fd = _open_osfhandle(handle, flags); + fd = _open_osfhandle((intptr_t)handle, flags); _Py_END_SUPPRESS_IPH if (fd == -1) PyErr_SetFromErrno(PyExc_OSError); @@ -179,7 +185,7 @@ msvcrt_open_osfhandle_impl(PyObject *module, intptr_t handle, int flags) } /*[clinic input] -msvcrt.get_osfhandle -> handle +msvcrt.get_osfhandle -> HANDLE fd: int / @@ -189,9 +195,9 @@ Return the file handle for the file descriptor fd. Raises OSError if fd is not recognized. [clinic start generated code]*/ -static intptr_t +static void * msvcrt_get_osfhandle_impl(PyObject *module, int fd) -/*[clinic end generated code: output=7ce761dd0de2b503 input=305900f4bfab76c7]*/ +/*[clinic end generated code: output=aca01dfe24637374 input=5fcfde9b17136aa2]*/ { intptr_t handle = -1; @@ -201,7 +207,7 @@ msvcrt_get_osfhandle_impl(PyObject *module, int fd) if (handle == -1) PyErr_SetFromErrno(PyExc_OSError); - return handle; + return (HANDLE)handle; } /* Console I/O */ @@ -389,10 +395,10 @@ msvcrt_ungetwch_impl(PyObject *module, int unicode_char) #ifdef _DEBUG /*[clinic input] -msvcrt.CrtSetReportFile -> long +msvcrt.CrtSetReportFile -> HANDLE type: int - file: int + file: HANDLE / Wrapper around _CrtSetReportFile. @@ -400,14 +406,14 @@ Wrapper around _CrtSetReportFile. Only available on Debug builds. [clinic start generated code]*/ -static long -msvcrt_CrtSetReportFile_impl(PyObject *module, int type, int file) -/*[clinic end generated code: output=df291c7fe032eb68 input=bb8f721a604fcc45]*/ +static void * +msvcrt_CrtSetReportFile_impl(PyObject *module, int type, void *file) +/*[clinic end generated code: output=9393e8c77088bbe9 input=290809b5f19e65b9]*/ { - long res; + HANDLE res; _Py_BEGIN_SUPPRESS_IPH - res = (long)_CrtSetReportFile(type, (_HFILE)file); + res = _CrtSetReportFile(type, file); _Py_END_SUPPRESS_IPH return res; @@ -540,6 +546,20 @@ insertint(PyObject *d, char *name, int value) } } +static void +insertptr(PyObject *d, char *name, void *value) +{ + PyObject *v = PyLong_FromVoidPtr(value); + if (v == NULL) { + /* Don't bother reporting this error */ + PyErr_Clear(); + } + else { + PyDict_SetItemString(d, name, v); + Py_DECREF(v); + } +} + PyMODINIT_FUNC PyInit_msvcrt(void) { @@ -568,9 +588,9 @@ PyInit_msvcrt(void) insertint(d, "CRTDBG_MODE_FILE", _CRTDBG_MODE_FILE); insertint(d, "CRTDBG_MODE_WNDW", _CRTDBG_MODE_WNDW); insertint(d, "CRTDBG_REPORT_MODE", _CRTDBG_REPORT_MODE); - insertint(d, "CRTDBG_FILE_STDERR", (int)_CRTDBG_FILE_STDERR); - insertint(d, "CRTDBG_FILE_STDOUT", (int)_CRTDBG_FILE_STDOUT); - insertint(d, "CRTDBG_REPORT_FILE", (int)_CRTDBG_REPORT_FILE); + insertptr(d, "CRTDBG_FILE_STDERR", _CRTDBG_FILE_STDERR); + insertptr(d, "CRTDBG_FILE_STDOUT", _CRTDBG_FILE_STDOUT); + insertptr(d, "CRTDBG_REPORT_FILE", _CRTDBG_REPORT_FILE); #endif /* constants for the crt versions */ diff --git a/PC/winreg.c b/PC/winreg.c index 5efdc5e..2d665f7 100644 --- a/PC/winreg.c +++ b/PC/winreg.c @@ -905,7 +905,7 @@ winreg_CreateKeyEx_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, HKEY retKey; long rc; - rc = RegCreateKeyExW(key, sub_key, reserved, NULL, (DWORD)NULL, + rc = RegCreateKeyExW(key, sub_key, reserved, NULL, 0, access, NULL, &retKey, NULL); if (rc != ERROR_SUCCESS) { PyErr_SetFromWindowsErrWithFunction(rc, "CreateKeyEx"); |