summaryrefslogtreecommitdiffstats
path: root/lldb/source/Host/linux/HostInfoLinux.cpp
diff options
context:
space:
mode:
authorZachary Turner <zturner@google.com>2014-08-21 17:57:03 +0000
committerZachary Turner <zturner@google.com>2014-08-21 17:57:03 +0000
commit673b6e4f3a87bed49bee667a4f17f37aa9c976f3 (patch)
treeaf8856e18d68818cc58af17e6591654cd99ad80f /lldb/source/Host/linux/HostInfoLinux.cpp
parentae2526b4cd782af6f6893b360d9ae82e87ec7b41 (diff)
downloadbcm5719-llvm-673b6e4f3a87bed49bee667a4f17f37aa9c976f3.tar.gz
bcm5719-llvm-673b6e4f3a87bed49bee667a4f17f37aa9c976f3.zip
Convert static constructors to be explicitly initialized at startup
llvm-svn: 216197
Diffstat (limited to 'lldb/source/Host/linux/HostInfoLinux.cpp')
-rw-r--r--lldb/source/Host/linux/HostInfoLinux.cpp49
1 files changed, 36 insertions, 13 deletions
diff --git a/lldb/source/Host/linux/HostInfoLinux.cpp b/lldb/source/Host/linux/HostInfoLinux.cpp
index 2d615d823e5..28980831023 100644
--- a/lldb/source/Host/linux/HostInfoLinux.cpp
+++ b/lldb/source/Host/linux/HostInfoLinux.cpp
@@ -18,10 +18,33 @@
using namespace lldb_private;
-std::string HostInfoLinux::m_distribution_id;
-uint32_t HostInfoLinux::m_os_major = 0;
-uint32_t HostInfoLinux::m_os_minor = 0;
-uint32_t HostInfoLinux::m_os_update = 0;
+namespace
+{
+struct HostInfoLinuxFields
+{
+ HostInfoLinuxFields()
+ : m_os_major(0)
+ , m_os_minor(0)
+ , m_os_update(0)
+ {
+ }
+
+ std::string m_distribution_id;
+ uint32_t m_os_major;
+ uint32_t m_os_minor;
+ uint32_t m_os_update;
+};
+
+HostInfoLinuxFields *g_fields = nullptr;
+}
+
+void
+HostInfoLinux::Initialize()
+{
+ HostInfoPosix::Initialize();
+
+ g_fields = new HostInfoLinuxFields();
+}
bool
HostInfoLinux::GetOSVersion(uint32_t &major, uint32_t &minor, uint32_t &update)
@@ -37,7 +60,7 @@ HostInfoLinux::GetOSVersion(uint32_t &major, uint32_t &minor, uint32_t &update)
if (uname(&un))
goto finished;
- int status = sscanf(un.release, "%u.%u.%u", &major, &minor, &update);
+ int status = sscanf(un.release, "%u.%u.%u", &g_fields->m_os_major, &g_fields->m_os_minor, &g_fields->m_os_update);
if (status == 3)
{
success = true;
@@ -46,15 +69,15 @@ HostInfoLinux::GetOSVersion(uint32_t &major, uint32_t &minor, uint32_t &update)
// Some kernels omit the update version, so try looking for just "X.Y" and
// set update to 0.
- update = 0;
- status = sscanf(un.release, "%u.%u", &major, &minor);
+ g_fields->m_os_update = 0;
+ status = sscanf(un.release, "%u.%u", &g_fields->m_os_major, &g_fields->m_os_minor);
success = !!(status == 2);
}
finished:
- major = m_os_major;
- minor = m_os_minor;
- update = m_os_update;
+ major = g_fields->m_os_major;
+ minor = g_fields->m_os_minor;
+ update = g_fields->m_os_update;
return success;
}
@@ -122,9 +145,9 @@ HostInfoLinux::GetDistributionId()
return tolower(isspace(ch) ? '_' : ch);
});
- m_distribution_id = id_string;
+ g_fields->m_distribution_id = id_string;
if (log)
- log->Printf("distribution id set to \"%s\"", m_distribution_id.c_str());
+ log->Printf("distribution id set to \"%s\"", g_fields->m_distribution_id.c_str());
}
else
{
@@ -145,7 +168,7 @@ HostInfoLinux::GetDistributionId()
}
}
- return m_distribution_id.c_str();
+ return g_fields->m_distribution_id.c_str();
}
bool
OpenPOWER on IntegriCloud