From ee1aa503150ef25f872f979c3d9963db42ff2841 Mon Sep 17 00:00:00 2001 From: kgv Date: Fri, 20 Nov 2020 12:04:33 +0300 Subject: [PATCH] # fallback for old Android --- src/OSD/OSD_Host.cxx | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/OSD/OSD_Host.cxx b/src/OSD/OSD_Host.cxx index f3c7554e1f..352bc1c6bf 100644 --- a/src/OSD/OSD_Host.cxx +++ b/src/OSD/OSD_Host.cxx @@ -23,8 +23,21 @@ #include +#ifndef HAVE_IFADDRS + #if defined(__ANDROID__) + #include + #if (__ANDROID_API__ >= 24) + #define HAVE_IFADDRS + #endif + #else + #define HAVE_IFADDRS + #endif +#endif + #include -#include +#ifdef HAVE_IFADDRS + #include +#endif #include // For 'uname' #include // This is for 'gethostbyname' @@ -120,6 +133,7 @@ Standard_Integer OSD_Host::AvailableMemory(){ TCollection_AsciiString OSD_Host::InternetAddress() { TCollection_AsciiString aResult; +#ifdef HAVE_IFADDRS struct ifaddrs* anAddrFullInfo = NULL; getifaddrs (&anAddrFullInfo); for (struct ifaddrs* anAddrIter = anAddrFullInfo; anAddrIter != NULL; anAddrIter = anAddrIter->ifa_next) @@ -158,6 +172,20 @@ TCollection_AsciiString OSD_Host::InternetAddress() { freeifaddrs (anAddrFullInfo); } +#else + // fallback for ancient systems + const TCollection_AsciiString aHost = HostName(); + if (struct hostent* anAddr = gethostbyname (aHost.ToCString())) + { + char aBuffer[16]; + const int a = (unsigned char)anAddr->h_addr_list[0][0]; + const int b = (unsigned char)anAddr->h_addr_list[0][1]; + const int c = (unsigned char)anAddr->h_addr_list[0][2]; + const int d = (unsigned char)anAddr->h_addr_list[0][3]; + sprintf (aBuffer, "%d.%d.%d.%d", a, b, c, d); + aResult = aBuffer; + } +#endif if (aResult.IsEmpty()) { return "127.0.0.1"; -- 2.39.5