On 2010/10/30 3:20, martin.v.loewis wrote: > Modified: python/branches/py3k/Modules/socketmodule.c > ============================================================================== > --- python/branches/py3k/Modules/socketmodule.c (original) > +++ python/branches/py3k/Modules/socketmodule.c Fri Oct 29 20:20:08 2010 > @@ -3093,6 +3093,27 @@ > static PyObject * > socket_gethostname(PyObject *self, PyObject *unused) > { > +#ifdef MS_WINDOWS > + /* 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); > + 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 (!result) > + return NULL; > + if (GetComputerName(ComputerNamePhysicalDnsHostname, > + PyUnicode_AS_UNICODE(result), > + size+1)) > + return result; > + } > + return PyErr_SetExcFromWindowsErr(PyExc_WindowsError, GetLastError()); > + } > + return PyUnicode_FromUnicode(buf, size); > +#else > char buf[1024]; > int res; > Py_BEGIN_ALLOW_THREADS > @@ -3102,6 +3123,7 @@ > return set_error(); > buf[sizeof buf - 1] = '\0'; > return PyUnicode_FromString(buf); > +#endif > } > > PyDoc_STRVAR(gethostname_doc, > _______________________________________________ > Python-checkins mailing list > Python-checkins at python.org > http://mail.python.org/mailman/listinfo/python-checkins > I think size should be in TCHARs, not in bytes. (MSDN says so) And GetComputerName's signature differs from MSDN. (Maybe should use GetComputerNameExW again?)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4