summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sal/osl/w32/socket.cxx19
1 files changed, 16 insertions, 3 deletions
diff --git a/sal/osl/w32/socket.cxx b/sal/osl/w32/socket.cxx
index ea6ea0df3bc0..685301c3d38f 100644
--- a/sal/osl/w32/socket.cxx
+++ b/sal/osl/w32/socket.cxx
@@ -20,6 +20,7 @@
#include "system.h"
#include <osl/socket.h>
+#include <osl/thread.h>
#include <osl/diagnose.h>
#include <rtl/alloc.h>
#include <sal/log.hxx>
@@ -979,8 +980,8 @@ oslSocketResult SAL_CALL osl_getLocalHostname (rtl_uString **strLocalHostname)
sal_Char Host[256]= "";
if (gethostname(Host, sizeof(Host)) == 0)
{
- /* check if we have an FQDN */
- if (strchr(Host, '.') == NULL)
+ /* check if we have an FQDN; if not, try to determine it via dns first: */
+ if (strchr(Host, '.') == nullptr)
{
oslHostAddr pAddr;
rtl_uString *hostName= NULL;
@@ -990,7 +991,6 @@ oslSocketResult SAL_CALL osl_getLocalHostname (rtl_uString **strLocalHostname)
RTL_TEXTENCODING_UTF8, OUSTRING_TO_OSTRING_CVTFLAGS);
OSL_ASSERT(hostName != 0);
- /* no, determine it via dns */
pAddr = osl_createHostAddrByName(hostName);
rtl_uString_release (hostName);
@@ -1001,6 +1001,19 @@ oslSocketResult SAL_CALL osl_getLocalHostname (rtl_uString **strLocalHostname)
osl_destroyHostAddr ((oslHostAddr)pAddr);
}
+ if (LocalHostname[0] == u'\0')
+ {
+ OUString u;
+ if (rtl_convertStringToUString(
+ &u.pData, Host, strlen(Host), osl_getThreadTextEncoding(),
+ (RTL_TEXTTOUNICODE_FLAGS_UNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_MBUNDEFINED_ERROR
+ | RTL_TEXTTOUNICODE_FLAGS_INVALID_ERROR))
+ && u.getLength() < SAL_N_ELEMENTS(LocalHostname))
+ {
+ memcpy(LocalHostname, u.getStr(), (u.getLength() + 1) * sizeof sal_Unicode);
+ }
+ }
}
}