From 2166f7dc0d9ae212d9f663241501f6fd17b71e50 Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Thu, 24 Jan 2019 14:22:09 +0100 Subject: [PATCH] Cygwin: net: unify gethostname/getdomainname Use info from same source (GetNetworkParams). Also move getdomainname near gethostname in source. Signed-off-by: Corinna Vinschen --- winsup/cygwin/net.cc | 77 +++++++++++++++++++++----------------------- 1 file changed, 36 insertions(+), 41 deletions(-) diff --git a/winsup/cygwin/net.cc b/winsup/cygwin/net.cc index 2af71f7e5..cd296d19d 100644 --- a/winsup/cygwin/net.cc +++ b/winsup/cygwin/net.cc @@ -710,30 +710,24 @@ cygwin_getservbyport (int port, const char *proto) extern "C" int cygwin_gethostname (char *name, size_t len) { - int res = -1; - __try { - if (gethostname (name, len)) - { - DWORD local_len = len; + PFIXED_INFO info = NULL; + ULONG size = 0; - if (!GetComputerNameExA (ComputerNameDnsHostname, name, - &local_len)) - { - if (GetLastError () == ERROR_MORE_DATA) - set_errno (ENAMETOOLONG); - else - set_winsock_errno (); - __leave; - } + if (GetNetworkParams(info, &size) == ERROR_BUFFER_OVERFLOW + && (info = (PFIXED_INFO) alloca(size)) + && GetNetworkParams(info, &size) == ERROR_SUCCESS) + { + strncpy(name, info->HostName, len); + debug_printf ("gethostname %s", name); + return 0; } - debug_printf ("name %s", name); - res = 0; + __seterrno (); } - __except (EFAULT) {} + __except (EFAULT) __endtry - return res; + return -1; } extern "C" int @@ -750,6 +744,30 @@ sethostname (const char *name, size_t len) return 0; } +/* getdomainname: 4.4BSD */ +extern "C" int +getdomainname (char *domain, size_t len) +{ + __try + { + PFIXED_INFO info = NULL; + ULONG size = 0; + + if (GetNetworkParams(info, &size) == ERROR_BUFFER_OVERFLOW + && (info = (PFIXED_INFO) alloca(size)) + && GetNetworkParams(info, &size) == ERROR_SUCCESS) + { + strncpy(domain, info->DomainName, len); + debug_printf ("gethostname %s", domain); + return 0; + } + __seterrno (); + } + __except (EFAULT) + __endtry + return -1; +} + /* exported as gethostbyname: POSIX.1-2001 */ extern "C" struct hostent * cygwin_gethostbyname (const char *name) @@ -1406,29 +1424,6 @@ cygwin_send (int fd, const void *buf, size_t len, int flags) return res; } -/* getdomainname: 4.4BSD */ -extern "C" int -getdomainname (char *domain, size_t len) -{ - __try - { - PFIXED_INFO info = NULL; - ULONG size = 0; - - if (GetNetworkParams(info, &size) == ERROR_BUFFER_OVERFLOW - && (info = (PFIXED_INFO) alloca(size)) - && GetNetworkParams(info, &size) == ERROR_SUCCESS) - { - strncpy(domain, info->DomainName, len); - return 0; - } - __seterrno (); - } - __except (EFAULT) - __endtry - return -1; -} - /* Fill out an ifconf struct. */ struct gaa_wa {