Mercurial > cpython-lru_cache-weakref
diff Modules/socketmodule.c @ 65981:49b0d423023e
Fixed socket_gethostname() on windows.
| author | Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp> |
|---|---|
| date | Fri, 05 Nov 2010 17:24:13 +0000 |
| parents | 2c2eced635f6 |
| children | 3d9a86b8cc98 |
line wrap: on
line diff
--- a/Modules/socketmodule.c Fri Nov 05 17:23:41 2010 +0000 +++ b/Modules/socketmodule.c Fri Nov 05 17:24:13 2010 +0000 @@ -3097,17 +3097,20 @@ /* Don't use winsock's gethostname, as this returns the ANSI version of the hostname, whereas we need a Unicode string. Otherwise, gethostname apparently also returns the DNS name. */ - wchar_t buf[MAX_COMPUTERNAME_LENGTH]; - DWORD size = sizeof(buf); + wchar_t buf[MAX_COMPUTERNAME_LENGTH + 1]; + DWORD size = sizeof(buf) / sizeof(wchar_t); + PyObject *result; if (!GetComputerNameExW(ComputerNamePhysicalDnsHostname, buf, &size)) { if (GetLastError() == ERROR_MORE_DATA) { /* MSDN says this may occur "because DNS allows longer names */ - PyObject *result = PyUnicode_FromUnicode(NULL, size); + if (size == 0) /* XXX: I'm not sure how to handle this */ + return PyUnicode_FromUnicode(NULL, 0); + result = PyUnicode_FromUnicode(NULL, size - 1); if (!result) return NULL; - if (GetComputerName(ComputerNamePhysicalDnsHostname, - PyUnicode_AS_UNICODE(result), - size+1)) + if (GetComputerNameExW(ComputerNamePhysicalDnsHostname, + PyUnicode_AS_UNICODE(result), + &size)) return result; Py_DECREF(result); }
