The conflict occurs with Min GW, which already defines REPARSE_DATA_BUFFER.
Also, Min GW uses a lowercase <windows.h> filename.
- Issue #17596: Include <wincrypt.h> to help with Min GW building.
+- Issue #17599: On Windows, rename the privately defined REPARSE_DATA_BUFFER
+ structure to avoid conflicting with the definition from Min GW.
+
- Issue #27507: Add integer overflow check in bytearray.extend(). Patch by
Xiang Zhang.
const USHORT prefix_len = 4;
USHORT print_len = 0;
USHORT rdb_size = 0;
- PREPARSE_DATA_BUFFER rdb = NULL;
+ _Py_PREPARSE_DATA_BUFFER rdb = NULL;
/* Junction point creation */
HANDLE junction = NULL;
- the size of the print name in bytes
- the size of the substitute name in bytes
- the size of two NUL terminators in bytes */
- rdb_size = REPARSE_DATA_BUFFER_HEADER_SIZE +
+ rdb_size = _Py_REPARSE_DATA_BUFFER_HEADER_SIZE +
sizeof(rdb->MountPointReparseBuffer) -
sizeof(rdb->MountPointReparseBuffer.PathBuffer) +
/* Two +1's for NUL terminators. */
(prefix_len + print_len + 1 + print_len + 1) * sizeof(WCHAR);
- rdb = (PREPARSE_DATA_BUFFER)PyMem_RawMalloc(rdb_size);
+ rdb = (_Py_PREPARSE_DATA_BUFFER)PyMem_RawMalloc(rdb_size);
if (rdb == NULL)
goto cleanup;
memset(rdb, 0, rdb_size);
rdb->ReparseTag = IO_REPARSE_TAG_MOUNT_POINT;
- rdb->ReparseDataLength = rdb_size - REPARSE_DATA_BUFFER_HEADER_SIZE;
+ rdb->ReparseDataLength = rdb_size - _Py_REPARSE_DATA_BUFFER_HEADER_SIZE;
rdb->MountPointReparseBuffer.SubstituteNameOffset = 0;
rdb->MountPointReparseBuffer.SubstituteNameLength =
(prefix_len + print_len) * sizeof(WCHAR);
static int
win32_get_reparse_tag(HANDLE reparse_point_handle, ULONG *reparse_tag)
{
- char target_buffer[MAXIMUM_REPARSE_DATA_BUFFER_SIZE];
- REPARSE_DATA_BUFFER *rdb = (REPARSE_DATA_BUFFER *)target_buffer;
+ char target_buffer[_Py_MAXIMUM_REPARSE_DATA_BUFFER_SIZE];
+ _Py_REPARSE_DATA_BUFFER *rdb = (_Py_REPARSE_DATA_BUFFER *)target_buffer;
DWORD n_bytes_returned;
if (0 == DeviceIoControl(
int dir_fd;
HANDLE reparse_point_handle;
- char target_buffer[MAXIMUM_REPARSE_DATA_BUFFER_SIZE];
- REPARSE_DATA_BUFFER *rdb = (REPARSE_DATA_BUFFER *)target_buffer;
+ char target_buffer[_Py_MAXIMUM_REPARSE_DATA_BUFFER_SIZE];
+ _Py_REPARSE_DATA_BUFFER *rdb = (_Py_REPARSE_DATA_BUFFER *)target_buffer;
const wchar_t *print_name;
static char *keywords[] = {"path", "dir_fd", NULL};
#define Py_WINREPARSE_H
#ifdef MS_WINDOWS
-#include <Windows.h>
+#include <windows.h>
#ifdef __cplusplus
extern "C" {
/* The following structure was copied from
http://msdn.microsoft.com/en-us/library/ff552012.aspx as the required
- include doesn't seem to be present in the Windows SDK (at least as included
- with Visual Studio Express). */
-typedef struct _REPARSE_DATA_BUFFER {
+ include km\ntifs.h isn't present in the Windows SDK (at least as included
+ with Visual Studio Express). Use unique names to avoid conflicting with
+ the structure as defined by Min GW. */
+typedef struct {
ULONG ReparseTag;
USHORT ReparseDataLength;
USHORT Reserved;
UCHAR DataBuffer[1];
} GenericReparseBuffer;
};
-} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;
+} _Py_REPARSE_DATA_BUFFER, *_Py_PREPARSE_DATA_BUFFER;
-#define REPARSE_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_DATA_BUFFER,\
- GenericReparseBuffer)
-#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE ( 16 * 1024 )
+#define _Py_REPARSE_DATA_BUFFER_HEADER_SIZE \
+ FIELD_OFFSET(_Py_REPARSE_DATA_BUFFER, GenericReparseBuffer)
+#define _Py_MAXIMUM_REPARSE_DATA_BUFFER_SIZE ( 16 * 1024 )
#ifdef __cplusplus
}