Author: rharabien
Date: Sun Jan 15 13:24:26 2012
New Revision: 54971
URL:
http://svn.reactos.org/svn/reactos?rev=54971&view=rev
Log:
[SYSSETUP]
- Fix GetRosInstallCD - GetLogicalDriveStringsW returns drive paths, not letters.
- When building intl.cpl command line for unattended setup don't use %S - swprint
interprets it as multi-byte string. Use "%s" instead. This bug caused yesterdays
KVM problems.
Modified:
trunk/reactos/dll/win32/syssetup/wizard.c
Modified: trunk/reactos/dll/win32/syssetup/wizard.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/syssetup/wizard.…
==============================================================================
--- trunk/reactos/dll/win32/syssetup/wizard.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/syssetup/wizard.c [iso-8859-1] Sun Jan 15 13:24:26 2012
@@ -46,7 +46,7 @@
/* FUNCTIONS ****************************************************************/
BOOL
-GetRosInstallCD(WCHAR * szPath, DWORD dwPathLength);
+GetRosInstallCD(WCHAR *pwszPath, DWORD cchPathMax);
#ifdef VMWINST
static BOOL
@@ -883,7 +883,6 @@
LPARAM lParam)
{
PSETUPDATA SetupData;
- WCHAR szBuffer[1024];
/* Retrieve pointer to the global setup data */
SetupData = (PSETUPDATA)GetWindowLongPtr (hwndDlg, GWL_USERDATA);
@@ -907,19 +906,13 @@
switch (LOWORD(wParam))
{
case IDC_CUSTOMLOCALE:
- {
- wcscpy(szBuffer, L"rundll32.exe shell32.dll,Control_RunDLL
intl.cpl,,5");
- RunControlPanelApplet(hwndDlg, szBuffer);
+ RunControlPanelApplet(hwndDlg, L"rundll32.exe
shell32.dll,Control_RunDLL intl.cpl,,5");
/* FIXME: Update input locale name */
- }
- break;
+ break;
case IDC_CUSTOMLAYOUT:
- {
- wcscpy(szBuffer, L"rundll32.exe shell32.dll,Control_RunDLL
input.dll,@1");
- RunControlPanelApplet(hwndDlg, szBuffer);
- }
- break;
+ RunControlPanelApplet(hwndDlg, L"rundll32.exe
shell32.dll,Control_RunDLL input.dll,@1");
+ break;
}
}
break;
@@ -935,17 +928,13 @@
PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_BACK |
PSWIZB_NEXT);
if (SetupData->UnattendSetup)
{
- WCHAR szPath[MAX_PATH];
- if (GetRosInstallCD(szPath, MAX_PATH))
- {
- swprintf(szBuffer, L"rundll32.exe
shell32.dll,Control_RunDLL intl.cpl,,/f:\"%S\\reactos\\unattend.inf\"",
szPath);
- }
+ WCHAR wszPath[MAX_PATH], wszBuf[1024];
+ if (GetRosInstallCD(wszPath, _countof(wszPath)))
+ swprintf(wszBuf, L"rundll32.exe
shell32.dll,Control_RunDLL intl.cpl,,/f:\"%sreactos\\unattend.inf\"",
wszPath);
else
- {
- wcscpy(szBuffer, L"rundll32.exe
shell32.dll,Control_RunDLL intl.cpl,,/f:\"unattend.inf\"");
- }
-
- RunControlPanelApplet(hwndDlg, szBuffer);
+ wcscpy(wszBuf, L"rundll32.exe shell32.dll,Control_RunDLL
intl.cpl,,/f:\"unattend.inf\"");
+
+ RunControlPanelApplet(hwndDlg, wszBuf);
SetWindowLongPtr(hwndDlg, DWL_MSGRESULT, IDD_DATETIMEPAGE);
return TRUE;
}
@@ -2238,35 +2227,32 @@
*/
BOOL
-GetRosInstallCD(WCHAR * szPath, DWORD dwPathLength)
-{
- WCHAR szDrives[512];
- WCHAR szDrive[] = L"D:\\";
- DWORD dwLength, dwIndex;
- WCHAR * pDrive;
- dwLength = GetLogicalDriveStringsW(sizeof(szDrives) / sizeof(WCHAR), szDrives);
-
- if (dwLength > (sizeof(szDrives) / sizeof(WCHAR)) || dwLength == 0)
+GetRosInstallCD(WCHAR *pwszPath, DWORD cchPathMax)
+{
+ WCHAR wszDrives[512];
+ DWORD cchDrives;
+ WCHAR *pwszDrive;
+
+ cchDrives = GetLogicalDriveStringsW(_countof(wszDrives) - 1, wszDrives);
+ if (cchDrives == 0 || cchDrives >= _countof(wszDrives))
{
/* buffer too small or failure */
LogItem(SYSSETUP_SEVERITY_INFORMATION, L"GetLogicalDriveStringsW
failed");
return FALSE;
}
- pDrive = szDrives;
- for (dwIndex = 0; dwIndex < dwLength; dwIndex++)
- {
- szDrive[0] = pDrive[dwIndex];
- if (GetDriveTypeW(szDrive) == DRIVE_CDROM)
- {
- WCHAR szBuffer[MAX_PATH];
- wcscpy(szBuffer, szDrive);
- wcscat(szBuffer, L"reactos\\system32\\ntoskrnl.exe");
- LogItem(SYSSETUP_SEVERITY_INFORMATION, szBuffer);
- if (GetFileAttributesW(szBuffer) != INVALID_FILE_ATTRIBUTES)
+ for (pwszDrive = wszDrives; pwszDrive[0]; pwszDrive += wcslen(pwszDrive) + 1)
+ {
+ if (GetDriveTypeW(pwszDrive) == DRIVE_CDROM)
+ {
+ WCHAR wszBuf[MAX_PATH];
+ wsprintf(wszBuf, L"%sreactos\\system32\\ntoskrnl.exe", pwszDrive);
+ LogItem(SYSSETUP_SEVERITY_INFORMATION, wszBuf);
+ if (GetFileAttributesW(wszBuf) != INVALID_FILE_ATTRIBUTES)
{
/* the file exists, so this is the right drive */
- wcsncpy(szPath, szDrive, dwPathLength);
+ wcsncpy(pwszPath, pwszDrive, cchPathMax);
+ OutputDebugStringW(L"GetRosInstallCD:
");OutputDebugStringW(pwszPath);OutputDebugStringW(L"\n");
return TRUE;
}
}