gethostbyname() feature.

Rein Klazes rklazes at xs4all.nl
Sun Aug 31 07:11:02 CDT 2003


hi,

In the newsgroup someone reported a crash in gethostbyname() when the
application called it with a null parameter.

msdn says about this:

| If null is provided in the name parameter, the returned string is
| the same as the string returned by a successful gethostname
| function call.

gethostbyname does not return a string, but I think this it what they
meant to say.
I have tested gethostbyname under Win2K to do this.

Changelog:
	dlls/winsock	: socket.c async.c
	_ws_gethostbyname() and WSAAsyncGetHostByName() when called with
	a null name, should use the name returned by gethostname().

Rein.
-- 
Rein Klazes
rklazes at xs4all.nl
-------------- next part --------------
--- wine/dlls/winsock/socket.c	2003-08-31 10:00:10.000000000 +0200
+++ mywine/dlls/winsock/socket.c	2003-08-31 09:59:16.000000000 +0200
@@ -2903,6 +2903,16 @@
     int ebufsize=1024;
     struct hostent hostentry;
     int locerr = ENOBUFS;
+#endif
+    char buf[100];
+    if( !name) {
+        name = buf;
+        if( gethostname( buf, 100) == -1) {
+            SetLastError( WSAENOBUFS); /* appropriate ? */
+            return retval;
+        }
+    }
+#ifdef  HAVE_LINUX_GETHOSTBYNAME_R_6
     host = NULL;
     extrabuf=HeapAlloc(GetProcessHeap(),0,ebufsize) ;
     while(extrabuf) {
--- wine/dlls/winsock/async.c	2003-08-31 10:00:10.000000000 +0200
+++ mywine/dlls/winsock/async.c	2003-08-31 09:47:31.000000000 +0200
@@ -402,6 +402,16 @@
                         int ebufsize=1024;
                         struct hostent hostentry;
                         int locerr = ENOBUFS;
+#endif
+                        char buf[100];
+                        if( !(aq->host_name)) {
+                            aq->host_name = buf;
+                            if( gethostname( buf, 100) == -1) {
+                                fail = WSAENOBUFS; /* appropriate ? */
+                                break;
+                            }
+                        }
+#ifdef  HAVE_LINUX_GETHOSTBYNAME_R_6
                         he = NULL;
                         extrabuf=HeapAlloc(GetProcessHeap(),0,ebufsize) ;
                         while(extrabuf) {


More information about the wine-patches mailing list