summaryrefslogtreecommitdiffstats
path: root/PC
diff options
context:
space:
mode:
Diffstat (limited to 'PC')
-rw-r--r--PC/_msi.c18
-rw-r--r--PC/clinic/msvcrtmodule.c.h28
-rw-r--r--PC/msvcrtmodule.c70
-rw-r--r--PC/winreg.c2
4 files changed, 69 insertions, 49 deletions
diff --git a/PC/_msi.c b/PC/_msi.c
index 9c3f9f6..c028a88 100644
--- a/PC/_msi.c
+++ b/PC/_msi.c
@@ -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");