From 09fff7a8d185c5b87a979eefb94a2aa462b8a035 Mon Sep 17 00:00:00 2001 From: Hirokazu Yamamoto Date: Fri, 5 Nov 2010 17:24:13 +0000 Subject: Fixed socket_gethostname() on windows. --- Modules/socketmodule.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index a1a90f4..e24bf54 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -3097,17 +3097,20 @@ socket_gethostname(PyObject *self, PyObject *unused) /* 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); } -- cgit v0.12