// This function must be called whenever _aArgs array is needed, since this // method is the one which parses _sArgs and fill _aArgs void CPathFinder::FillArgArray() { if (_sArgs.IsEmpty() || (_aArgs.GetSize() > 0)) return; CString sArgs(_sArgs); int nFrom, nTo; bool bQuotedArg = false; CArgument arg; sArgs.TrimLeft(); sArgs.TrimRight(); // add a blank space at the end of the string to include the last argument sArgs += " "; while ((nTo = sArgs.FindOneOf(_T(" \""))) != -1) { bQuotedArg = (sArgs[nTo] == '\"'); if (bQuotedArg) { nFrom = nTo + 1; if ((nTo = sArgs.Find('\"', nFrom)) == -1) break; arg.sValue = sArgs.Mid(nFrom, nTo - nFrom); } else { CString *pStr; if ((sArgs[0] == '/') || (sArgs[0] == '-')) { if (!arg.sFlag.IsEmpty()) { arg.SetFlag(arg.sFlag); _aArgs.Add(arg); arg.sFlag.Empty(); arg.sValue.Empty(); } pStr = &arg.sFlag; } else pStr = &arg.sValue; *pStr = sArgs.Left(nTo); } if (!arg.sValue.IsEmpty()) { arg.SetFlag(arg.sFlag); _aArgs.Add(arg); arg.sFlag.Empty(); arg.sValue.Empty(); } sArgs = sArgs.Right(sArgs.GetLength() - nTo - 1); sArgs.TrimLeft(); } // if the last argument is only a flag it hasn't been added yet if (!arg.sFlag.IsEmpty()) { arg.SetFlag(arg.sFlag); _aArgs.Add(arg); } }
void TestRegUtils::setUp() { CStdString sArgs(_T(" /s \"") + CTestUtils::GetTestFileFolder() + _T("TestRegUtils\\dv25_163cu.reg") + _T("\"")); CStdString sRegEditPath = SystemFolderInfo::GetWindowsPath() + _T("\\regedit.exe"); _tspawnlp( _P_WAIT, sRegEditPath.c_str(), sRegEditPath.c_str(), sArgs.c_str(), NULL ); }