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-check...@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?)

_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to