]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/platinfo.cpp
fixing overrelease and out-of-bounds write, fixes #13725
[wxWidgets.git] / src / common / platinfo.cpp
index fbb27bfd942731bad3ba04ed2c42986d60ac0996..2df232b6dca1113d931e3f8e04c35a3859686c19 100644 (file)
@@ -6,7 +6,7 @@
 // Created:     07.07.2006 (based on wxToolkitInfo)
 // RCS-ID:      $Id$
 // Copyright:   (c) 2006 Francesco Montorsi
-// License:     wxWindows license
+// Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
 // ============================================================================
@@ -45,71 +45,66 @@ static wxPlatformInfo gs_platInfo(wxPORT_UNKNOWN);
 
 static const wxChar* const wxOperatingSystemIdNames[] =
 {
-    _T("Apple Mac OS"),
-    _T("Apple Mac OS X"),
+    wxT("Apple Mac OS"),
+    wxT("Apple Mac OS X"),
 
-    _T("Microsoft Windows 9X"),
-    _T("Microsoft Windows NT"),
-    _T("Microsoft Windows Micro"),
-    _T("Microsoft Windows CE"),
+    wxT("Microsoft Windows 9X"),
+    wxT("Microsoft Windows NT"),
+    wxT("Microsoft Windows Micro"),
+    wxT("Microsoft Windows CE"),
 
-    _T("Linux"),
-    _T("FreeBSD"),
-    _T("OpenBSD"),
-    _T("NetBSD"),
+    wxT("Linux"),
+    wxT("FreeBSD"),
+    wxT("OpenBSD"),
+    wxT("NetBSD"),
 
-    _T("SunOS"),
-    _T("AIX"),
-    _T("HPUX"),
+    wxT("SunOS"),
+    wxT("AIX"),
+    wxT("HPUX"),
 
-    _T("Other Unix"),
-    _T("Other Unix"),
+    wxT("Other Unix"),
+    wxT("Other Unix"),
 
-    _T("DOS"),
-    _T("OS/2"),
-
-    _T("PalmOS"),
-    _T("PalmOS(Over Linux)"),
+    wxT("DOS"),
+    wxT("OS/2"),
 };
 
 static const wxChar* const wxPortIdNames[] =
 {
-    _T("wxBase"),
-    _T("wxMSW"),
-    _T("wxMotif"),
-    _T("wxGTK"),
-    _T("wxMGL"),
-    _T("wxX11"),
-    _T("wxOS2"),
-    _T("wxMac"),
-    _T("wxCocoa"),
-    _T("wxWinCE"),
-    _T("wxPalmOS"),
-    _T("wxDFB")
+    wxT("wxBase"),
+    wxT("wxMSW"),
+    wxT("wxMotif"),
+    wxT("wxGTK"),
+    wxT("wxDFB"),
+    wxT("wxX11"),
+    wxT("wxOS2"),
+    wxT("wxMac"),
+    wxT("wxCocoa"),
+    wxT("wxWinCE"),
 };
 
 static const wxChar* const wxArchitectureNames[] =
 {
-    _T("32 bit"),
-    _T("64 bit")
+    wxT("32 bit"),
+    wxT("64 bit")
 };
 
 static const wxChar* const wxEndiannessNames[] =
 {
-    _T("Big endian"),
-    _T("Little endian"),
-    _T("PDP endian")
+    wxT("Big endian"),
+    wxT("Little endian"),
+    wxT("PDP endian")
 };
 
 // ----------------------------------------------------------------------------
 // local functions
 // ----------------------------------------------------------------------------
 
-// returns log in base 2 of the value, this maps the enum values to the
-// corresponding indices
+// returns the logarithm in base 2 of 'value'; this maps the enum values to the
+// corresponding indexes of the string arrays above
 static unsigned wxGetIndexFromEnumValue(int value)
 {
-    wxCHECK_MSG( value, (unsigned)-1, _T("invalid enum value") );
+    wxCHECK_MSG( value, (unsigned)-1, wxT("invalid enum value") );
 
     int n = 0;
     while ( !(value & 1) )
@@ -118,7 +113,7 @@ static unsigned wxGetIndexFromEnumValue(int value)
         n++;
     }
 
-    wxASSERT_MSG( value == 1, _T("more than one bit set in enum value") );
+    wxASSERT_MSG( value == 1, wxT("more than one bit set in enum value") );
 
     return n;
 }
@@ -159,6 +154,9 @@ bool wxPlatformInfo::operator==(const wxPlatformInfo &t) const
            m_osVersionMajor == t.m_osVersionMajor &&
            m_osVersionMinor == t.m_osVersionMinor &&
            m_os == t.m_os &&
+           m_osDesc == t.m_osDesc &&
+           m_ldi == t.m_ldi &&
+           m_desktopEnv == t.m_desktopEnv &&
            m_port == t.m_port &&
            m_usingUniversal == t.m_usingUniversal &&
            m_arch == t.m_arch &&
@@ -171,7 +169,7 @@ void wxPlatformInfo::InitForCurrentPlatform()
     const wxAppTraits * const traits = wxTheApp ? wxTheApp->GetTraits() : NULL;
     if ( !traits )
     {
-        wxFAIL_MSG( _T("failed to initialize wxPlatformInfo") );
+        wxFAIL_MSG( wxT("failed to initialize wxPlatformInfo") );
 
         m_port = wxPORT_UNKNOWN;
         m_usingUniversal = false;
@@ -182,11 +180,18 @@ void wxPlatformInfo::InitForCurrentPlatform()
     {
         m_port = traits->GetToolkitVersion(&m_tkVersionMajor, &m_tkVersionMinor);
         m_usingUniversal = traits->IsUsingUniversalWidgets();
+        m_desktopEnv = traits->GetDesktopEnvironment();
     }
 
     m_os = wxGetOsVersion(&m_osVersionMajor, &m_osVersionMinor);
+    m_osDesc = wxGetOsDescription();
     m_endian = wxIsPlatformLittleEndian() ? wxENDIAN_LITTLE : wxENDIAN_BIG;
     m_arch = wxIsPlatform64Bit() ? wxARCH_64 : wxARCH_32;
+
+#ifdef __LINUX__
+    m_ldi = wxGetLinuxDistributionInfo();
+#endif
+    // else: leave m_ldi empty
 }
 
 /* static */
@@ -202,6 +207,12 @@ const wxPlatformInfo& wxPlatformInfo::Get()
     return gs_platInfo;
 }
 
+/* static */
+wxString wxPlatformInfo::GetOperatingSystemDirectory()
+{
+    return wxGetOSDirectory();
+}
+
 
 
 // ----------------------------------------------------------------------------
@@ -210,17 +221,17 @@ const wxPlatformInfo& wxPlatformInfo::Get()
 
 wxString wxPlatformInfo::GetOperatingSystemFamilyName(wxOperatingSystemId os)
 {
-    const wxChar* string = _T("Unknown");
+    const wxChar* string = wxT("Unknown");
     if ( os & wxOS_MAC )
-        string = _T("Macintosh");
+        string = wxT("Macintosh");
     else if ( os & wxOS_WINDOWS )
-        string = _T("Windows");
+        string = wxT("Windows");
     else if ( os & wxOS_UNIX )
-        string = _T("Unix");
+        string = wxT("Unix");
     else if ( os == wxOS_DOS )
-        string = _T("DOS");
+        string = wxT("DOS");
     else if ( os == wxOS_OS2 )
-        string = _T("OS/2");
+        string = wxT("OS/2");
 
     return string;
 }
@@ -230,7 +241,7 @@ wxString wxPlatformInfo::GetOperatingSystemIdName(wxOperatingSystemId os)
     const unsigned idx = wxGetIndexFromEnumValue(os);
 
     wxCHECK_MSG( idx < WXSIZEOF(wxOperatingSystemIdNames), wxEmptyString,
-                 _T("invalid OS id") );
+                 wxT("invalid OS id") );
 
     return wxOperatingSystemIdNames[idx];
 }
@@ -240,7 +251,7 @@ wxString wxPlatformInfo::GetPortIdName(wxPortId port, bool usingUniversal)
     const unsigned idx = wxGetIndexFromEnumValue(port);
 
     wxCHECK_MSG( idx < WXSIZEOF(wxPortIdNames), wxEmptyString,
-                 _T("invalid port id") );
+                 wxT("invalid port id") );
 
     wxString ret = wxPortIdNames[idx];
 
@@ -255,7 +266,7 @@ wxString wxPlatformInfo::GetPortIdShortName(wxPortId port, bool usingUniversal)
     const unsigned idx = wxGetIndexFromEnumValue(port);
 
     wxCHECK_MSG( idx < WXSIZEOF(wxPortIdNames), wxEmptyString,
-                 _T("invalid port id") );
+                 wxT("invalid port id") );
 
     wxString ret = wxPortIdNames[idx];
     ret = ret.Mid(2).Lower();       // remove 'wx' prefix