diff options
author | Zachary Turner <zturner@google.com> | 2014-08-21 17:57:03 +0000 |
---|---|---|
committer | Zachary Turner <zturner@google.com> | 2014-08-21 17:57:03 +0000 |
commit | 673b6e4f3a87bed49bee667a4f17f37aa9c976f3 (patch) | |
tree | af8856e18d68818cc58af17e6591654cd99ad80f /lldb/source/Host/linux/HostInfoLinux.cpp | |
parent | ae2526b4cd782af6f6893b360d9ae82e87ec7b41 (diff) | |
download | bcm5719-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.cpp | 49 |
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 |