[ros-diffs] [dreimer] 30111: Patch by Pierre Schweitzer: This is first part to get rid of TODO list - Reorganized code - Added check to avoid buffer overflow - Removed unused vars - Improved Save button status

dreimer at svn.reactos.org dreimer at svn.reactos.org
Sun Nov 4 15:05:34 CET 2007


Author: dreimer
Date: Sun Nov  4 17:05:34 2007
New Revision: 30111

URL: http://svn.reactos.org/svn/reactos?rev=30111&view=rev
Log:
Patch by Pierre Schweitzer:
This is first part to get rid of TODO list
- Reorganized code
- Added check to avoid buffer overflow
- Removed unused vars
- Improved Save button status

Added:
    trunk/tools/RosBE-Windows/Tools/config/options.h   (with props)
Modified:
    trunk/tools/RosBE-Windows/Tools/config/options.c
    trunk/tools/RosBE-Windows/Tools/config/resources.h
    trunk/tools/RosBE-Windows/Tools/config/todo.txt

Modified: trunk/tools/RosBE-Windows/Tools/config/options.c
URL: http://svn.reactos.org/svn/reactos/trunk/tools/RosBE-Windows/Tools/config/options.c?rev=30111&r1=30110&r2=30111&view=diff
==============================================================================
--- trunk/tools/RosBE-Windows/Tools/config/options.c (original)
+++ trunk/tools/RosBE-Windows/Tools/config/options.c Sun Nov  4 17:05:34 2007
@@ -1,33 +1,14 @@
 /*
- * RosBE Options Dialog (options.c)
+ * PROJECT:     RosBE Options Dialog
+ * LICENSE:     GPL - See LICENSE.txt in the top level directory.
+ * FILE:        Tools/config/options.c
+ * PURPOSE:     COnfiguring RosBE
+ * COPYRIGHT:   Copyright 2007 Maarten Bosma
+ *              Copyright 2007 Pierre Schweitzer
  *
- * Copyright 2007 by Maarten Bosma
- *                   Pierre Schweitzer
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program ; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
-#include <windows.h>
-#include <stdio.h>
-#include <shlobj.h>
-#include <wchar.h>
-#include "resources.h"
-
-#define MINGWVERSION L"\\4.1.3"
-
-typedef LPITEMIDLIST (CALLBACK* ILCREATEFROMPATHW)(LPCWSTR path);
+#include "options.h"
 
 // note: do not change the order - theses are the color under winxp they might differ in another OSes
 WCHAR *Colors[] = { L"black", L"dark blue", L"dark green", L"turquoise", L"dark red", L"purple",
@@ -46,8 +27,8 @@
 INT
 WriteSettings(HWND hwnd)
 {
-    int foreground, background;
-    BOOL showtime, writelog, useccache, strip, otherobj, otherout;
+    INT foreground, background;
+    BOOL showtime, writelog, useccache, strip;
     WCHAR logdir[MAX_PATH], objdir[MAX_PATH], outdir[MAX_PATH], mingwpath[MAX_PATH], checkmgw[MAX_PATH], checklog[MAX_PATH], optionsfile[MAX_PATH];
     WCHAR msgerror[256];
     HANDLE hFile;
@@ -57,10 +38,8 @@
     writelog = (SendDlgItemMessage(hwnd, ID_SAVELOGS, BM_GETCHECK, 0, 0) == BST_CHECKED);
     useccache = (SendDlgItemMessage(hwnd, ID_USECCACHE, BM_GETCHECK, 0, 0) == BST_CHECKED);
     strip = (SendDlgItemMessageW(hwnd, ID_STRIP, BM_GETCHECK, 0, 0) == BST_CHECKED);
-    otherobj = (SendDlgItemMessageW(hwnd, ID_OTHEROBJ, BM_GETCHECK, 0, 0) == BST_CHECKED);
-    otherout = (SendDlgItemMessageW(hwnd, ID_OTHEROUT, BM_GETCHECK, 0, 0) == BST_CHECKED);
-    foreground = (UINT)SendDlgItemMessageW(hwnd, IDC_FONT, CB_GETCURSEL, 0, 0);
-    background = (UINT)SendDlgItemMessageW(hwnd, IDC_BACK, CB_GETCURSEL, 0, 0);
+    foreground = SendDlgItemMessageW(hwnd, IDC_FONT, CB_GETCURSEL, 0, 0);
+    background = SendDlgItemMessageW(hwnd, IDC_BACK, CB_GETCURSEL, 0, 0);
     GetDlgItemTextW(hwnd, ID_LOGDIR, logdir, MAX_PATH);
     GetDlgItemTextW(hwnd, ID_MGWDIR, mingwpath, MAX_PATH);
     GetDlgItemTextW(hwnd, ID_OBJDIR, objdir, MAX_PATH);
@@ -97,7 +76,8 @@
     CloseHandle(hFile);
 
     wcscpy(optionsfile, _wgetenv(L"APPDATA"));
-    wcscat(optionsfile, L"\\RosBE\\rosbe-options.cmd");
+    if ((wcslen(optionsfile) + wcslen(L"\\RosBE\\rosbe-options.cmd")) < MAX_PATH)
+        wcscat(optionsfile, L"\\RosBE\\rosbe-options.cmd");
     pFile = _wfopen(optionsfile, L"w");
     if (pFile)
     {
@@ -122,17 +102,93 @@
     return FALSE;
 }
 
+VOID LoadSettings(HWND hwnd, PSETTINGS LoadedSettings)
+{
+    // Loading settings is not yet implemented. This function just apply default settings.
+#if 0
+    FILE *pFile;
+#endif
+    WCHAR optionsfile[MAX_PATH];
+
+    wcscpy(optionsfile, _wgetenv(L"APPDATA"));
+    if ((wcslen(optionsfile) + wcslen(L"\\RosBE\\rosbe-options.cmd")) < MAX_PATH)
+        wcscat(optionsfile, L"\\RosBE\\rosbe-options.cmd");
+#if 0
+    pFile = _wfopen(optionsfile, L"r");
+    if (pFile)
+    {
+        fclose(pFile);
+    }
+    else
+    {
+#endif
+        LoadedSettings->foreground = 0xa;
+        LoadedSettings->background = 0;
+        GetCurrentDirectory(MAX_PATH, LoadedSettings->mingwpath);
+        if ((wcslen(LoadedSettings->mingwpath) + wcslen(MINGWVERSION)) < MAX_PATH)
+            wcscat(LoadedSettings->mingwpath, MINGWVERSION);
+#if 0
+    }
+#endif
+    SendDlgItemMessageW(hwnd, IDC_FONT, CB_SETCURSEL, LoadedSettings->foreground, 0);
+    SendDlgItemMessageW(hwnd, IDC_BACK, CB_SETCURSEL, LoadedSettings->background, 0);
+    SetDlgItemText(hwnd, ID_MGWDIR, LoadedSettings->mingwpath);
+}
+
+VOID SetSaveState(HWND hwnd, PSETTINGS DefaultSettings)
+{
+    INT foreground, background;
+    BOOL showtime, writelog, useccache, strip;
+    WCHAR logdir[MAX_PATH], objdir[MAX_PATH], outdir[MAX_PATH], mingwpath[MAX_PATH];
+    BOOL StateObj = TRUE, StateOut = TRUE, StateLog = TRUE, State = TRUE;
+
+    showtime = (SendDlgItemMessage(hwnd, ID_SHOWBUILDTIME, BM_GETCHECK, 0, 0) == BST_CHECKED);
+    writelog = (SendDlgItemMessage(hwnd, ID_SAVELOGS, BM_GETCHECK, 0, 0) == BST_CHECKED);
+    useccache = (SendDlgItemMessage(hwnd, ID_USECCACHE, BM_GETCHECK, 0, 0) == BST_CHECKED);
+    strip = (SendDlgItemMessageW(hwnd, ID_STRIP, BM_GETCHECK, 0, 0) == BST_CHECKED);
+    foreground = SendDlgItemMessageW(hwnd, IDC_FONT, CB_GETCURSEL, 0, 0);
+    background = SendDlgItemMessageW(hwnd, IDC_BACK, CB_GETCURSEL, 0, 0);
+    GetDlgItemTextW(hwnd, ID_LOGDIR, logdir, MAX_PATH);
+    GetDlgItemTextW(hwnd, ID_MGWDIR, mingwpath, MAX_PATH);
+    GetDlgItemTextW(hwnd, ID_OBJDIR, objdir, MAX_PATH);
+    GetDlgItemTextW(hwnd, ID_OUTDIR, outdir, MAX_PATH);
+
+    if (SendDlgItemMessageW(hwnd, ID_OTHEROBJ, BM_GETCHECK, 0, 0) == BST_CHECKED)
+    {
+        if ((wcscmp(objdir, DefaultSettings->objdir) != 0) && wcslen(objdir) > 0)
+            StateObj = FALSE;
+    }
+    if (SendDlgItemMessageW(hwnd, ID_OTHEROUT, BM_GETCHECK, 0, 0) == BST_CHECKED)
+    {
+        if ((wcscmp(outdir, DefaultSettings->outdir) != 0) && wcslen(outdir) > 0)
+            StateOut = FALSE;
+    }
+    if (writelog)
+    {
+        if ((wcscmp(logdir, DefaultSettings->logdir) != 0) && wcslen(logdir) > 0)
+            StateLog = FALSE;
+    }
+
+    State ^= ((foreground == DefaultSettings->foreground) && (background == DefaultSettings->background) &&
+            (showtime == DefaultSettings->showtime) && (writelog == DefaultSettings->writelog) &&
+            (useccache == DefaultSettings->useccache) && (strip == DefaultSettings->strip) &&
+            (StateLog) && (wcscmp(mingwpath, DefaultSettings->mingwpath) == 0) &&
+            (StateObj) && (StateOut));
+
+    EnableWindow(GetDlgItem(hwnd, ID_OK), State);
+}
+
 INT_PTR CALLBACK
 DlgProc(HWND Dlg, UINT Msg, WPARAM wParam, LPARAM lParam)
 {
     static HICON hIcon;
     static HFONT hFont;
+    static SETTINGS Settings;
 
     switch (Msg)
     {
         case WM_INITDIALOG:
         {
-            WCHAR Path[MAX_PATH];
             LOGFONT lf;
 
             hIcon = LoadImage( hInstance,
@@ -155,13 +211,7 @@
                 SendDlgItemMessageW(Dlg, IDC_BACK, CB_ADDSTRING, 0, (LPARAM) (Colors[i]));
                 SendDlgItemMessageW(Dlg, IDC_FONT, CB_ADDSTRING, 0, (LPARAM) (Colors[i]));
             }
-            SendDlgItemMessageW(Dlg, IDC_FONT, CB_SETCURSEL, 0xa, 0);
-            SendDlgItemMessageW(Dlg, IDC_BACK, CB_SETCURSEL, 0, 0);
-            GetCurrentDirectory(MAX_PATH, Path);
-            if ((wcslen(Path) + wcslen(MINGWVERSION)) < MAX_PATH)
-                wcscat(Path, MINGWVERSION);
-            SetDlgItemText(Dlg, ID_MGWDIR, Path);
-
+            LoadSettings(Dlg, &Settings);
             return TRUE;
         }
 
@@ -172,7 +222,6 @@
                 RECT rcWnd;
                 GetClientRect(GetDlgItem(Dlg, ID_EXAMPLE), &rcWnd);
                 InvalidateRect(GetDlgItem(Dlg, ID_EXAMPLE), &rcWnd, FALSE);
-                EnableWindow(GetDlgItem(Dlg, ID_OK), TRUE);
             }
             else
             {
@@ -231,20 +280,12 @@
                             }
                         }
                         pidl = SHBrowseForFolder(&PathInfo);
-                        if (!pidl || !SHGetPathFromIDList(pidl, path))
-                            break;
-                        SetDlgItemText(Dlg, Control, path);
+                        if (pidl && SHGetPathFromIDList(pidl, path))
+                            SetDlgItemText(Dlg, Control, path);
+                        break;
                     }
-                    case ID_STRIP:
-                    case ID_USECCACHE:
-                    case ID_SHOWBUILDTIME:
                     case ID_OTHEROBJ:
                     case ID_OTHEROUT:
-                    {
-                        EnableWindow(GetDlgItem(Dlg, ID_OK), TRUE);
-                        if ((wParam != ID_OTHEROBJ) && (wParam != ID_OTHEROUT))
-                            break;
-                    }
                     case ID_SAVELOGS:
                     {
                         BOOL WriteLogSet;
@@ -269,6 +310,7 @@
                 }
 
             }
+            SetSaveState(Dlg, &Settings);
             return FALSE;
         }
 

Added: trunk/tools/RosBE-Windows/Tools/config/options.h
URL: http://svn.reactos.org/svn/reactos/trunk/tools/RosBE-Windows/Tools/config/options.h?rev=30111&view=auto
==============================================================================
--- trunk/tools/RosBE-Windows/Tools/config/options.h (added)
+++ trunk/tools/RosBE-Windows/Tools/config/options.h Sun Nov  4 17:05:34 2007
@@ -1,0 +1,34 @@
+/*
+ * PROJECT:     RosBE Options Dialog
+ * LICENSE:     GPL - See LICENSE.txt in the top level directory.
+ * FILE:        Tools/config/options.h
+ * PURPOSE:     COnfiguring RosBE
+ * COPYRIGHT:   Copyright 2007 Maarten Bosma
+ *              Copyright 2007 Pierre Schweitzer
+ *
+ */
+
+#include <windows.h>
+#include <stdio.h>
+#include <shlobj.h>
+#include <wchar.h>
+#include "resources.h"
+
+#define MINGWVERSION L"\\4.1.3"
+
+typedef LPITEMIDLIST (CALLBACK* ILCREATEFROMPATHW)(LPCWSTR path);
+
+typedef struct _SETTINGS
+{
+    WCHAR logdir[MAX_PATH];
+    WCHAR objdir[MAX_PATH];
+    WCHAR outdir[MAX_PATH];
+    WCHAR mingwpath[MAX_PATH];
+    INT foreground;
+    INT background;
+    BOOL showtime;
+    BOOL useccache;
+    BOOL strip;
+    BOOL writelog;
+}
+SETTINGS, *PSETTINGS;

Propchange: trunk/tools/RosBE-Windows/Tools/config/options.h
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: trunk/tools/RosBE-Windows/Tools/config/resources.h
URL: http://svn.reactos.org/svn/reactos/trunk/tools/RosBE-Windows/Tools/config/resources.h?rev=30111&r1=30110&r2=30111&view=diff
==============================================================================
--- trunk/tools/RosBE-Windows/Tools/config/resources.h (original)
+++ trunk/tools/RosBE-Windows/Tools/config/resources.h Sun Nov  4 17:05:34 2007
@@ -1,3 +1,13 @@
+/*
+ * PROJECT:     RosBE Options Dialog
+ * LICENSE:     GPL - See LICENSE.txt in the top level directory.
+ * FILE:        Tools/config/resources.h
+ * PURPOSE:     COnfiguring RosBE
+ * COPYRIGHT:   Copyright 2007 Maarten Bosma
+ *              Copyright 2007 Pierre Schweitzer
+ *
+ */
+
 /* Controls */
 #define ID_OK 0x01
 #define ID_CANCEL 0x02

Modified: trunk/tools/RosBE-Windows/Tools/config/todo.txt
URL: http://svn.reactos.org/svn/reactos/trunk/tools/RosBE-Windows/Tools/config/todo.txt?rev=30111&r1=30110&r2=30111&view=diff
==============================================================================
--- trunk/tools/RosBE-Windows/Tools/config/todo.txt (original)
+++ trunk/tools/RosBE-Windows/Tools/config/todo.txt Sun Nov  4 17:05:34 2007
@@ -1,3 +1,2 @@
 ToDo:
 - Load old settings
-- Improve Save button status (disabled if no changes, even if user played with param)




More information about the Ros-diffs mailing list