]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/utils.cpp
added test mode to wxLongLongWx which allowed to find the bug in operator*=()
[wxWidgets.git] / src / os2 / utils.cpp
index 2bae71d97b58f55aba721de4f0990cba91b54144..a5dd628bad4d7f74a707b73edc0dd8fd37e596c4 100644 (file)
@@ -65,9 +65,9 @@ bool wxGetHostName(
     char                            zServer[256];
     char                            zComputer[256];
     unsigned long                   ulLevel = 0;
-    unsigned char*                  zBuffer;
-    unsigned long                   ulBuffer;
-    unsigned long*                  pulTotalAvail;
+    unsigned char*                  zBuffer = NULL;
+    unsigned long                   ulBuffer = 256;
+    unsigned long*                  pulTotalAvail = NULL;
 
     NetBios32GetInfo( (const unsigned char*)zServer
                      ,(const unsigned char*)zComputer
@@ -197,7 +197,7 @@ bool wxShell(
 // Get free memory in bytes, or -1 if cannot determine amount (e.g. on UNIX)
 long wxGetFreeMemory()
 {
-    void*                           pMemptr;
+    void*                           pMemptr = NULL;
     ULONG                           lSize;
     ULONG                           lMemFlags;
     APIRET                          rc;
@@ -265,6 +265,7 @@ void wxError(
 , const wxString&                   rTitle
 )
 {
+    wxBuffer = new wxChar[256];
     wxSprintf(wxBuffer, "%s\nContinue?", WXSTRINGCAST rMsg);
     if (::WinMessageBox( HWND_DESKTOP
                         ,NULL
@@ -273,6 +274,7 @@ void wxError(
                         ,0
                         ,MB_ICONEXCLAMATION | MB_YESNO
                        ) == MBID_YES)
+    delete[] wxBuffer;
     wxExit();
 }
 
@@ -334,8 +336,8 @@ bool wxWriteResource(
 , const wxString&                   rFile
 )
 {
-    HAB                             hab;
-    HINI                            hIni;
+    HAB                             hab = 0;
+    HINI                            hIni = 0;
 
     if (rFile != "")
     {
@@ -416,9 +418,10 @@ bool wxGetResource(
 , const wxString&                   rFile
 )
 {
-    HAB                             hab;
-    HINI                            hIni;
-    static const wxChar             zDefunkt[] = _T("$$default");
+    HAB                             hab = 0;
+    HINI                            hIni = 0;
+    wxChar                          zDefunkt[] = _T("$$default");
+    char                            zBuf[1000];
 
     if (rFile != "")
     {
@@ -429,11 +432,14 @@ bool wxGetResource(
                                               ,(PSZ)WXSTRINGCAST rSection
                                               ,(PSZ)WXSTRINGCAST rEntry
                                               ,(PSZ)zDefunkt
-                                              ,(void*)*ppValue
+                                              ,(PVOID)zBuf
                                               ,1000
                                              );
-            if (n != 0L || wxStrcmp(*ppValue, zDefunkt) == 0)
+            if (zBuf == NULL)
                 return FALSE;
+            if (n == 0L || wxStrcmp(zBuf, zDefunkt) == 0)
+                return FALSE;
+            zBuf[n-1] = '\0';
         }
         else
             return FALSE;
@@ -444,12 +450,16 @@ bool wxGetResource(
                                           ,(PSZ)WXSTRINGCAST rSection
                                           ,(PSZ)WXSTRINGCAST rEntry
                                           ,(PSZ)zDefunkt
-                                          ,(void*)*ppValue
+                                          ,(PVOID)zBuf
                                           ,1000
                                          );
-        if (n != 0L || wxStrcmp(*ppValue, zDefunkt) == 0)
+        if (zBuf == NULL)
+            return FALSE;
+        if (n == 0L || wxStrcmp(zBuf, zDefunkt) == 0)
             return FALSE;
+        zBuf[n-1] = '\0';
     }
+    strcpy((char*)*ppValue, zBuf);
     return TRUE;
 }
 
@@ -461,6 +471,8 @@ bool wxGetResource(
 )
 {
     wxChar*                         zStr = NULL;
+
+    zStr = new wxChar[1000];
     bool                            bSucc = wxGetResource( rSection
                                                           ,rEntry
                                                           ,(wxChar **)&zStr
@@ -473,7 +485,11 @@ bool wxGetResource(
         delete[] zStr;
         return TRUE;
     }
-    else return FALSE;
+    else
+    {
+        delete[] zStr;
+        return FALSE;
+    }
 }
 
 bool wxGetResource(
@@ -484,6 +500,8 @@ bool wxGetResource(
 )
 {
     wxChar*                           zStr = NULL;
+
+    zStr = new wxChar[1000];
     bool                              bSucc = wxGetResource( rSection
                                                             ,rEntry
                                                             ,(wxChar **)&zStr
@@ -496,7 +514,11 @@ bool wxGetResource(
         delete[] zStr;
         return TRUE;
     }
-    else return FALSE;
+    else
+    {
+        delete[] zStr;
+        return FALSE;
+    }
 }
 
 bool wxGetResource(
@@ -507,6 +529,8 @@ bool wxGetResource(
 )
 {
     wxChar*                         zStr = NULL;
+
+    zStr = new wxChar[1000];
     bool                            bSucc = wxGetResource( rSection
                                                           ,rEntry
                                                           ,(wxChar **)&zStr
@@ -519,7 +543,11 @@ bool wxGetResource(
         delete[] zStr;
         return TRUE;
     }
-    else return FALSE;
+    else
+    {
+        delete[] zStr;
+        return FALSE;
+    }
 }
 #endif // wxUSE_RESOURCES
 
@@ -595,6 +623,7 @@ wxChar* wxGetUserHome (
     wxChar*                         zHome;
     wxString                        sUser1(rUser);
 
+    wxBuffer = new wxChar[256];
     if (sUser1 != _T(""))
     {
         wxChar                      zTmp[64];
@@ -609,6 +638,7 @@ wxChar* wxGetUserHome (
                 if ((zHome = wxGetenv(_T("TMP"))) != NULL    ||
                     (zHome = wxGetenv(_T("TMPDIR"))) != NULL ||
                     (zHome = wxGetenv(_T("TEMP"))) != NULL)
+                    delete[] wxBuffer;
                     return *zHome ? zHome : (wxChar*)_T("\\");
             }
             if (wxStricmp(zTmp, WXSTRINGCAST sUser1) == 0)
@@ -616,13 +646,18 @@ wxChar* wxGetUserHome (
         }
     }
     if (sUser1 == _T(""))
+    {
         if ((zHome = wxGetenv(_T("HOME"))) != NULL)
         {
             wxStrcpy(wxBuffer, zHome);
             Unix2DosFilename(wxBuffer);
-            return wxBuffer;
+            wxStrcpy(zHome, wxBuffer);
+            delete[] wxBuffer;
+            return zHome;
         }
-        return NULL; // No home known!
+    }
+    delete[] wxBuffer;
+    return NULL; // No home known!
 }
 
 // Check whether this window wants to process messages, e.g. Stop button
@@ -634,8 +669,8 @@ bool wxCheckForInterrupt(
     if(pWnd)
     {
         QMSG                        vMsg;
-        HAB                         hab;
-        HWND                        hwndFilter;
+        HAB                         hab = 0;
+        HWND                        hwndFilter = NULLHANDLE;
         HWND                        hwndWin= (HWND) pWnd->GetHWND();
 
         while(::WinPeekMsg(hab, &vMsg, hwndFilter, 0, 0, PM_REMOVE))
@@ -703,12 +738,16 @@ void wxDisplaySize(
 {
     HPS                             hpsScreen;
     HDC                             hdcScreen;
+    LONG                            lWidth;
+    LONG                            lHeight;
 
     hpsScreen = ::WinGetScreenPS(HWND_DESKTOP);
     hdcScreen = ::GpiQueryDevice(hpsScreen);
-    ::DevQueryCaps(hdcScreen, CAPS_WIDTH, 1L, (PLONG)pWidth);
-    ::DevQueryCaps(hdcScreen, CAPS_HEIGHT, 1L, (PLONG)pHeight);
+    ::DevQueryCaps(hdcScreen, CAPS_WIDTH, 1L, &lWidth);
+    ::DevQueryCaps(hdcScreen, CAPS_HEIGHT, 1L, &lHeight);
     DevCloseDC(hdcScreen);
+    *pWidth = (int)lWidth;
+    *pHeight = (int)lHeight;
 }
 
 bool wxDirExists(