Skip to content

Commit 24d340b

Browse files
committed
gh-152433: Windows: allow build socketmodule for UWP
1 parent 38df997 commit 24d340b

3 files changed

Lines changed: 26 additions & 15 deletions

File tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
socketmodule: improve compatibility for UWP.

Modules/clinic/socketmodule.c.h

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Modules/socketmodule.c

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,10 @@ shutdown(how) -- shut down traffic in one or both directions\n\
327327
// For if_nametoindex() and if_indextoname()
328328
#include <iphlpapi.h>
329329

330+
#ifndef RPC_S_OK
331+
#define RPC_S_OK 0L
332+
#endif
333+
330334
/* remove some flags on older version Windows during run-time.
331335
https://msdn.microsoft.com/en-us/library/windows/desktop/ms738596.aspx */
332336
typedef struct {
@@ -631,14 +635,14 @@ _PyLong_##NAME##_Converter(PyObject *obj, void *ptr) \
631635
return 1; \
632636
}
633637

634-
#if defined(HAVE_IF_NAMEINDEX) || defined(MS_WINDOWS)
638+
#if defined(HAVE_IF_NAMEINDEX) || defined(MS_WINDOWS_DESKTOP)
635639
# ifdef MS_WINDOWS
636640
UNSIGNED_INT_CONVERTER(NetIfindex, NET_IFINDEX)
637641
# else
638642
# define _PyLong_NetIfindex_Converter _PyLong_UnsignedInt_Converter
639643
# define NET_IFINDEX unsigned int
640644
# endif
641-
#endif // defined(HAVE_IF_NAMEINDEX) || defined(MS_WINDOWS)
645+
#endif // defined(HAVE_IF_NAMEINDEX) || defined(MS_WINDOWS_DESKTOP)
642646

643647
/*[python input]
644648
class NET_IFINDEX_converter(CConverter):
@@ -5885,10 +5889,12 @@ socket_gethostname(PyObject *self, PyObject *unused)
58855889
Otherwise, gethostname apparently also returns the DNS name. */
58865890
wchar_t buf[MAX_COMPUTERNAME_LENGTH + 1];
58875891
DWORD size = Py_ARRAY_LENGTH(buf);
5888-
wchar_t *name;
5889-
PyObject *result;
58905892

5893+
#ifdef MS_WINDOWS_DESKTOP
58915894
if (GetComputerNameExW(ComputerNamePhysicalDnsHostname, buf, &size))
5895+
#else
5896+
if (GetComputerNameW(buf, &size))
5897+
#endif
58925898
return PyUnicode_FromWideChar(buf, size);
58935899

58945900
if (GetLastError() != ERROR_MORE_DATA)
@@ -5897,9 +5903,12 @@ socket_gethostname(PyObject *self, PyObject *unused)
58975903
if (size == 0)
58985904
return Py_GetConstant(Py_CONSTANT_EMPTY_STR);
58995905

5906+
#ifndef MS_WINDOWS_DESKTOP
5907+
return NULL;
5908+
#else
59005909
/* MSDN says ERROR_MORE_DATA may occur because DNS allows longer
59015910
names */
5902-
name = PyMem_New(wchar_t, size);
5911+
wchar_t* name = PyMem_New(wchar_t, size);
59035912
if (!name) {
59045913
PyErr_NoMemory();
59055914
return NULL;
@@ -5913,9 +5922,10 @@ socket_gethostname(PyObject *self, PyObject *unused)
59135922
return NULL;
59145923
}
59155924

5916-
result = PyUnicode_FromWideChar(name, size);
5925+
PyObject* result = PyUnicode_FromWideChar(name, size);
59175926
PyMem_Free(name);
59185927
return result;
5928+
#endif
59195929
#else
59205930
char buf[1024];
59215931
int res;
@@ -7202,7 +7212,7 @@ Set the default timeout in seconds (real number) for new socket objects.\n\
72027212
A value of None indicates that new socket objects have no timeout.\n\
72037213
When the socket module is first imported, the default is None.");
72047214

7205-
#if defined(HAVE_IF_NAMEINDEX) || defined(MS_WINDOWS)
7215+
#if defined(HAVE_IF_NAMEINDEX) || defined(MS_WINDOWS_DESKTOP)
72067216
/* Python API for getting interface indices and names */
72077217

72087218
static PyObject *
@@ -7343,7 +7353,7 @@ _socket_if_indextoname_impl(PyObject *module, NET_IFINDEX index)
73437353
return PyUnicode_DecodeFSDefault(name);
73447354
}
73457355

7346-
#endif // defined(HAVE_IF_NAMEINDEX) || defined(MS_WINDOWS)
7356+
#endif // defined(HAVE_IF_NAMEINDEX) || defined(MS_WINDOWS_DESKTOP)
73477357

73487358

73497359
#ifdef CMSG_LEN
@@ -7479,7 +7489,7 @@ static PyMethodDef socket_methods[] = {
74797489
METH_NOARGS, getdefaulttimeout_doc},
74807490
{"setdefaulttimeout", socket_setdefaulttimeout,
74817491
METH_O, setdefaulttimeout_doc},
7482-
#if defined(HAVE_IF_NAMEINDEX) || defined(MS_WINDOWS)
7492+
#if defined(HAVE_IF_NAMEINDEX) || defined(MS_WINDOWS_DESKTOP)
74837493
{"if_nameindex", socket_if_nameindex,
74847494
METH_NOARGS, if_nameindex_doc},
74857495
_SOCKET_IF_NAMETOINDEX_METHODDEF
@@ -9301,7 +9311,7 @@ socket_exec(PyObject *m)
93019311
}
93029312
#endif
93039313

9304-
#ifdef MS_WINDOWS
9314+
#ifdef MS_WINDOWS_DESKTOP
93059315
/* remove some flags on older version Windows during run-time */
93069316
if (remove_unusable_flags(m) < 0) {
93079317
goto error;

0 commit comments

Comments
 (0)