Merge pull request #9721 from raedrizqie/pywin32-mingw-w64

pywin32: update to 301
This commit is contained in:
Christoph Reiter authored and GitHub committed 2021-10-08 10:53:52 +02:00
commit 91f2ff151e
12 files changed
+3286 -644

No files matched your search

File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
@@ -1,56 +0,0 @@
diff -aur 000/setup.py 001/setup.py
--- 000/setup.py 2015-04-09 21:00:48.725278100 -0300
+++ 001/setup.py 2015-04-09 21:02:02.350399800 -0300
@@ -100,7 +100,7 @@
# some modules need a static CRT to avoid problems caused by them having a
# manifest.
-static_crt_modules = ["winxpgui"]
+static_crt_modules = []
from distutils.dep_util import newer_group
@@ -476,6 +476,7 @@
class WinExt_win32(WinExt):
def __init__ (self, name, **kw):
+ kw["libraries"] = kw.get("libraries", "") + " oleaut32 ole32 pywintypes"
WinExt.__init__(self, name, **kw)
def get_pywin32_dir(self):
return "win32"
@@ -499,7 +500,7 @@
# itself - thus, output is "win32comext"
class WinExt_win32com(WinExt):
def __init__ (self, name, **kw):
- kw["libraries"] = kw.get("libraries", "") + " oleaut32 ole32"
+ kw["libraries"] = kw.get("libraries", "") + " oleaut32 ole32 uuid pywintypes pythoncom"
# COM extensions require later windows headers.
if not kw.get("windows_h_version"):
@@ -1500,6 +1504,10 @@
"win32/src/PySecurityObjects.h",
],
extra_compile_args = ['-DBUILD_PYWINTYPES'],
+ extra_link_args = ['-Wl,--out-implib,build/temp.mingw-%d.%d/libpywintypes.dll.a' % (
+ sys.version_info.major,
+ sys.version_info.minor,
+ )],
libraries = "advapi32 user32 ole32 oleaut32",
pch_header = "PyWinTypes.h",
)
@@ -1764,9 +1762,13 @@
%(win32com)s/include\\PyIEnumContextProps.h %(win32com)s/include\\PyIClientSecurity.h
%(win32com)s/include\\PyIServerSecurity.h
""" % dirs).split(),
- libraries = "oleaut32 ole32 user32 urlmon",
- export_symbol_file = 'com/win32com/src/PythonCOM.def',
+ libraries = "oleaut32 ole32 user32 urlmon uuid pywintypes",
+ # export_symbol_file = 'com/win32com/src/PythonCOM.def',
extra_compile_args = ['-DBUILD_PYTHONCOM'],
+ extra_link_args = ['-Wl,--out-implib,build/temp.mingw-%d.%d/libpythoncom.dll.a' % (
+ sys.version_info.major,
+ sys.version_info.minor,
+ )],
pch_header = "stdafx.h",
windows_h_version = 0x500,
base_address = dll_base_address,
-86
View File
@@ -1,86 +0,0 @@
--- 000/win32/src/win32apimodule.cpp 2019-07-18 09:05:08.224088200 +0300
+++ 001/win32/src/win32apimodule.cpp 2018-09-28 09:32:03.000000000 +0300
@@ -707,7 +707,7 @@ static PyObject *PyFindCloseChangeNotification(PyObject *self, PyObject *args)
}
// @pymethod string|win32api|FormatMessage|Returns an error message from the system error file.
-static PyObject *PyFormatMessageA(PyObject *self, PyObject *args)
+__attribute__((optimize("O0"), noinline)) static PyObject *PyFormatMessageA(PyObject *self, PyObject *args)
{
int errCode = 0;
// @pyparm int|errCode|0|The error code to return the message for, If this value is 0, then GetLastError() is
@@ -795,6 +795,7 @@ static PyObject *PyFormatMessageA(PyObject *self, PyObject *args)
{
baccessviolation = TRUE;
}
+ __except_end
PyW32_END_ALLOW_THREADS
}
@@ -819,7 +818,7 @@ cleanup:
}
// @pymethod <o PyUnicode>|win32api|FormatMessageW|Returns an error message from the system error file.
-static PyObject *PyFormatMessageW(PyObject *self, PyObject *args)
+__attribute__((optimize("O0"), noinline)) static PyObject *PyFormatMessageW(PyObject *self, PyObject *args)
{
int errCode = 0;
// Accept just the error code
@@ -902,6 +913,7 @@ static PyObject *PyFormatMessageW(PyObject *self, PyObject *args)
{
baccessviolation = TRUE;
}
+ __except_end
PyW32_END_ALLOW_THREADS
}
@@ -5555,7 +5553,7 @@ static PyObject *PyApply(PyObject *self, PyObject *args)
Py_XDECREF(exc_type);
Py_XDECREF(exc_value);
ret = NULL;
- }
+ } __except_end
return ret;
// @comm Calls the specified function in a manner similar to
// the built-in function apply(), but allows Win32 exceptions
--- 000/com/win32com/src/include/PythonCOM.h 2020-06-13 08:39:03.000000000 +0300
+++ 001/com/win32com/src/include/PythonCOM.h 2020-06-20 13:10:05.609363700 +0300
@@ -111,8 +111,6 @@
#ifdef __MINGW32__
// Special Mingw32 considerations.
#define NO_PYCOM_ENUMSTATPROPSTG
-#define __try try
-#define __except catch
#include <olectl.h>
#endif // __MINGW32__
--- 000/com/win32comext/mapi/src/mapi.i 2020-06-13 08:39:03.000000000 +0300
+++ 001/com/win32comext/mapi/src/mapi.i 2020-06-20 13:10:05.609363700 +0300
@@ -129,6 +129,7 @@
PyWin_SetAPIError("MAPIUninitialize", ERROR_INVALID_HANDLE);
rc = NULL;
}
+ __except_end
return rc;
}
--- 000/com/win32comext/shell/src/shell.cpp 2020-06-13 08:39:03.000000000 +0300
+++ 001/com/win32comext/shell/src/shell.cpp 2020-06-20 14:15:11.188333200 +0300
@@ -258,16 +258,13 @@
pidl = _ILNext(pidl);
}
}
-#if defined(__MINGW32__) || defined(MAINWIN)
- catch (...)
-#else
__except (EXCEPTION_EXECUTE_HANDLER)
-#endif
{
Py_DECREF(ret);
PyErr_SetString(PyExc_ValueError, "This string is an invalid PIDL (win32 exception unpacking)");
ret = NULL;
}
+ __except_end
if (bFreeSystemPIDL)
CoTaskMemFree((void *)pidl_free);
return ret;
@@ -0,0 +1,945 @@
diff -Naur pywin32-b301-orig/win32/src/PerfMon/PyPerfMsgs.mc pywin32-b301/win32/src/PerfMon/PyPerfMsgs.mc
--- pywin32-b301-orig/win32/src/PerfMon/PyPerfMsgs.mc 2021-05-30 16:31:38 +0800
+++ pywin32-b301/win32/src/PerfMon/PyPerfMsgs.mc 2021-10-05 19:11:03 +0800
@@ -85,4 +85,5 @@
The collection DLL and application have mismatched structure sizes. The versions are probably not in synch.
.
;//
-;#endif // _PYPERFMSG_H_
\ No newline at end of file
+;#endif // _PYPERFMSG_H_
+
diff -Naur pywin32-b301-orig/win32/src/PerfMon/perfmondata.cpp pywin32-b301/win32/src/PerfMon/perfmondata.cpp
--- pywin32-b301-orig/win32/src/PerfMon/perfmondata.cpp 2021-05-30 16:31:38 +0800
+++ pywin32-b301/win32/src/PerfMon/perfmondata.cpp 2021-10-05 19:10:41 +0800
@@ -414,7 +414,7 @@
--*/
{
HKEY hAppKey;
- TCHAR LogLevelKeyName[] = _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib");
+ TCHAR LogLevelKeyName[] = _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib");
TCHAR LogLevelValueName[] = _T("EventLogLevel");
LONG lStatus;
diff -Naur pywin32-b301-orig/win32/src/PyDEVMODE.cpp pywin32-b301/win32/src/PyDEVMODE.cpp
--- pywin32-b301-orig/win32/src/PyDEVMODE.cpp 2021-05-30 16:31:38 +0800
+++ pywin32-b301/win32/src/PyDEVMODE.cpp 2021-10-05 19:15:03 +0800
@@ -759,6 +759,7 @@
BOOL PyWinObject_AsDEVMODE(PyObject *ob, PDEVMODEW *ppDEVMODE, BOOL bNoneOk)
{
if (ob == Py_None)
+ {
if (bNoneOk) {
*ppDEVMODE = NULL;
return TRUE;
@@ -767,6 +768,7 @@
PyErr_SetString(PyExc_ValueError, "PyDEVMODE cannot be None in this context");
return FALSE;
}
+ }
if (!PyDEVMODEW_Check(ob))
return FALSE;
*ppDEVMODE = ((PyDEVMODEW *)ob)->GetDEVMODE();
diff -Naur pywin32-b301-orig/win32/src/PySecurityObjects.h pywin32-b301/win32/src/PySecurityObjects.h
--- pywin32-b301-orig/win32/src/PySecurityObjects.h 2021-05-30 16:31:38 +0800
+++ pywin32-b301/win32/src/PySecurityObjects.h 2021-10-05 19:15:23 +0800
@@ -118,7 +118,7 @@
static PyObject *GetSubAuthorityCount(PyObject *self, PyObject *args);
static PyObject *GetSubAuthority(PyObject *self, PyObject *args);
static PyObject *GetSidIdentifierAuthority(PyObject *self, PyObject *args);
- static struct PyMethodDef PySID::methods[];
+ static struct PyMethodDef methods[];
protected:
PSID m_psid;
@@ -155,7 +155,7 @@
/* Python support */
int compare(PyObject *ob);
static void deallocFunc(PyObject *ob);
- static struct PyMethodDef PyACL::methods[];
+ static struct PyMethodDef methods[];
static PyObject *Initialize(PyObject *self, PyObject *args);
static PyObject *IsValid(PyObject *self, PyObject *args);
diff -Naur pywin32-b301-orig/win32/src/PyWinTypes.h pywin32-b301/win32/src/PyWinTypes.h
--- pywin32-b301-orig/win32/src/PyWinTypes.h 2021-05-30 16:31:38 +0800
+++ pywin32-b301/win32/src/PyWinTypes.h 2021-10-05 19:17:46 +0800
@@ -28,6 +28,18 @@
#include "windows.h"
#undef WRITE_RESTRICTED // stop anyone using the wrong one accidently...
+#ifndef _MSC_VER
+#define min(x,y) (((x) < (y)) ? (x) : (y))
+#define max(x,y) (((x) > (y)) ? (x) : (y))
+
+#ifndef __try
+#define __try try
+#endif
+#ifndef __except
+#define __except(filter) catch(...)
+#endif
+#endif
+
// Helpers for our modules.
// Some macros to help the pywin32 modules co-exist in py2x and py3k.
// Creates and initializes local variables called 'module' and 'dict'.
diff -Naur pywin32-b301-orig/win32/src/PyWinTypesmodule.cpp pywin32-b301/win32/src/PyWinTypesmodule.cpp
--- pywin32-b301-orig/win32/src/PyWinTypesmodule.cpp 2021-05-30 16:31:38 +0800
+++ pywin32-b301/win32/src/PyWinTypesmodule.cpp 2021-10-05 19:18:17 +0800
@@ -1128,11 +1128,19 @@
}
// Function to format a python traceback into a character string.
+#ifdef _MSC_VER
#define GPEM_ERROR(what) \
{ \
errorMsg = "<Error getting traceback - "##what##">"; \
goto done; \
}
+#else
+#define GPEM_ERROR(what) \
+ { \
+ errorMsg = "<Error getting traceback - " what ">"; \
+ goto done; \
+ }
+#endif
PYWINTYPES_EXPORT char *GetPythonTraceback(PyObject *exc_type, PyObject *exc_value, PyObject *exc_tb)
{
// Sleep (30000); // Time enough to attach the debugger (barely)
diff -Naur pywin32-b301-orig/win32/src/PythonService.cpp pywin32-b301/win32/src/PythonService.cpp
--- pywin32-b301-orig/win32/src/PythonService.cpp 2021-05-30 16:31:38 +0800
+++ pywin32-b301/win32/src/PythonService.cpp 2021-10-05 19:16:12 +0800
@@ -881,6 +881,7 @@
ReportPythonError(E_PYS_NOT_CONTROL_HANDLER);
// else no instance - an error has already been reported.
if (!bServiceDebug)
+ {
if (g_RegisterServiceCtrlHandlerEx) {
// Use 2K/XP extended registration if available
pe->sshStatusHandle = g_RegisterServiceCtrlHandlerEx(lpszArgv[0], service_ctrl_ex, pe);
@@ -889,6 +890,7 @@
// Otherwise fall back to NT
pe->sshStatusHandle = RegisterServiceCtrlHandler(lpszArgv[0], service_ctrl);
}
+ }
}
// No instance - we can't start.
if (!instance) {
@@ -1156,7 +1158,7 @@
else {
// Some other nasty error - log it.
ReportAPIError(PYS_E_API_CANT_START_SERVICE, errCode);
- printf("Could not start the service - error %d\n", errCode);
+ printf("Could not start the service - error %ld\n", errCode);
// Just incase the error was caused by this EXE not being registered
#ifndef BUILD_FREEZE
RegisterPythonServiceExe();
@@ -1312,13 +1314,13 @@
// Register the EXE.
// This writes an entry to the Python registry and also
// to the EventLog so I can stick in messages.
-static BOOL RegisterPythonServiceExe(void)
+BOOL RegisterPythonServiceExe(void)
{
printf("Registering the Python Service Manager...\n");
const int fnameBufSize = MAX_PATH + 1;
TCHAR fnameBuf[fnameBufSize];
if (GetModuleFileName(NULL, fnameBuf, fnameBufSize) == 0) {
- printf("Registration failed due to GetModuleFileName() failing (error %d)\n", GetLastError());
+ printf("Registration failed due to GetModuleFileName() failing (error %ld)\n", GetLastError());
return FALSE;
}
assert(Py_IsInitialized());
@@ -1337,7 +1339,7 @@
wsprintf(keyBuf, _T("Software\\Python\\PythonService\\%hs"), szVerString);
DWORD rc;
if ((rc = RegSetValue(HKEY_LOCAL_MACHINE, keyBuf, REG_SZ, fnameBuf, _tcslen(fnameBuf))) != ERROR_SUCCESS) {
- printf("Registration failed due to RegSetValue() of service EXE - error %d\n", rc);
+ printf("Registration failed due to RegSetValue() of service EXE - error %ld\n", rc);
return FALSE;
}
// don't bother registering in the event log - do it when we write a log entry.
@@ -1373,7 +1375,7 @@
TCHAR cvtBuf[20];
wsprintf(cvtBuf, L"%d", errCode);
- LPTSTR lpszStrings[] = {cvtBuf, buf, L'\0'};
+ LPTSTR lpszStrings[] = {cvtBuf, buf, _T('\0')};
ReportError(msgCode, (LPCTSTR *)lpszStrings);
}
diff -Naur pywin32-b301-orig/win32/src/PythonServiceMessages.mc pywin32-b301/win32/src/PythonServiceMessages.mc
--- pywin32-b301-orig/win32/src/PythonServiceMessages.mc 2021-05-30 16:31:38 +0800
+++ pywin32-b301/win32/src/PythonServiceMessages.mc 2021-10-05 19:16:31 +0800
@@ -137,7 +137,7 @@
Severity=Error
SymbolicName=E_UNUSED2
Language=English
-
+Unknown error.
.
MessageId=0x8
diff -Naur pywin32-b301-orig/win32/src/_winxptheme.i pywin32-b301/win32/src/_winxptheme.i
--- pywin32-b301-orig/win32/src/_winxptheme.i 2021-05-30 16:31:38 +0800
+++ pywin32-b301/win32/src/_winxptheme.i 2021-10-05 19:13:49 +0800
@@ -15,7 +15,9 @@
%include "pywintypes.i"
%{
+#undef _WIN32_IE
#define _WIN32_IE 0x0501 // to enable balloon notifications in Shell_NotifyIcon
+#undef _WIN32_WINNT
#define _WIN32_WINNT 0x0501
//#define ISOLATION_AWARE_ENABLED 1
@@ -93,6 +95,8 @@
return NULL;
}
+%typedef RECT RECT;
+
%typemap(python,ignore) RECT *OUTPUT(RECT temp)
{
$target = &temp;
diff -Naur pywin32-b301-orig/win32/src/odbc.cpp pywin32-b301/win32/src/odbc.cpp
--- pywin32-b301-orig/win32/src/odbc.cpp 2021-05-30 16:31:38 +0800
+++ pywin32-b301/win32/src/odbc.cpp 2021-10-05 19:14:45 +0800
@@ -93,8 +93,8 @@
static cursorObject *cursor(PyObject *o) { return (cursorObject *)o; }
static void cursorDealloc(PyObject *self);
-PyMethodDef cursorMethods[];
-PyMemberDef cursorMembers[];
+extern PyMethodDef cursorMethods[];
+extern PyMemberDef cursorMembers[];
static PyTypeObject Cursor_Type = {
PYWIN_OBJECT_HEAD "odbccur", /*tp_name */
@@ -137,8 +137,8 @@
};
static void connectionDealloc(PyObject *self);
-PyMethodDef connectionMethods[];
-PyMemberDef connectionMembers[];
+extern PyMethodDef connectionMethods[];
+extern PyMemberDef connectionMembers[];
static PyTypeObject Connection_Type = {
PYWIN_OBJECT_HEAD "odbcconn", /*tp_name */
sizeof(connectionObject), /*tp_basicsize */
@@ -379,7 +379,7 @@
}
/* @object connection|An object representing an ODBC connection */
-static struct PyMethodDef connectionMethods[] = {
+struct PyMethodDef connectionMethods[] = {
{"setautocommit", odbcSetAutoCommit, 1}, /* @pymeth setautocommit|Sets the autocommit mode. */
{"commit", odbcCommit, 1}, /* @pymeth commit|Commits a transaction. */
{"rollback", odbcRollback, 1}, /* @pymeth rollback|Rollsback a transaction. */
@@ -387,7 +387,7 @@
{"close", odbcClose, 1}, /* @pymeth close|Closes the connection. */
{0, 0}};
-static PyMemberDef connectionMembers[] = {{"error", T_OBJECT, offsetof(connectionObject, connectionError), READONLY},
+struct PyMemberDef connectionMembers[] = {{"error", T_OBJECT, offsetof(connectionObject, connectionError), READONLY},
{NULL}};
static void connectionDealloc(PyObject *self)
@@ -1422,7 +1422,7 @@
}
/* @object cursor|An object representing an ODBC cursor. */
-static PyMethodDef cursorMethods[] = {
+struct PyMethodDef cursorMethods[] = {
{"close", odbcCurClose, 1}, /* @pymeth close|Closes the cursor */
{"execute", odbcCurExec, 1}, /* @pymeth execute|Execute some SQL */
{"fetchone", odbcCurFetchOne, 1}, /* @pymeth fetchone|Fetch one row of data */
@@ -1432,7 +1432,7 @@
{"setoutputsize", odbcCurSetOutputSize, 1}, /* @pymeth setoutputsize| */
{0, 0}};
-static PyMemberDef cursorMembers[] = {{"description", T_OBJECT, offsetof(cursorObject, description), READONLY},
+struct PyMemberDef cursorMembers[] = {{"description", T_OBJECT, offsetof(cursorObject, description), READONLY},
{"error", T_OBJECT, offsetof(cursorObject, cursorError), READONLY},
{NULL}};
diff -Naur pywin32-b301-orig/win32/src/win32api_display.cpp pywin32-b301/win32/src/win32api_display.cpp
--- pywin32-b301-orig/win32/src/win32api_display.cpp 2021-05-30 16:31:38 +0800
+++ pywin32-b301/win32/src/win32api_display.cpp 2021-10-05 19:18:33 +0800
@@ -134,28 +134,36 @@
return NULL;
if (strcmp(name, "DeviceName") == 0)
+ {
if (pdisplay_device->DeviceName[31] == 0) // in case DeviceName fills space and has no trailing NULL
return PyWinObject_FromTCHAR(pdisplay_device->DeviceName);
else
return PyWinObject_FromTCHAR(pdisplay_device->DeviceName, 32);
+ }
if (strcmp(name, "DeviceString") == 0)
+ {
if (pdisplay_device->DeviceString[127] == 0) // in case DeviceString fills space and has no trailing NULL
return PyWinObject_FromTCHAR(pdisplay_device->DeviceString);
else
return PyWinObject_FromTCHAR(pdisplay_device->DeviceString, 128);
+ }
if (strcmp(name, "DeviceID") == 0)
+ {
if (pdisplay_device->DeviceID[127] == 0) // in case DeviceID fills space and has no trailing NULL
return PyWinObject_FromTCHAR(pdisplay_device->DeviceID);
else
return PyWinObject_FromTCHAR(pdisplay_device->DeviceID, 128);
+ }
if (strcmp(name, "DeviceKey") == 0)
+ {
if (pdisplay_device->DeviceKey[127] == 0) // in case DeviceKey fills space and has no trailing NULL
return PyWinObject_FromTCHAR(pdisplay_device->DeviceKey);
else
return PyWinObject_FromTCHAR(pdisplay_device->DeviceKey, 128);
+ }
return PyObject_GenericGetAttr(self, obname);
}
@@ -243,6 +251,7 @@
BOOL PyWinObject_AsDISPLAY_DEVICE(PyObject *ob, PDISPLAY_DEVICE *ppDISPLAY_DEVICE, BOOL bNoneOk)
{
if (ob == Py_None)
+ {
if (bNoneOk) {
*ppDISPLAY_DEVICE = NULL;
return TRUE;
@@ -251,6 +260,7 @@
PyErr_SetString(PyExc_ValueError, "PyDISPLAY_DEVICE cannot be None in this context");
return FALSE;
}
+ }
if (!PyDISPLAY_DEVICE_Check(ob))
return FALSE;
*ppDISPLAY_DEVICE = ((PyDISPLAY_DEVICE *)ob)->GetDISPLAY_DEVICE();
diff -Naur pywin32-b301-orig/win32/src/win32apimodule.cpp pywin32-b301/win32/src/win32apimodule.cpp
--- pywin32-b301-orig/win32/src/win32apimodule.cpp 2021-05-30 16:31:38 +0800
+++ pywin32-b301/win32/src/win32apimodule.cpp 2021-10-05 19:19:01 +0800
@@ -5592,8 +5592,8 @@
}
PyThreadState *stateSave = PyThreadState_Swap(NULL);
PyThreadState_Swap(stateSave);
- _try { ret = PyObject_CallObject(obFunc, obArgs); }
- _except(PyApplyExceptionFilter(GetExceptionCode(), GetExceptionInformation(), obHandler, &exc_type, &exc_value))
+ __try { ret = PyObject_CallObject(obFunc, obArgs); }
+ __except(PyApplyExceptionFilter(GetExceptionCode(), GetExceptionInformation(), obHandler, &exc_type, &exc_value))
{
// Do my best to restore the thread state to a sane spot.
PyThreadState *stateCur = PyThreadState_Swap(NULL);
diff -Naur pywin32-b301-orig/win32/src/win32consolemodule.cpp pywin32-b301/win32/src/win32consolemodule.cpp
--- pywin32-b301-orig/win32/src/win32consolemodule.cpp 2021-05-30 16:31:38 +0800
+++ pywin32-b301/win32/src/win32consolemodule.cpp 2021-10-05 19:19:23 +0800
@@ -1,4 +1,5 @@
// @doc
+#undef _WIN32_WINNT
#define _WIN32_WINNT 0x501
#include "PyWinTypes.h"
#include "PyWinObjects.h"
@@ -1296,6 +1297,7 @@
PyWinObject_AsSMALL_RECT(obcliprect, &pcliprect, TRUE) &&
PyWinObject_AsCOORD(obdestcoord, &pdestcoord, FALSE) &&
PyWinObject_AsSingleWCHAR(obfillchar, &char_info.Char.UnicodeChar))
+ {
if (!ScrollConsoleScreenBuffer(((PyConsoleScreenBuffer *)self)->m_handle, pscrollrect, pcliprect, *pdestcoord,
&char_info))
PyWin_SetAPIError("ScrollConsoleScreenBuffer");
@@ -1303,6 +1305,7 @@
Py_INCREF(Py_None);
return Py_None;
}
+ }
return NULL;
}
@@ -1814,12 +1817,14 @@
CHECK_PFN(AddConsoleAlias);
if (PyWinObject_AsWCHAR(obsource, &source, FALSE) && PyWinObject_AsWCHAR(obtarget, &target, TRUE) &&
PyWinObject_AsWCHAR(obexename, &exename, FALSE))
+ {
if (!(*pfnAddConsoleAlias)(source, target, exename))
PyWin_SetAPIError("AddConsoleAlias");
else {
Py_INCREF(Py_None);
ret = Py_None;
}
+ }
PyWinObject_FreeWCHAR(source);
PyWinObject_FreeWCHAR(target);
PyWinObject_FreeWCHAR(exename);
diff -Naur pywin32-b301-orig/win32/src/win32credmodule.cpp pywin32-b301/win32/src/win32credmodule.cpp
--- pywin32-b301-orig/win32/src/win32credmodule.cpp 2021-05-30 16:31:38 +0800
+++ pywin32-b301/win32/src/win32credmodule.cpp 2021-10-05 19:21:29 +0800
@@ -1,4 +1,5 @@
// @doc
+#undef _WIN32_WINNT
#define _WIN32_WINNT 0x501 // Credentials functions only available on WinXP
#include "PyWinTypes.h"
#include "PyWinObjects.h"
diff -Naur pywin32-b301-orig/win32/src/win32crypt/win32cryptmodule.cpp pywin32-b301/win32/src/win32crypt/win32cryptmodule.cpp
--- pywin32-b301-orig/win32/src/win32crypt/win32cryptmodule.cpp 2021-05-30 16:31:38 +0800
+++ pywin32-b301/win32/src/win32crypt/win32cryptmodule.cpp 2021-10-05 19:12:21 +0800
@@ -1,4 +1,5 @@
// @doc
+#undef _WIN32_WINNT
#define _WIN32_WINNT 0x502
#include "win32crypt.h"
@@ -486,7 +487,7 @@
CertEnumSystemStore(dwFlags, pvSystemStoreLocationPara, ret, CertEnumSystemStoreCallback);
Py_END_ALLOW_THREADS
- if (!bsuccess)
+ if (!bsuccess)
{
Py_DECREF(ret);
ret = NULL;
@@ -582,6 +583,7 @@
pvPara = (void *)&cssrp;
}
else {
+#ifdef _MSC_VER
switch ((ULONG_PTR)StoreProvider) {
case CERT_STORE_PROV_PHYSICAL:
case CERT_STORE_PROV_FILENAME:
@@ -623,6 +625,41 @@
return NULL;
}
}
+#else
+ if (StoreProvider == CERT_STORE_PROV_PHYSICAL)
+ if (StoreProvider == CERT_STORE_PROV_FILENAME)
+ if (StoreProvider == CERT_STORE_PROV_SYSTEM)
+ if (StoreProvider == CERT_STORE_PROV_SYSTEM_REGISTRY)
+ if (StoreProvider == CERT_STORE_PROV_LDAP) {
+ if (!PyWinObject_AsWCHAR(obpvPara, (WCHAR **)&pvPara))
+ return NULL;
+ free_wchar = TRUE;
+ }
+ if (StoreProvider == CERT_STORE_PROV_REG) {
+ if (!PyWinObject_AsHKEY(obpvPara, (HKEY *)&pvPara))
+ return NULL;
+ }
+ if (StoreProvider == CERT_STORE_PROV_FILE) {
+ if (!PyWinObject_AsHANDLE(obpvPara, (HANDLE *)&pvPara))
+ return NULL;
+ }
+ if (StoreProvider == CERT_STORE_PROV_SERIALIZED)
+ if (StoreProvider == CERT_STORE_PROV_PKCS7) {
+ if (!pybuf.init(obpvPara))
+ return NULL;
+ crypt_data_blob.pbData = (BYTE*)pybuf.ptr();
+ crypt_data_blob.cbData = pybuf.len();
+ pvPara = (void *)&crypt_data_blob;
+ }
+ if (StoreProvider == CERT_STORE_PROV_MEMORY) {
+ // pvPara is not used, warn if something passed in
+ if (obpvPara != Py_None)
+ PyErr_Warn(PyExc_RuntimeWarning, "Para ignored for CERT_STORE_PROV_MEMORY");
+ }
+
+ PyErr_SetString(PyExc_NotImplementedError, "Specified store provider type not supported");
+ return NULL;
+#endif
}
Py_BEGIN_ALLOW_THREADS hcertstore = CertOpenStore(StoreProvider, dwEncodingType, hcryptprov, dwFlags, pvPara);
diff -Naur pywin32-b301-orig/win32/src/win32dynamicdialog.cpp pywin32-b301/win32/src/win32dynamicdialog.cpp
--- pywin32-b301-orig/win32/src/win32dynamicdialog.cpp 2021-05-30 16:31:38 +0800
+++ pywin32-b301/win32/src/win32dynamicdialog.cpp 2021-10-05 19:21:51 +0800
@@ -54,7 +54,7 @@
#endif
#include "win32dynamicdialog.h"
-static void DwordAlign(PCHAR *ptr)
+void DwordAlign(PCHAR *ptr)
{
size_t offset = ((ULONG_PTR)*ptr) & 0x03;
if (offset > 0) {
diff -Naur pywin32-b301-orig/win32/src/win32event.i pywin32-b301/win32/src/win32event.i
--- pywin32-b301-orig/win32/src/win32event.i 2021-05-30 16:31:38 +0800
+++ pywin32-b301/win32/src/win32event.i 2021-10-05 19:22:21 +0800
@@ -5,13 +5,14 @@
%{
//#define UNICODE
+#undef _WIN32_WINNT
#define _WIN32_WINNT 0x0501
%}
%include "typemaps.i"
%include "pywin32.i"
-%typedef void *NULL_ONLY
+%typedef void *NULL_ONLY;
%typemap(python,in) NULL_ONLY {
if ($source != Py_None) {
@@ -23,6 +24,7 @@
// only seem able to make this work with an incorrect level of
// indirection, and fixing it up inline with a temp.
+%typedef PTIMERAPCROUTINE PTIMERAPCROUTINE;
%typemap(python,in) PTIMERAPCROUTINE *(PTIMERAPCROUTINE temp) {
if ($source != Py_None) {
PyErr_SetString(PyExc_TypeError, "This param must be None");
@@ -93,7 +95,6 @@
BOOLAPI CancelWaitableTimer(PyHANDLE handle);
#endif
-#end
// @pyswig <o PyHANDLE>|CreateEvent|Creates a waitable event
// @rdesc The result is a handle to the created object
@@ -387,7 +388,7 @@
BOOL bAlertable // @pyparm bool|bAlertable||alertable wait flag.
);
#endif
-%typedef DWORD DWORD_WAITAPI
+%typedef DWORD DWORD_WAITAPI;
%typemap(python,except) DWORD_WAITAPI {
Py_BEGIN_ALLOW_THREADS
$function
diff -Naur pywin32-b301-orig/win32/src/win32evtlog.i pywin32-b301/win32/src/win32evtlog.i
--- pywin32-b301-orig/win32/src/win32evtlog.i 2021-05-30 16:31:38 +0800
+++ pywin32-b301/win32/src/win32evtlog.i 2021-10-05 19:22:37 +0800
@@ -4,9 +4,18 @@
// <nl>The Evt* functions are only available on Vista and later. Attempting to call
// them on XP will result in the process exiting, rather than a python exception.
+%{
+#ifndef _MSC_VER
+#undef _WIN32_WINNT
+#define _WIN32_WINNT 0x0600 // for EVT_SUBSCRIBE_NOTIFY_ACTION
+#endif
+%}
+
%include "typemaps.i"
%include "pywin32.i"
+%typedef HANDLE EVT_HANDLE;
+
%{
#include <structmember.h>
@@ -15,6 +24,12 @@
#include "PyWinObjects.h"
#include "WinEvt.h"
+#ifndef _MSC_VER
+// http://msdn.microsoft.com/en-us/library/windows/desktop/aa385781%28v=vs.85%29.aspx
+#define EVT_VARIANT_TYPE_ARRAY 128
+#define EVT_VARIANT_TYPE_MASK 0x7F
+#endif
+
// @object PyEVTLOG_HANDLE|Object representing a handle to the windows event log.
// Identical to <o PyHANDLE>, but calls CloseEventLog() on destruction
class PyEVTLOG_HANDLE: public PyHANDLE
diff -Naur pywin32-b301-orig/win32/src/win32file.i pywin32-b301/win32/src/win32file.i
--- pywin32-b301-orig/win32/src/win32file.i 2021-05-30 16:31:38 +0800
+++ pywin32-b301/win32/src/win32file.i 2021-10-05 19:23:09 +0800
@@ -73,6 +73,9 @@
%include "typemaps.i"
%include "pywin32.i"
+%typedef DCB DCB;
+%typedef COMMTIMEOUTS COMMTIMEOUTS;
+
%{
#include "datetime.h" // python's datetime header.
@@ -753,8 +756,8 @@
&obHandle, &obCreationTime, &obLastAccessTime, &obLastWriteTime, &UTCTimes))
return NULL;
- if (!PyWinObject_AsHANDLE(obHandle, &hHandle))
- return NULL;
+ if (!PyWinObject_AsHANDLE(obHandle, &hHandle))
+ return NULL;
if (obCreationTime != Py_None){
if (!PyWinObject_AsFILETIME(obCreationTime, &FileTime))
return NULL;
diff -Naur pywin32-b301-orig/win32/src/win32file_comm.cpp pywin32-b301/win32/src/win32file_comm.cpp
--- pywin32-b301-orig/win32/src/win32file_comm.cpp 2021-05-30 16:31:38 +0800
+++ pywin32-b301/win32/src/win32file_comm.cpp 2021-10-05 19:24:16 +0800
@@ -163,7 +163,7 @@
PyDCB::~PyDCB(void) {}
#define GET_BITFIELD_ENTRY(bitfield_name) \
- else if (strcmp(name, #bitfield_name) == 0) { return PyInt_FromLong(pydcb->m_DCB.##bitfield_name); }
+ else if (strcmp(name, #bitfield_name) == 0) { return PyInt_FromLong(pydcb->m_DCB.bitfield_name); }
PyObject *PyDCB::getattro(PyObject *self, PyObject *obname)
{
@@ -198,7 +198,7 @@
PyErr_Format(PyExc_TypeError, szNeedIntAttr, #bitfield_name); \
return -1; \
} \
- pydcb->m_DCB.##bitfield_name = PyInt_AsLong(v); \
+ pydcb->m_DCB.bitfield_name = PyInt_AsLong(v); \
return 0; \
}
@@ -362,7 +362,7 @@
#undef GET_BITFIELD_ENTRY
#define GET_BITFIELD_ENTRY(bitfield_name) \
- else if (strcmp(name, #bitfield_name) == 0) { return PyInt_FromLong(pyCOMSTAT->m_COMSTAT.##bitfield_name); }
+ else if (strcmp(name, #bitfield_name) == 0) { return PyInt_FromLong(pyCOMSTAT->m_COMSTAT.bitfield_name); }
PyObject *PyCOMSTAT::getattro(PyObject *self, PyObject *obname)
{
@@ -391,7 +391,7 @@
PyErr_Format(PyExc_TypeError, szNeedIntAttr, #bitfield_name); \
return -1; \
} \
- pyCOMSTAT->m_COMSTAT.##bitfield_name = PyInt_AsLong(v); \
+ pyCOMSTAT->m_COMSTAT.bitfield_name = PyInt_AsLong(v); \
return 0; \
}
diff -Naur pywin32-b301-orig/win32/src/win32gui.i pywin32-b301/win32/src/win32gui.i
--- pywin32-b301-orig/win32/src/win32gui.i 2021-05-30 16:31:38 +0800
+++ pywin32-b301/win32/src/win32gui.i 2021-10-05 19:25:22 +0800
@@ -14,7 +14,9 @@
%{
// #define UNICODE
// #define _UNICODE // for CRT string functions
+#undef _WIN32_IE
#define _WIN32_IE 0x0501 // to enable balloon notifications in Shell_NotifyIcon
+#undef _WIN32_WINNT
#define _WIN32_WINNT 0x0501
#ifdef WINXPGUI
// This changes the entire world for XP!
@@ -25,6 +27,17 @@
%include "typemaps.i"
%include "pywintypes.i"
+%typedef POINT POINT;
+%typedef RECT RECT;
+%typedef MSG MSG;
+%typedef TRACKMOUSEEVENT TRACKMOUSEEVENT;
+%typedef PAINTSTRUCT PAINTSTRUCT;
+%typedef ICONINFO ICONINFO;
+%typedef LOGFONT LOGFONT;
+%typedef MENUITEMINFO MENUITEMINFO;
+%typedef NOTIFYICONDATA NOTIFYICONDATA;
+%typedef OPENFILENAME OPENFILENAME;
+
%{
#undef PyHANDLE
#include "pywinobjects.h"
@@ -373,14 +386,14 @@
}
%apply COLORREF {long};
-typedef long COLORREF
+typedef long COLORREF;
typedef HANDLE WPARAM;
typedef HANDLE LPARAM;
typedef HANDLE LRESULT;
typedef int UINT;
-%typedef void *NULL_ONLY
+%typedef void *NULL_ONLY;
%typemap(python,in) NULL_ONLY {
if ($source != Py_None) {
@@ -1766,9 +1779,9 @@
%native (PyGetBufferAddressAndLen) PyGetBufferAddressAndLen;
-%typedef TCHAR *STRING_OR_ATOM_CW
-%typedef TCHAR *RESOURCE_ID
-%typedef TCHAR *RESOURCE_ID_NULLOK
+%typedef TCHAR *STRING_OR_ATOM_CW;
+%typedef TCHAR *RESOURCE_ID;
+%typedef TCHAR *RESOURCE_ID_NULLOK;
%typemap(python,arginit) STRING_OR_ATOM_CW, RESOURCE_ID, RESOURCE_ID_NULLOK{
$target=NULL;
@@ -7587,13 +7600,13 @@
"structure says it has %d bytes, but %d was provided",
(int)struct_bytes, (int)pybuf.len());
// @pyseeapi RegisterDeviceNotification
- HDEVNOTIFY not;
+ HDEVNOTIFY notify;
Py_BEGIN_ALLOW_THREADS
- not = RegisterDeviceNotification(handle, pybuf.ptr(), flags);
+ notify = RegisterDeviceNotification(handle, pybuf.ptr(), flags);
Py_END_ALLOW_THREADS
- if (not == NULL)
+ if (notify == NULL)
return PyWin_SetAPIError("RegisterDeviceNotification");
- return PyWinObject_FromHDEVNOTIFY(not);
+ return PyWinObject_FromHDEVNOTIFY(notify);
}
%}
%native(RegisterDeviceNotification) PyRegisterDeviceNotification;
diff -Naur pywin32-b301-orig/win32/src/win32inet.i pywin32-b301/win32/src/win32inet.i
--- pywin32-b301-orig/win32/src/win32inet.i 2021-05-30 16:31:38 +0800
+++ pywin32-b301/win32/src/win32inet.i 2021-10-05 19:25:44 +0800
@@ -16,6 +16,13 @@
#undef PyHANDLE // undef earlier define, so we are back to the class.
#include "pywinobjects.h"
+#ifndef _MSC_VER
+#define INTERNET_OPTION_HTTP_DECODING 65
+#define INTERNET_OPTION_CODEPAGE_PATH 100
+#define INTERNET_OPTION_CODEPAGE_EXTRA 101
+#define INTERNET_OPTION_IDN 102
+#endif
+
void CALLBACK PyHINTERNET_StatusChange(
HINTERNET hInternet,
DWORD_PTR dwContext,
diff -Naur pywin32-b301-orig/win32/src/win32net/win32netmisc.cpp pywin32-b301/win32/src/win32net/win32netmisc.cpp
--- pywin32-b301-orig/win32/src/win32net/win32netmisc.cpp 2021-05-30 16:31:38 +0800
+++ pywin32-b301/win32/src/win32net/win32netmisc.cpp 2021-10-05 19:12:53 +0800
@@ -1417,7 +1417,8 @@
#if WINVER >= 0x0500
-extern "C" NetValidateNamefunc pfnNetValidateName = NULL;
+extern "C" NetValidateNamefunc pfnNetValidateName;
+NetValidateNamefunc pfnNetValidateName = NULL;
// @pymethod |win32net|NetValidateName|Checks that domain/machine/workgroup name is valid for given context
// @rdesc Returns none if valid, exception if not
// @comm If Account and Password aren't passed, current logon credentials are used
@@ -1460,8 +1461,10 @@
return ret;
}
-extern "C" NetValidatePasswordPolicyfunc pfnNetValidatePasswordPolicy = NULL;
-extern "C" NetValidatePasswordPolicyFreefunc pfnNetValidatePasswordPolicyFree = NULL;
+extern "C" NetValidatePasswordPolicyfunc pfnNetValidatePasswordPolicy;
+NetValidatePasswordPolicyfunc pfnNetValidatePasswordPolicy = NULL;
+extern "C" NetValidatePasswordPolicyFreefunc pfnNetValidatePasswordPolicyFree;
+NetValidatePasswordPolicyFreefunc pfnNetValidatePasswordPolicyFree = NULL;
static void PyObject_CleanupAUTH_INPUT(NET_VALIDATE_AUTHENTICATION_INPUT_ARG *p)
{
diff -Naur pywin32-b301-orig/win32/src/win32pdhmodule.cpp pywin32-b301/win32/src/win32pdhmodule.cpp
--- pywin32-b301-orig/win32/src/win32pdhmodule.cpp 2021-05-30 16:31:38 +0800
+++ pywin32-b301/win32/src/win32pdhmodule.cpp 2021-10-05 19:26:15 +0800
@@ -1003,7 +1003,7 @@
{ \
if (i < seqLen) { \
PyObject *subItem = PyTuple_GET_ITEM(flags_tuple, i); \
- myCfg.cfg.##r = PyObject_IsTrue(subItem); \
+ myCfg.cfg.r = PyObject_IsTrue(subItem); \
} \
}
diff -Naur pywin32-b301-orig/win32/src/win32print/win32print.cpp pywin32-b301/win32/src/win32print/win32print.cpp
--- pywin32-b301-orig/win32/src/win32print/win32print.cpp 2021-05-30 16:31:38 +0800
+++ pywin32-b301/win32/src/win32print/win32print.cpp 2021-10-05 19:13:26 +0800
@@ -335,6 +335,7 @@
*pbuf = NULL;
if (level == 0)
+ {
if (obinfo == Py_None)
return TRUE;
else {
@@ -346,6 +347,7 @@
}
return TRUE;
}
+ }
if (!PyDict_Check(obinfo)) {
PyErr_Format(PyExc_TypeError, "PRINTER_INFO_%d must be a dictionary", level);
@@ -2454,12 +2456,14 @@
if (PyArg_ParseTuple(args, "OOO:DeletePrinterDriver", &observername, &obenvironment, &obdrivername) &&
PyWinObject_AsWCHAR(observername, &servername, TRUE) &&
PyWinObject_AsWCHAR(obenvironment, &environment, TRUE) && PyWinObject_AsWCHAR(obdrivername, &drivername, FALSE))
+ {
if (DeletePrinterDriverW(servername, environment, drivername)) {
Py_INCREF(Py_None);
ret = Py_None;
}
else
PyWin_SetAPIError("DeletePrinterDriver");
+ }
if (servername != NULL)
PyWinObject_FreeWCHAR(servername);
@@ -2489,12 +2493,14 @@
&versionflag) &&
PyWinObject_AsWCHAR(observername, &servername, TRUE) &&
PyWinObject_AsWCHAR(obenvironment, &environment, TRUE) && PyWinObject_AsWCHAR(obdrivername, &drivername, FALSE))
+ {
if ((*pfnDeletePrinterDriverEx)(servername, environment, drivername, deleteflag, versionflag)) {
Py_INCREF(Py_None);
ret = Py_None;
}
else
PyWin_SetAPIError("DeletePrinterDriverEx");
+ }
if (servername != NULL)
PyWinObject_FreeWCHAR(servername);
diff -Naur pywin32-b301-orig/win32/src/win32process.i pywin32-b301/win32/src/win32process.i
--- pywin32-b301-orig/win32/src/win32process.i 2021-05-30 16:31:38 +0800
+++ pywin32-b301/win32/src/win32process.i 2021-10-05 19:26:42 +0800
@@ -1621,6 +1621,7 @@
$target = PyWinLong_FromVoidPtr($source);
}
+%typedef ULONG_PTR ULONG_PTR;
// @pyswig long|VirtualAllocEx|
LONG_VOIDPTR VirtualAllocEx(
diff -Naur pywin32-b301-orig/win32/src/win32security.i pywin32-b301/win32/src/win32security.i
--- pywin32-b301-orig/win32/src/win32security.i 2021-05-30 16:31:38 +0800
+++ pywin32-b301/win32/src/win32security.i 2021-10-05 19:27:41 +0800
@@ -5,6 +5,7 @@
%module win32security // An interface to the win32 security API's
%{
+#undef _WIN32_WINNT
#define _WIN32_WINNT 0x0600 // Vista!
%}
@@ -76,7 +77,7 @@
typedef PSecurityFunctionTableW (SEC_ENTRY *InitSecurityInterfacefunc)(void);
static InitSecurityInterfacefunc pfnInitSecurityInterface=NULL;
-extern PSecurityFunctionTableW psecurityfunctiontable=NULL;
+PSecurityFunctionTableW psecurityfunctiontable=NULL;
typedef BOOL (WINAPI *TranslateNamefunc)(LPCTSTR, EXTENDED_NAME_FORMAT, EXTENDED_NAME_FORMAT, LPTSTR, PULONG);
static TranslateNamefunc pfnTranslateName=NULL;
@@ -89,20 +90,20 @@
// function pointers used in win32security_sspi.cpp and win32security_ds.cpp
-extern DsBindfunc pfnDsBind=NULL;
-extern DsUnBindfunc pfnDsUnBind=NULL;
-extern DsGetSpnfunc pfnDsGetSpn=NULL;
-extern DsWriteAccountSpnfunc pfnDsWriteAccountSpn=NULL;
-extern DsFreeSpnArrayfunc pfnDsFreeSpnArray=NULL;
-extern DsGetDcNamefunc pfnDsGetDcName=NULL;
-extern DsCrackNamesfunc pfnDsCrackNames=NULL;
-extern DsListInfoForServerfunc pfnDsListInfoForServer=NULL;
-extern DsListServersForDomainInSitefunc pfnDsListServersForDomainInSite=NULL;
-extern DsListServersInSitefunc pfnDsListServersInSite=NULL;
-extern DsListSitesfunc pfnDsListSites=NULL;
-extern DsListDomainsInSitefunc pfnDsListDomainsInSite=NULL;
-extern DsListRolesfunc pfnDsListRoles=NULL;
-extern DsFreeNameResultfunc pfnDsFreeNameResult=NULL;
+DsBindfunc pfnDsBind=NULL;
+DsUnBindfunc pfnDsUnBind=NULL;
+DsGetSpnfunc pfnDsGetSpn=NULL;
+DsWriteAccountSpnfunc pfnDsWriteAccountSpn=NULL;
+DsFreeSpnArrayfunc pfnDsFreeSpnArray=NULL;
+DsGetDcNamefunc pfnDsGetDcName=NULL;
+DsCrackNamesfunc pfnDsCrackNames=NULL;
+DsListInfoForServerfunc pfnDsListInfoForServer=NULL;
+DsListServersForDomainInSitefunc pfnDsListServersForDomainInSite=NULL;
+DsListServersInSitefunc pfnDsListServersInSite=NULL;
+DsListSitesfunc pfnDsListSites=NULL;
+DsListDomainsInSitefunc pfnDsListDomainsInSite=NULL;
+DsListRolesfunc pfnDsListRoles=NULL;
+DsFreeNameResultfunc pfnDsFreeNameResult=NULL;
static HMODULE advapi32_dll=NULL;
static HMODULE secur32_dll =NULL;
@@ -114,8 +115,8 @@
HMODULE loadmodule(WCHAR *dllname)
{
HMODULE hmodule = GetModuleHandle(dllname);
- if (hmodule==NULL)
- hmodule = LoadLibrary(dllname);
+ if (hmodule==NULL)
+ hmodule = LoadLibrary(dllname);
return hmodule;
}
@@ -3339,12 +3340,14 @@
if (PyWinObject_AsHANDLE(obExistingTokenHandle, &ExistingTokenHandle))
if (PyWinObject_AsSID_AND_ATTRIBUTESArray(obSidsToDisable, &SidsToDisable, &DisableSidCount))
if (PyWinObject_AsSID_AND_ATTRIBUTESArray(obSidsToRestrict, &SidsToRestrict, &RestrictedSidCount))
- if (PyWinObject_AsLUID_AND_ATTRIBUTESArray(obPrivilegesToDelete, &PrivilegesToDelete, &DeletePrivilegeCount))
+ if (PyWinObject_AsLUID_AND_ATTRIBUTESArray(obPrivilegesToDelete, &PrivilegesToDelete, &DeletePrivilegeCount)){
if ((*pfnCreateRestrictedToken)(ExistingTokenHandle,Flags,DisableSidCount,SidsToDisable,
- DeletePrivilegeCount,PrivilegesToDelete,RestrictedSidCount,SidsToRestrict,&NewTokenHandle))
+ DeletePrivilegeCount,PrivilegesToDelete,RestrictedSidCount,SidsToRestrict,&NewTokenHandle)){
ret=PyWinObject_FromHANDLE(NewTokenHandle);
- else
+ }else{
PyWin_SetAPIError("CreateRestrictedToken",GetLastError());
+ }
+ }
if (SidsToDisable!=NULL)
free(SidsToDisable);
if (PrivilegesToDelete!=NULL)
diff -Naur pywin32-b301-orig/win32/src/win32service.i pywin32-b301/win32/src/win32service.i
--- pywin32-b301-orig/win32/src/win32service.i 2021-05-30 16:31:38 +0800
+++ pywin32-b301/win32/src/win32service.i 2021-10-05 19:28:03 +0800
@@ -3,9 +3,18 @@
%module win32service // An interface to the Windows NT Service API
+%{
+#ifndef _MSC_VER
+#undef _WIN32_WINNT
+#define _WIN32_WINNT 0x0600 // for SERVICE_*
+#endif
+%}
+
%include "typemaps.i"
%include "pywin32.i"
+%typedef SERVICE_STATUS SERVICE_STATUS;
+
%{
#undef PyHANDLE
#include "PyWinObjects.h"
@@ -24,6 +33,13 @@
// according to msdn, 256 is limit for service names and service display names
#define MAX_SERVICE_NAME_LEN 256
+#ifndef _MSC_VER
+#define SERVICE_ACCEPT_PRESHUTDOWN 0x00000100
+#define SERVICE_CONTROL_PRESHUTDOWN 0x0000000F
+#define SERVICE_SID_TYPE_NONE 0x00000000
+#define SERVICE_SID_TYPE_RESTRICTED 0x00000003
+#define SERVICE_SID_TYPE_UNRESTRICTED 0x00000001
+#endif
%}
%init %{
diff -Naur pywin32-b301-orig/win32/src/win32tsmodule.cpp pywin32-b301/win32/src/win32tsmodule.cpp
--- pywin32-b301-orig/win32/src/win32tsmodule.cpp 2021-05-30 16:31:38 +0800
+++ pywin32-b301/win32/src/win32tsmodule.cpp 2021-10-05 19:28:24 +0800
@@ -1,4 +1,5 @@
// @doc
+#undef _WIN32_WINNT
#define _WIN32_WINNT 0x501
#include "PyWinTypes.h"
#include "PyWinObjects.h"
@@ -96,6 +97,7 @@
&WTSConfigClass)) // @pyparm int|ConfigClass||Type of information to be returned, win32ts.WTSUserConfig*
return NULL;
if (PyWinObject_AsWCHAR(obServerName, &ServerName, TRUE) && PyWinObject_AsWCHAR(obUserName, &UserName, FALSE))
+ {
if (!WTSQueryUserConfig(ServerName, UserName, WTSConfigClass, &buf, &bufsize))
PyWin_SetAPIError("WTSQueryUserConfig");
else
@@ -137,6 +139,7 @@
default:
PyErr_SetString(PyExc_NotImplementedError, "Config class not supported yet");
}
+ }
PyWinObject_FreeWCHAR(ServerName);
PyWinObject_FreeWCHAR(UserName);
@@ -1,89 +0,0 @@
--- 000/setup.py 2020-06-20 14:41:31.583265800 +0300
+++ 001/setup.py 2020-06-20 17:41:06.998916300 +0300
@@ -1006,12 +1009,12 @@
# need at this stage.
if sys.version_info > (2, 7) and sys.version_info < (3, 3):
# only stuff built with msvc9 needs this loader.
- self._build_pycom_loader()
- self._build_scintilla()
+ #self._build_pycom_loader()
+ pass
+ #self._build_scintilla()
# Copy cpp lib files needed to create Python COM extensions
- clib_files = (['win32', 'pywintypes%s.lib'],
- ['win32com', 'pythoncom%s.lib'],
- ['win32com', 'axscript%s.lib'])
+ clib_files = (['win32', 'pywintypes%s.def'],
+ ['win32com', 'pythoncom%s.def'])
for clib_file in clib_files:
target_dir = os.path.join(self.build_lib, clib_file[0], "libs")
if not os.path.exists(target_dir):
@@ -1041,20 +1041,6 @@
mfc_version = "vc140"
mfc_libraries = ["mfc140u.dll", "mfcm140u.dll"]
- mfc_contents = self.lookupMfcInVisualStudio(mfc_version, mfc_libraries)
- if not mfc_contents:
- print("Can't find MFC contents in VisualStudio. Looking into WinSxS now..")
- mfc_contents = self.lookupMfcInWinSxS(mfc_version, mfc_libraries)
-
- if not mfc_contents:
- raise RuntimeError("No MFC files found!")
-
- for mfc_content in mfc_contents:
- shutil.copyfile(mfc_content,
- os.path.join(target_dir, os.path.split(mfc_content)[1]),
- )
-
-
def build_exefile(self, ext):
sources = ext.sources
if sources is None or type(sources) not in (list, tuple):
@@ -1917,6 +1920,6 @@
""" % dirs).split(),
depends=["%(internet)s/internet_pch.h" % dirs]),
- WinExt_win32com('mapi', libraries="advapi32", pch_header="PythonCOM.h",
+ WinExt_win32com('mapi', libraries="advapi32 SKIP", pch_header="PythonCOM.h",
include_dirs=["%(mapi)s/mapi_headers" % dirs],
sources=("""
%(mapi)s/mapi.i %(mapi)s/mapi.cpp
@@ -2041,6 +2045,6 @@
""" % dirs).split()),
- WinExt_win32com('propsys', libraries='propsys', delay_load_libraries='shell32',
+ WinExt_win32com('propsys', libraries='propsys SKIP', delay_load_libraries='shell32',
unicode_mode=True,
sources=("""
%(propsys)s/propsys.cpp
@@ -2122,6 +2127,7 @@
pythonwin_extensions = [
WinExt_pythonwin("win32ui",
+ libraries="SKIP",
sources = [
"Pythonwin/dbgthread.cpp",
"Pythonwin/dibapi.cpp",
@@ -2225,6 +2231,7 @@
],
optional_headers=['afxres.h']),
WinExt_pythonwin("win32uiole",
+ libraries="SKIP",
sources = [
"Pythonwin/stdafxole.cpp",
"Pythonwin/win32oleDlgInsert.cpp",
@@ -2242,6 +2249,7 @@
windows_h_version = 0x500,
optional_headers=['afxres.h']),
WinExt_pythonwin("dde",
+ libraries="SKIP",
sources = [
"Pythonwin/stddde.cpp",
"Pythonwin/ddetopic.cpp",
@@ -2292,6 +2300,7 @@
unicode_mode = True,
libraries = "user32 advapi32 ole32 shell32 pywintypes"),
WinExt_pythonwin_subsys_win("Pythonwin",
+ libraries="SKIP",
sources = [
"Pythonwin/pythonwin.cpp",
"Pythonwin/pythonwin.rc",
@@ -0,0 +1,26 @@
diff -Naur pywin32-b301-orig/isapi/src/PythonEng.h pywin32-b301/isapi/src/PythonEng.h
--- pywin32-b301-orig/isapi/src/PythonEng.h 2021-05-30 16:31:38 +0800
+++ pywin32-b301/isapi/src/PythonEng.h 2021-10-05 19:07:38 +0800
@@ -63,7 +63,7 @@
PyObject *DoCallback(HANDLER_TYPE typ, PyObject *args);
bool LoadHandler(bool reload);
- bool CPythonHandler::CheckCallback(const char *cbname, PyObject **cb);
+ bool CheckCallback(const char *cbname, PyObject **cb);
const char *m_namefactory;
const char *m_nameinit;
const char *m_namedo;
diff -Naur pywin32-b301-orig/isapi/src/StdAfx.h pywin32-b301/isapi/src/StdAfx.h
--- pywin32-b301-orig/isapi/src/StdAfx.h 2021-05-30 16:31:38 +0800
+++ pywin32-b301/isapi/src/StdAfx.h 2021-10-05 19:08:26 +0800
@@ -51,6 +51,10 @@
typedef int Py_ssize_t;
#endif
+#ifndef _MSC_VER
+#define HSE_REQ_SET_FLUSH_FLAG (HSE_REQ_END_RESERVED+43)
+#endif
+
// ***** py3k support *****
// Note that when built for py3k, 'UNICODE' is defined, which conveniently
// means TCHAR is the same size as the native unicode object in all versions.
+122
View File
@@ -0,0 +1,122 @@
diff -Naur pywin32-b301-orig/SWIG/swig_lib/python/pythoncom.i pywin32-b301/SWIG/swig_lib/python/pythoncom.i
--- pywin32-b301-orig/SWIG/swig_lib/python/pythoncom.i 2021-05-30 16:31:38 +0800
+++ pywin32-b301/SWIG/swig_lib/python/pythoncom.i 2021-10-05 19:09:14 +0800
@@ -8,6 +8,10 @@
%typedef long HRESULT_KEEP; // This will keep HRESULT, and return
typedef long FLAGS;
+typedef WCHAR OLECHAR;
+typedef OLECHAR* BSTR;
+typedef MAPIERROR MAPIERROR;
+typedef ADRLIST ADRLIST;
%typemap(python,out) HRESULT {
$target = Py_None;
diff -Naur pywin32-b301-orig/SWIG/swig_lib/python/pywintypes.i pywin32-b301/SWIG/swig_lib/python/pywintypes.i
--- pywin32-b301-orig/SWIG/swig_lib/python/pywintypes.i 2021-05-30 16:31:38 +0800
+++ pywin32-b301/SWIG/swig_lib/python/pywintypes.i 2021-10-05 19:10:04 +0800
@@ -33,6 +33,8 @@
typedef unsigned long ULONG;
%apply unsigned long {ULONG};
+typedef STARTUPINFO STARTUPINFO;
+%apply STARTUPINFO {STARTUPINFO};
%{
#include "PyWinTypes.h"
@@ -53,6 +55,7 @@
}
// Override the SWIG default for this.
+%typedef PyObject PyObject;
%typemap(python,out) PyObject *{
if ($source==NULL) return NULL; // get out now!
$target = $source;
@@ -62,7 +65,7 @@
// Map API functions that return BOOL to
// functions that return None, but raise exceptions.
// These functions must set the win32 LastError.
-%typedef BOOL BOOLAPI
+%typedef BOOL BOOLAPI;
%typemap(python,out) BOOLAPI {
$target = Py_None;
@@ -79,7 +82,7 @@
}
}
-%typedef DWORD DWORDAPI
+%typedef DWORD DWORDAPI;
%typemap(python,out) DWORDAPI {
$target = Py_None;
@@ -108,11 +111,13 @@
}
}
+%typedef TCHAR TCHAR;
%typemap(python,in) TCHAR * {
if (!PyWinObject_AsTCHAR($source, &$target, FALSE))
return NULL;
}
+%typedef WCHAR WCHAR;
%typemap(python,arginit) TCHAR *,OLECHAR *, WCHAR *
{
$target = NULL;
@@ -198,6 +203,7 @@
return NULL;
}
+%typedef OVERLAPPED OVERLAPPED;
%typemap(python,in) OVERLAPPED *
{
if (!PyWinObject_AsOVERLAPPED($source, &$target, TRUE))
@@ -252,6 +258,7 @@
}
+%typedef SECURITY_ATTRIBUTES SECURITY_ATTRIBUTES;
%typemap(python,in) SECURITY_ATTRIBUTES *{
if (!PyWinObject_AsSECURITY_ATTRIBUTES($source, &$target))
@@ -406,6 +413,7 @@
// LARGE_INTEGER support
//
//---------------------------------------------------------------------------
+%typedef LARGE_INTEGER LARGE_INTEGER;
%typemap(python,in) LARGE_INTEGER {
if (!PyWinObject_AsLARGE_INTEGER($source, &$target))
return NULL;
@@ -415,6 +423,7 @@
if (!PyWinObject_AsLARGE_INTEGER($source, $target))
return NULL;
}
+%typedef ULARGE_INTEGER ULARGE_INTEGER;
%typemap(python,in) ULARGE_INTEGER {
if (!PyWinObject_AsULARGE_INTEGER($source, &$target))
return NULL;
@@ -529,6 +538,7 @@
// TIME
//
//---------------------------------------------------------------------------
+%typedef FILETIME FILETIME;
%typemap(python,in) FILETIME * {
if (!PyWinObject_AsFILETIME($source, $target, FALSE))
return NULL;
@@ -567,6 +577,7 @@
// SOCKET support.
//
//---------------------------------------------------------------------------
+%typedef UINT_PTR SOCKET;
%typemap(python,in) SOCKET *(SOCKET sockettemp)
{
$target = &sockettemp;
@@ -596,6 +607,6 @@
#endif
PyWinGlobals_Ensure();
PyDict_SetItemString(d, "error", PyWinExc_ApiError);
-#endif SWIG_PYTHONCOM
+#endif // SWIG_PYTHONCOM
%}
@@ -0,0 +1,76 @@
diff -Naur pywin32-b301-orig/com/win32comext/mapi/src/mapi_headers/MAPI.h pywin32-b301/com/win32comext/mapi/src/mapi_headers/MAPI.h
--- pywin32-b301-orig/com/win32comext/mapi/src/mapi_headers/MAPI.h 2021-10-06 01:38:35 +0800
+++ pywin32-b301/com/win32comext/mapi/src/mapi_headers/MAPI.h 2021-10-06 01:42:20 +0800
@@ -20,6 +20,13 @@
#pragma once
#endif
+#ifndef _MSC_VER
+#define __in
+#define __in_opt
+#define __out
+#define __deref_out_ecount_full(x)
+#endif
+
/*
* Types.
*/
@@ -160,7 +167,7 @@
/* #define MAPI_LOGON_UI 0x00000001 Display logon UI */
/* #define MAPI_NEW_SESSION 0x00000002 Don't use shared session */
-/* #define MAPI_LONG_MSGID 0x00004000 /* allow 512 char returned ID */
+/* #define MAPI_LONG_MSGID 0x00004000 allow 512 char returned ID */
/* MAPIAddress() flags. */
diff -Naur pywin32-b301-orig/com/win32comext/mapi/src/mapi_headers/MAPICode.h pywin32-b301/com/win32comext/mapi/src/mapi_headers/MAPICode.h
--- pywin32-b301-orig/com/win32comext/mapi/src/mapi_headers/MAPICode.h 2021-10-06 01:38:35 +0800
+++ pywin32-b301/com/win32comext/mapi/src/mapi_headers/MAPICode.h 2021-10-06 01:41:52 +0800
@@ -216,5 +216,4 @@
#endif
#endif /* MAPICODE_H */
-
diff -Naur pywin32-b301-orig/com/win32comext/mapi/src/mapi_headers/MAPIDefS.h pywin32-b301/com/win32comext/mapi/src/mapi_headers/MAPIDefS.h
--- pywin32-b301-orig/com/win32comext/mapi/src/mapi_headers/MAPIDefS.h 2021-10-06 01:38:35 +0800
+++ pywin32-b301/com/win32comext/mapi/src/mapi_headers/MAPIDefS.h 2021-10-06 01:42:30 +0800
@@ -51,6 +51,13 @@
#include <stddef.h>
#endif
+#ifndef _MSC_VER
+#define __in
+#define __in_opt
+#define __out
+#define __deref_out_ecount_full(x)
+#endif
+
/* Array dimension for structures with variable-sized arrays at the end. */
#ifndef MAPI_DIM
@@ -2728,5 +2735,4 @@
#endif
#endif /* MAPIDEFS_H */
-
diff -Naur pywin32-b301-orig/com/win32comext/mapi/src/mapi_headers/MAPIForm.h pywin32-b301/com/win32comext/mapi/src/mapi_headers/MAPIForm.h
--- pywin32-b301-orig/com/win32comext/mapi/src/mapi_headers/MAPIForm.h 2021-10-06 01:38:35 +0800
+++ pywin32-b301/com/win32comext/mapi/src/mapi_headers/MAPIForm.h 2021-10-06 01:42:36 +0800
@@ -631,5 +631,4 @@
#endif /* MAPIFORM_H */
-
diff -Naur pywin32-b301-orig/com/win32comext/mapi/src/mapi_headers/MSPST.h pywin32-b301/com/win32comext/mapi/src/mapi_headers/MSPST.h
--- pywin32-b301-orig/com/win32comext/mapi/src/mapi_headers/MSPST.h 2021-10-06 01:38:35 +0800
+++ pywin32-b301/com/win32comext/mapi/src/mapi_headers/MSPST.h 2021-10-06 01:42:42 +0800
@@ -97,5 +97,4 @@
0xd9, 0x6e, 0x00, 0x00 }
#endif /* _MSPST_H_ */
-
+20 -19
View File
@@ -1,6 +1,7 @@
# Maintainer: Ray Donnelly <mingw.android@gmail.com>
# Maintainer: Joan Karadimov <joan.karadimov@gmail.com>
# Contributor: Renato Silva <br.renatosilva@gmail.com>
# Contributor: Raed Rizqie <raed.rizqie@gmail.com>
_realname='pywin32'
pkgbase=mingw-w64-python-${_realname}
@@ -10,36 +11,37 @@ pkgdesc='Python for Windows Extensions (mingw-w64)'
license=('PSF')
arch=('any')
mingw_arch=('mingw32' 'mingw64' 'ucrt64' 'clang64')
pkgver=228
pkgver=301
pkgrel=1
makedepends=(
${MINGW_PACKAGE_PREFIX}-python
${MINGW_PACKAGE_PREFIX}-python-setuptools
rsync)
source=("https://github.com/mhammond/${_realname}/archive/b${pkgver}.zip"
setup.cfg
seh.h
minmax.h
001-compile-and-setup-fixes.patch
002-dependency-fixes.patch
003-seh.patch
004-disable-modules.patch)
sha256sums=('524a40b85bd0d0bd52a5bcce7ccb236ae46a336975df5452b336d813f4b64a6d'
'74033ac90498a63b579b4dd8c5948b2ea1a9de63aa57f3d4e4e44bb0f549520b'
002-com-extensions-fix.patch
003-win32-extensions-fix.patch
004-isapi-fix.patch
005-swig-fix.patch
006-mapi-headers-fix.patch)
sha256sums=('b55811d60112aea58c58bbed2ffd92f7be6727cb2400764755c7e6cd9789d210'
'03f8c0372059bb5b1933d77309101c67fa08504b42a6fce1186ed9a29e0c271f'
'17eb1454e8955771af57209a49439f7cf26a885767a8e707f6c77e3c3ccd479f'
'a6dc5c309148b85cd0b2e90f673d998528747e9fceab43d246bbe17ee7a4c8ad'
'fcc23eaaff99160147db4dd48cf951b6db62adb8287807e7a281c032902c4f98'
'109a3ece2cfa359b6e68aebbcc74db4b7e80eda0be3d9c6bed88a7d099c70d37'
'e8c32de54fe2a375b0331fae36efaa4400518386d03ee429da13e1846b4c2e08')
'0d0406f36f0d203e69a7cb489f83428a2546c417e56e2147ddf2f73256d14af7'
'fb941a9f0e0c929c8596cba7f0a1fcc9ee6c1f642aa727f5b50c0dde2006dace'
'851d01864eea19d668e748214cb2ed19164c34f9a2db470e9b393a33559e7f26'
'495735237e62d9cd829671a20e28896b4055ab3c017b06a12f3a56cfcfa5e9bd'
'076cc45da1e5c44ee5530e72766a6aeac222b3db4117043761de5f1ac18f8aeb'
'65da9bd818544422446b2f41ef6ab2d52a9dba5c21402a499ac89c3049d09324')
prepare() {
cd "${srcdir}/${_realname}-b${pkgver}"
patch -p1 < "${startdir}"/001-compile-and-setup-fixes.patch
patch -p1 < "${startdir}"/002-dependency-fixes.patch
patch -p1 < "${startdir}"/003-seh.patch
patch -p1 < "${startdir}"/004-disable-modules.patch
cp "${startdir}"/setup.cfg setup.cfg
patch -p1 < "${startdir}"/002-com-extensions-fix.patch
patch -p1 < "${startdir}"/003-win32-extensions-fix.patch
patch -p1 < "${startdir}"/004-isapi-fix.patch
patch -p1 < "${startdir}"/005-swig-fix.patch
patch -p1 < "${startdir}"/006-mapi-headers-fix.patch
}
build() {
@@ -47,10 +49,9 @@ build() {
rsync --recursive --times "${srcdir}/${_realname}-b${pkgver}"/* "${srcdir}/build-python-${CARCH}-${_realname}-${pkgver}"
cd "${srcdir}/build-python-${CARCH}-${_realname}-${pkgver}"
CFLAGS="-Wno-narrowing -fno-operator-names -fpermissive -include ../seh.h -include ../minmax.h -DCRYPT_DECRYPT_MESSAGE_PARA_HAS_EXTRA_FIELDS" \
LIB="${MINGW_PREFIX}/lib:${MINGW_PREFIX}/${CARCH}-w64-mingw32/lib" \
INCLUDE="${MINGW_PREFIX}/include:${MINGW_PREFIX}/${CARCH}-w64-mingw32/include" \
${MINGW_PREFIX}/bin/python setup.py build
${MINGW_PREFIX}/bin/python setup.py build --skip-verstamp
}
package() {
-2
View File
@@ -1,2 +0,0 @@
#define min(a, b) (((a)<(b))?(a):(b))
#define max(a, b) (((a)>(b))?(a):(b))
-2
View File
@@ -1,2 +0,0 @@
[build]
compiler=mingw32