mirror of
https://github.com/reactos/reactos.git
synced 2025-08-04 17:05:45 +00:00
- silence a few debug messages
- implement creating of disk images with qemu-img for windows svn path=/trunk/; revision=28624
This commit is contained in:
parent
df0b2c80d4
commit
2d0f7aa512
4 changed files with 68 additions and 17 deletions
|
@ -84,7 +84,7 @@ namespace Sysreg_
|
||||||
ConfigMap::iterator it = m_Map.find (ConfVariable);
|
ConfigMap::iterator it = m_Map.find (ConfVariable);
|
||||||
if (it == m_Map.end ())
|
if (it == m_Map.end ())
|
||||||
{
|
{
|
||||||
cerr << "ConfigParser::getValue failed to find " << ConfVariable << endl;
|
//cerr << "ConfigParser::getValue failed to find " << ConfVariable << endl;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,36 +25,66 @@ namespace System_
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
OsSupport::ProcessID OsSupport::createProcess(TCHAR *procname, int procargsnum, TCHAR **procargs)
|
OsSupport::ProcessID OsSupport::createProcess(TCHAR *procname, int procargsnum, TCHAR **procargs, bool wait)
|
||||||
{
|
{
|
||||||
STARTUPINFO siStartInfo;
|
STARTUPINFO siStartInfo;
|
||||||
PROCESS_INFORMATION piProcInfo;
|
PROCESS_INFORMATION piProcInfo;
|
||||||
OsSupport::ProcessID pid;
|
OsSupport::ProcessID pid;
|
||||||
|
DWORD length = 0;
|
||||||
UNREFERENCED_PARAMETER(procargsnum);
|
TCHAR * szBuffer;
|
||||||
UNREFERENCED_PARAMETER(procargs);
|
TCHAR * cmd;
|
||||||
|
|
||||||
ZeroMemory(&siStartInfo, sizeof(STARTUPINFO));
|
ZeroMemory(&siStartInfo, sizeof(STARTUPINFO));
|
||||||
ZeroMemory(&piProcInfo, sizeof(PROCESS_INFORMATION));
|
ZeroMemory(&piProcInfo, sizeof(PROCESS_INFORMATION));
|
||||||
|
|
||||||
siStartInfo.cb = sizeof(STARTUPINFO);
|
siStartInfo.cb = sizeof(STARTUPINFO);
|
||||||
siStartInfo.wShowWindow = SW_SHOWNORMAL;
|
siStartInfo.wShowWindow = SW_SHOWNORMAL;
|
||||||
siStartInfo.dwFlags = STARTF_USESHOWWINDOW;
|
siStartInfo.dwFlags = STARTF_USESHOWWINDOW;
|
||||||
|
|
||||||
|
if (procargsnum)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < procargsnum; i++)
|
||||||
|
{
|
||||||
|
length += _tcslen(procargs[i]);
|
||||||
|
}
|
||||||
|
|
||||||
LPTSTR command = _tcsdup(procname);
|
length += procargsnum;
|
||||||
|
szBuffer = (TCHAR*)malloc(length * sizeof(TCHAR));
|
||||||
|
length = 0;
|
||||||
|
for (int i = 0; i < procargsnum; i++)
|
||||||
|
{
|
||||||
|
_tcscpy(&szBuffer[length], procargs[i]);
|
||||||
|
length += _tcslen(procargs[i]);
|
||||||
|
szBuffer[length] = _T(' ');
|
||||||
|
length++;
|
||||||
|
}
|
||||||
|
length = _tcslen(procname) + _tcslen(szBuffer) + 2;
|
||||||
|
cmd = (TCHAR*)malloc(length * sizeof(TCHAR));
|
||||||
|
_tcscpy(cmd, procname);
|
||||||
|
_tcscat(cmd, _T(" "));
|
||||||
|
_tcscat(cmd, szBuffer);
|
||||||
|
free(szBuffer);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cmd = _tcsdup(procname);
|
||||||
|
|
||||||
if (!CreateProcess(NULL, procname, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &siStartInfo, &piProcInfo))
|
}
|
||||||
|
if (!CreateProcess(NULL, cmd, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &siStartInfo, &piProcInfo))
|
||||||
{
|
{
|
||||||
cerr << "Error: CreateProcess failed " << command <<endl;
|
cerr << "Error: CreateProcess failed " << cmd << endl;
|
||||||
pid = 0;
|
pid = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pid = piProcInfo.dwProcessId;
|
pid = piProcInfo.dwProcessId;
|
||||||
|
if (wait)
|
||||||
|
{
|
||||||
|
WaitForSingleObject(piProcInfo.hThread, INFINITE);
|
||||||
|
}
|
||||||
CloseHandle(piProcInfo.hProcess);
|
CloseHandle(piProcInfo.hProcess);
|
||||||
CloseHandle(piProcInfo.hThread);
|
CloseHandle(piProcInfo.hThread);
|
||||||
}
|
}
|
||||||
free(command);
|
free(cmd);
|
||||||
return pid;
|
return pid;
|
||||||
}
|
}
|
||||||
void OsSupport::sleep(long value)
|
void OsSupport::sleep(long value)
|
||||||
|
|
|
@ -62,7 +62,7 @@ namespace System_
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
|
|
||||||
static ProcessID createProcess(TCHAR * procname, int procargsnum, TCHAR ** procargs);
|
static ProcessID createProcess(TCHAR * procname, int procargsnum, TCHAR ** procargs, bool wait);
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
//#include "sym_file.h"
|
//#include "sym_file.h"
|
||||||
#include "file_reader.h"
|
#include "file_reader.h"
|
||||||
#include "os_support.h"
|
#include "os_support.h"
|
||||||
|
#include "env_var.h"
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
@ -36,6 +37,7 @@ namespace Sysreg_
|
||||||
/* using System_::SymbolFile; */
|
/* using System_::SymbolFile; */
|
||||||
using System_::FileReader;
|
using System_::FileReader;
|
||||||
using System_::OsSupport;
|
using System_::OsSupport;
|
||||||
|
using System_::EnvironmentVariable;
|
||||||
|
|
||||||
#ifdef UNICODE
|
#ifdef UNICODE
|
||||||
using std::wofstream;
|
using std::wofstream;
|
||||||
|
@ -74,7 +76,7 @@ namespace Sysreg_
|
||||||
//---------------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------------
|
||||||
bool RosBootTest::executeBootCmd()
|
bool RosBootTest::executeBootCmd()
|
||||||
{
|
{
|
||||||
m_Pid = OsSupport::createProcess ((TCHAR*)m_BootCmd.c_str(), 0, NULL);
|
m_Pid = OsSupport::createProcess ((TCHAR*)m_BootCmd.c_str(), 0, NULL, false);
|
||||||
if (!m_Pid)
|
if (!m_Pid)
|
||||||
{
|
{
|
||||||
cerr << "Error: failed to launch boot cmd" << m_BootCmd << endl;
|
cerr << "Error: failed to launch boot cmd" << m_BootCmd << endl;
|
||||||
|
@ -140,15 +142,34 @@ namespace Sysreg_
|
||||||
string qemuimgdir = qemupath;
|
string qemuimgdir = qemupath;
|
||||||
m_HDDImage = _T("ros.img");
|
m_HDDImage = _T("ros.img");
|
||||||
#ifdef __LINUX___
|
#ifdef __LINUX___
|
||||||
qemuimgdir += _T("qemu-img");
|
qemuimgdir += _T("\\qemu-img");
|
||||||
#else
|
#else
|
||||||
qemuimgdir += _T("qemu-img.exe");
|
qemuimgdir += _T("\\qemu-img.exe");
|
||||||
#endif
|
#endif
|
||||||
///
|
///
|
||||||
/// FIXME
|
/// FIXME
|
||||||
/// call qemu-img to create the tool
|
/// call qemu-img to create the tool
|
||||||
///
|
///
|
||||||
cerr << "Creating HDD Image ..." << qemuimgdir << endl;
|
TCHAR * options[] = {
|
||||||
|
_T("create"),
|
||||||
|
NULL,
|
||||||
|
_T("100M"),
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
string output = "output-i386";
|
||||||
|
EnvironmentVariable::getValue(_T("ROS_OUTPUT"), output);
|
||||||
|
output += _T("\\ros.hd");
|
||||||
|
options[1] = (TCHAR*)output.c_str();
|
||||||
|
|
||||||
|
cerr << "Creating HDD Image ..." << output << endl;
|
||||||
|
if (OsSupport::createProcess ((TCHAR*)qemuimgdir.c_str(), 3, options, true))
|
||||||
|
{
|
||||||
|
m_HDDImage = output;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!bootcmdprovided)
|
if (!bootcmdprovided)
|
||||||
|
@ -170,11 +191,11 @@ namespace Sysreg_
|
||||||
|
|
||||||
if (bootfromcd)
|
if (bootfromcd)
|
||||||
{
|
{
|
||||||
m_BootCmd = m_EmuPath + _T(" -serial ") + pipe + _T(" -m ") + m_MaxMem + _T(" -hda ") + m_HDDImage + _T(" -boot d -cdrom ") + m_CDImage;
|
m_BootCmd = m_EmuPath + _T(" -serial ") + pipe + _T(" -m ") + m_MaxMem + _T(" -hda ") + m_HDDImage + _T(" -boot d -cdrom ") + m_CDImage + _T(" -L ") + qemupath;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_BootCmd = m_EmuPath + _T(" -L ") + qemupath + _T(" -m ") + m_MaxMem + _T(" -boot c -serial ") + pipe;
|
m_BootCmd = m_EmuPath + _T(" -L ") + qemupath + _T(" -m ") + m_MaxMem + _T(" -boot c -serial ") + pipe + _T(" -hda ") + m_HDDImage;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_KillEmulator == _T("yes"))
|
if (m_KillEmulator == _T("yes"))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue