Author: hyperion
Date: Wed Jun 10 15:16:28 2009
New Revision: 41366
URL:
http://svn.reactos.org/svn/reactos?rev=41366&view=rev
Log:
deleted tools/msc_helper
deleted tools/msc_helper/msc_helper.cpp
deleted tools/msc_helper/msc_helper.rbuild
added tools/rbuild_helper
deleted tools/rbuild_helper/msc_helper.cpp
deleted tools/rbuild_helper/msc_helper.rbuild
added tools/rbuild_helper/rbuild_helper.rbuild
msc_helper renamed to rbuild_helper, because it could be useful to more than just
Visual C++
added tools/rbuild_helper/rbuild_helper.cpp
Allow rbuild_helper to override any environment variable, given an override prefix
(e.g., %VAR% will be replaced by %<override prefix>VAR%)
modified tools/tools.rbuild
Build rbuild_helper by default
Added:
trunk/reactos/tools/rbuild_helper/ (props changed)
- copied from r41235, trunk/reactos/tools/msc_helper/
trunk/reactos/tools/rbuild_helper/rbuild_helper.cpp (contents, props changed)
- copied, changed from r41235, trunk/reactos/tools/msc_helper/msc_helper.cpp
trunk/reactos/tools/rbuild_helper/rbuild_helper.rbuild (contents, props changed)
- copied, changed from r41235, trunk/reactos/tools/msc_helper/msc_helper.rbuild
Removed:
trunk/reactos/tools/msc_helper/
trunk/reactos/tools/rbuild_helper/msc_helper.cpp
trunk/reactos/tools/rbuild_helper/msc_helper.rbuild
Modified:
trunk/reactos/tools/tools.rbuild
Propchange: trunk/reactos/tools/rbuild_helper/
------------------------------------------------------------------------------
--- bugtraq:logregex (added)
+++ bugtraq:logregex Wed Jun 10 15:16:28 2009
@@ -1,0 +1,2 @@
+([Ii]ssue|[Bb]ug)s? #?(\d+)(,? ?#?(\d+))*(,? ?(and |or )?#?(\d+))?
+(\d+)
Propchange: trunk/reactos/tools/rbuild_helper/
------------------------------------------------------------------------------
bugtraq:message = See issue #%BUGID% for more details.
Propchange: trunk/reactos/tools/rbuild_helper/
------------------------------------------------------------------------------
bugtraq:url =
http://www.reactos.org/bugzilla/show_bug.cgi?id=%BUGID%
Propchange: trunk/reactos/tools/rbuild_helper/
------------------------------------------------------------------------------
svn:mergeinfo =
Propchange: trunk/reactos/tools/rbuild_helper/
------------------------------------------------------------------------------
tsvn:logminsize = 10
Removed: trunk/reactos/tools/rbuild_helper/msc_helper.cpp
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/msc_helper/msc_helpe…
==============================================================================
--- trunk/reactos/tools/rbuild_helper/msc_helper.cpp [iso-8859-1] (original)
+++ trunk/reactos/tools/rbuild_helper/msc_helper.cpp (removed)
@@ -1,475 +1,0 @@
-/*
- Copyright (c) 2009 KJK::Hyperion
-
- Permission is hereby granted, free of charge, to any person obtaining a
- copy of this software and associated documentation files (the "Software"),
- to deal in the Software without restriction, including without limitation
- the rights to use, copy, modify, merge, publish, distribute, sublicense,
- and/or sell copies of the Software, and to permit persons to whom the
- Software is furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- DEALINGS IN THE SOFTWARE.
-*/
-
-#include <functional>
-#include <iterator>
-
-#include <tchar.h>
-#include <limits.h>
-
-#include <stdio.h>
-
-#define WIN32_LEAN_AND_MEAN
-#define STRICT
-#include <windows.h>
-
-#undef RtlMoveMemory
-extern "C" DECLSPEC_IMPORT void NTAPI RtlMoveMemory(void UNALIGNED *, const
void UNALIGNED *, SIZE_T);
-
-#ifndef ARRAYSIZE
-#define ARRAYSIZE(X_) (sizeof(X_) / sizeof((X_)[0]))
-#endif
-
-#include <kjk/argv_parser.h>
-#include <kjk/stringz_iterator.h>
-
-using namespace kjk;
-
-namespace
-{
- bool WriteAll(HANDLE hFile, const void * p, size_t cb)
- {
- const char * pb = static_cast<const char *>(p);
- bool ret = cb == 0;
-
- while(cb)
- {
- DWORD cbToWrite;
-
- if(cb > MAXLONG)
- cbToWrite = MAXLONG;
- else
- cbToWrite = static_cast<DWORD>(cb);
-
- DWORD cbWritten;
- ret = !!WriteFile(hFile, pb, cbToWrite, &cbWritten, NULL);
-
- if(!ret)
- break;
-
- cb -= cbWritten;
- pb += cbWritten;
- }
-
- return ret;
- }
-
- DECLSPEC_NORETURN
- void Exit(DWORD dwExitCode)
- {
- for(;;) TerminateProcess(GetCurrentProcess(), dwExitCode);
- }
-
- DECLSPEC_NORETURN
- void Die(DWORD dwExitCode, const char * pszFunction, DWORD dwErrCode)
- {
- DWORD_PTR args[] = { (DWORD_PTR)pszFunction, dwErrCode };
-
- char * pszMessage;
- DWORD cchMessage = FormatMessageA
- (
- FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_ARGUMENT_ARRAY |
FORMAT_MESSAGE_FROM_STRING,
- "msc_helper: %1!s!() failed: error %2!lu!\n",
- 0,
- 0,
- (LPSTR)&pszMessage,
- 0,
- (va_list *)args
- );
-
- if(cchMessage)
- {
- (void)WriteAll(GetStdHandle(STD_ERROR_HANDLE), pszMessage, cchMessage);
- LocalFree((HLOCAL)pszMessage);
- }
-
- Exit(dwExitCode);
- }
-
- DECLSPEC_NORETURN
- void Die(const char * pszFunction)
- {
- Die(1, pszFunction, GetLastError());
- }
-
- DECLSPEC_NORETURN
- void Die(const char * pszFunction, DWORD dwExitCode)
- {
- Die(1, pszFunction, dwExitCode);
- }
-
- template<size_t N>
- DECLSPEC_NORETURN
- void DieMessage(const char (& msg)[N])
- {
- (void)WriteAll(GetStdHandle(STD_ERROR_HANDLE), msg, (N) - 1);
- Exit(1);
- }
-
- DECLSPEC_NORETURN
- void OutOfMemory()
- {
- DieMessage("msc_helper: out of memory\n");
- }
-
- class store_argument
- {
- private:
- char * m_arg;
- size_t m_argLen;
-
- public:
- // Pretend we are an STL container
- typedef TCHAR value_type;
- typedef TCHAR * pointer;
- typedef TCHAR& reference;
- typedef const TCHAR * const_pointer;
- typedef const TCHAR& const_reference;
-
- void push_back(TCHAR x)
- {
-#ifdef UNICODE
- if(x > CHAR_MAX)
- DieMessage("msc_helper: invalid character in command line\n");
-#endif
- m_arg = static_cast<char *>(HeapReAlloc(GetProcessHeap(), 0, m_arg, m_argLen +
1));
-
- if(m_arg == NULL)
- OutOfMemory();
-
- m_arg[m_argLen] = static_cast<char>(x);
- ++ m_argLen;
- }
-
- public:
- store_argument(): m_arg(static_cast<char *>(HeapAlloc(GetProcessHeap(), 0, 1))),
m_argLen(0)
- {
- if(m_arg == NULL)
- OutOfMemory();
- }
-
- const char * get_arg() const { return m_arg; }
- size_t get_arg_len() const { return m_argLen; }
- };
-
- class filter_output
- {
- private:
- const char * m_pFilterLine;
- size_t m_cbFilterLine;
- HANDLE m_hOutput;
- bool& m_fDone;
-
- static DWORD s_cbDummy;
- static DWORD s_pipeId;
-
- char m_buffer[1024];
- LPTSTR m_pszPipeName;
- HANDLE m_hReadFrom;
- OVERLAPPED m_asyncRead;
- char * m_pLineBuffer;
- size_t m_cbLineBuffer;
-
- bool begin_read()
- {
- bool bRet = !!ReadFile(m_hReadFrom, m_buffer, sizeof(m_buffer), &s_cbDummy,
&m_asyncRead);
-
- if(!bRet)
- {
- bRet = GetLastError() != ERROR_BROKEN_PIPE;
-
- if(bRet)
- {
- bRet = GetLastError() == ERROR_IO_PENDING;
-
- if(!bRet)
- Die("ReadFile");
- }
- }
-
- return bRet;
- }
-
- void push_input(size_t cbBufferValid)
- {
- if(m_fDone)
- {
- if(!WriteAll(m_hOutput, m_buffer, cbBufferValid))
- Die("WriteFile");
-
- return;
- }
-
- // Add the data read from output to the line buffer
- size_t cbLineBufferNew = m_cbLineBuffer + cbBufferValid;
-
- if(m_pLineBuffer)
- m_pLineBuffer = static_cast<char *>(HeapReAlloc(GetProcessHeap(), 0,
m_pLineBuffer, cbLineBufferNew));
- else
- m_pLineBuffer = static_cast<char *>(HeapAlloc(GetProcessHeap(), 0,
cbLineBufferNew));
-
- if(m_pLineBuffer == NULL)
- OutOfMemory();
-
- RtlMoveMemory(m_pLineBuffer + m_cbLineBuffer, m_buffer, cbBufferValid);
-
- // Parse all complete lines in the line buffer
- size_t cbLineStart = 0;
-
- for(size_t i = m_cbLineBuffer; i < cbLineBufferNew; ++ i)
- {
- // We have a complete line
- if(m_pLineBuffer[i] == '\n' || m_pLineBuffer[i] == '\r')
- {
- size_t cbLine = i - cbLineStart;
-
- ++ i;
-
- if(i < cbLineBufferNew && m_pLineBuffer[i - 1] == '\r' &&
m_pLineBuffer[i] == '\n')
- ++ i;
-
- size_t cbLineFull = i - cbLineStart;
-
- bool fMatched = cbLine == m_cbFilterLine && memcmp(m_pLineBuffer +
cbLineStart, m_pFilterLine, m_cbFilterLine) == 0;
-
- // The line doesn't match: dump it
- if(!fMatched)
- {
- if(!WriteAll(m_hOutput, m_pLineBuffer + cbLineStart, cbLineFull))
- Die("WriteFile");
- }
- // The line matches: we are done
- else
- m_fDone = fMatched;
-
- cbLineStart = i;
- }
-
- // Filtering is complete: from now on, just dump everything
- if(m_fDone)
- {
- if(!WriteAll(m_hOutput, m_buffer + i, cbLineBufferNew - i))
- Die("WriteFile");
-
- HeapFree(GetProcessHeap(), 0, m_pLineBuffer);
- return;
- }
- }
-
- // Re-buffer what's left
- m_cbLineBuffer = cbLineBufferNew - cbLineStart;
- RtlMoveMemory(m_pLineBuffer, m_pLineBuffer + cbLineStart, m_cbLineBuffer);
- }
-
- public:
- filter_output(const char * pFilterLine, size_t cbFilterLine, HANDLE hOutput, bool *
pfDone):
- m_pFilterLine(pFilterLine),
- m_cbFilterLine(cbFilterLine),
- m_hOutput(hOutput),
- m_fDone(*pfDone),
- m_asyncRead(),
- m_pLineBuffer(0),
- m_cbLineBuffer(0)
- {
- for(;;)
- {
- DWORD_PTR args[] = { GetCurrentProcessId(), s_pipeId };
-
- DWORD cchPipeName = FormatMessage
- (
- FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_ARGUMENT_ARRAY |
FORMAT_MESSAGE_FROM_STRING,
- TEXT("\\\\.\\pipe\\msc_helper-%1!08X!-%2!08X!"),
- 0,
- 0,
- (LPTSTR)&m_pszPipeName,
- 0,
- (va_list *)args
- );
-
- if(cchPipeName == 0)
- Die("FormatMessage");
-
- m_hReadFrom = CreateNamedPipe(m_pszPipeName, PIPE_ACCESS_INBOUND |
FILE_FLAG_OVERLAPPED, PIPE_TYPE_BYTE, 1, 0, 0, 0, NULL);
-
- ++ s_pipeId;
-
- if(m_hReadFrom != INVALID_HANDLE_VALUE)
- break;
-
- if(GetLastError() != ERROR_PIPE_BUSY)
- Die("CreateNamedPipe");
- }
-
- // Just in case
- bool fEmptyFilter = m_cbFilterLine == 0;
-
- if(fEmptyFilter)
- m_fDone = fEmptyFilter;
- }
-
- HANDLE open_write_end(LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD
dwFlagsAndAttributes, HANDLE hTemplateFile)
- {
- HANDLE hWritePipe = CreateFile(m_pszPipeName, GENERIC_WRITE, FILE_SHARE_READ,
lpSecurityAttributes, OPEN_EXISTING, dwFlagsAndAttributes, hTemplateFile);
-
- if(hWritePipe == INVALID_HANDLE_VALUE)
- Die("CreateFile");
-
- (void)begin_read();
- return hWritePipe;
- }
-
- HANDLE get_read_completion() const
- {
- return m_hReadFrom;
- }
-
- bool operator()()
- {
- DWORD cbBufferValid;
-
- if(!GetOverlappedResult(m_hReadFrom, &m_asyncRead, &cbBufferValid, TRUE))
- {
- bool b = GetLastError() != ERROR_BROKEN_PIPE;
-
- if(!b)
- return b;
-
- Die("ReadFile");
- }
-
- push_input(cbBufferValid);
- return begin_read();
- }
- };
-
- DWORD filter_output::s_cbDummy = 0;
- DWORD filter_output::s_pipeId = 0;
-}
-
-int main()
-{
- DWORD dwExitCode = 1;
-
- // Parse the command line
- LPCTSTR pszCommandLine = GetCommandLine();
-
- // Skip argv[0]
- pszCommandLine = skip_argument(stringz_begin(pszCommandLine),
stringz_end(pszCommandLine)).base();
-
- // Get argv[1]: the line that should be filtered out of the output
- // argv[2..N] will become argv[0..N-2] of the compiler
- store_argument filterLine;
- pszCommandLine = copy_argument(stringz_begin(pszCommandLine),
stringz_end(pszCommandLine), std::back_inserter(filterLine)).base();
-
- // Initialize the output filters
- bool fDone = false;
- filter_output filterStdOutput(filterLine.get_arg(), filterLine.get_arg_len(),
GetStdHandle(STD_OUTPUT_HANDLE), &fDone);
- filter_output filterStdError(filterLine.get_arg(), filterLine.get_arg_len(),
GetStdHandle(STD_ERROR_HANDLE), &fDone);
-
- // A handle that will never be signaled
- HANDLE hNever;
-
- if(!DuplicateHandle(GetCurrentProcess(), GetCurrentProcess(), GetCurrentProcess(),
&hNever, SYNCHRONIZE, FALSE, 0))
- Die("DuplicateHandle");
-
- // Fix the environment
- static TCHAR szPath[32768];
- DWORD cchPath = GetEnvironmentVariable(TEXT("MSC_HELPER_PATH"), szPath,
ARRAYSIZE(szPath));
-
- if(cchPath > ARRAYSIZE(szPath))
- DieMessage("msc_helper: %MSC_HELPER_PATH% variable too big\n");
-
- if(cchPath > 0 && !SetEnvironmentVariable(TEXT("PATH"), szPath))
- Die("SetEnvironmentVariable");
-
- // Run the sub-process
- STARTUPINFO si;
- GetStartupInfo(&si);
-
- si.dwFlags |= STARTF_USESTDHANDLES;
-
- si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
-
- SECURITY_ATTRIBUTES pipeAttributes = { sizeof(SECURITY_ATTRIBUTES), NULL, TRUE };
- si.hStdOutput = filterStdOutput.open_write_end(&pipeAttributes, 0, NULL);
- si.hStdError = filterStdError.open_write_end(&pipeAttributes, 0, NULL);
-
- PROCESS_INFORMATION pi = {};
-
- if(!CreateProcess(NULL, const_cast<LPTSTR>(pszCommandLine), NULL, NULL, TRUE, 0,
NULL, NULL, &si, &pi))
- Die("CreateProcess");
-
- CloseHandle(pi.hThread);
- CloseHandle(si.hStdOutput);
- CloseHandle(si.hStdError);
-
- (void)SetProcessWorkingSetSize(GetCurrentProcess(), (SIZE_T)-1, (SIZE_T)-1);
-
- HANDLE waitHandles[3] =
- {
- pi.hProcess,
- filterStdOutput.get_read_completion(),
- filterStdError.get_read_completion()
- };
-
- unsigned done = 0;
-
- char * pLineBuffer = NULL;
- size_t cbLineBuffer = 0;
-
- while(done < ARRAYSIZE(waitHandles))
- {
- switch(WaitForMultipleObjects(ARRAYSIZE(waitHandles), waitHandles, FALSE, INFINITE))
- {
- case WAIT_OBJECT_0:
- GetExitCodeProcess(pi.hProcess, &dwExitCode);
- waitHandles[WAIT_OBJECT_0] = hNever;
- ++ done;
- break;
-
- case WAIT_OBJECT_0 + 1:
- if(!filterStdOutput())
- {
- waitHandles[WAIT_OBJECT_0 + 1] = hNever;
- ++ done;
- }
-
- break;
-
- case WAIT_OBJECT_0 + 2:
- if(!filterStdError())
- {
- waitHandles[WAIT_OBJECT_0 + 2] = hNever;
- ++ done;
- }
-
- break;
-
- default:
- Die("WaitForMultipleObjects");
- }
- }
-
- Exit(dwExitCode);
-}
-
-// EOF
Removed: trunk/reactos/tools/rbuild_helper/msc_helper.rbuild
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/msc_helper/msc_helpe…
==============================================================================
--- trunk/reactos/tools/rbuild_helper/msc_helper.rbuild [iso-8859-1] (original)
+++ trunk/reactos/tools/rbuild_helper/msc_helper.rbuild (removed)
@@ -1,6 +1,0 @@
-<?xml version="1.0"?>
-<module name="msc_helper" type="buildtool">
- <define name="UNICODE" />
- <define name="_UNICODE" />
- <file>msc_helper.cpp</file>
-</module>
Copied: trunk/reactos/tools/rbuild_helper/rbuild_helper.cpp (from r41235,
trunk/reactos/tools/msc_helper/msc_helper.cpp)
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild_helper/rbuild…
==============================================================================
--- trunk/reactos/tools/msc_helper/msc_helper.cpp [iso-8859-1] (original)
+++ trunk/reactos/tools/rbuild_helper/rbuild_helper.cpp [iso-8859-1] Wed Jun 10 15:16:28
2009
@@ -20,11 +20,18 @@
DEALINGS IN THE SOFTWARE.
*/
+#if !defined(WIN32)
+
+// TODO: needs a near rewrite for UNIX, but it's not required right now
+int main() { return 1; }
+
+#else
+
#include <functional>
#include <iterator>
+#include <limits>
#include <tchar.h>
-#include <limits.h>
#include <stdio.h>
@@ -131,10 +138,11 @@
DieMessage("msc_helper: out of memory\n");
}
+ template<class CharT>
class store_argument
{
private:
- char * m_arg;
+ CharT * m_arg;
size_t m_argLen;
public:
@@ -147,27 +155,26 @@
void push_back(TCHAR x)
{
-#ifdef UNICODE
- if(x > CHAR_MAX)
+ if(x > std::numeric_limits<CharT>::max() || x <
std::numeric_limits<CharT>::min())
DieMessage("msc_helper: invalid character in command line\n");
-#endif
- m_arg = static_cast<char *>(HeapReAlloc(GetProcessHeap(), 0, m_arg, m_argLen +
1));
+
+ m_arg = static_cast<CharT *>(HeapReAlloc(GetProcessHeap(), 0, m_arg, (m_argLen +
1) * sizeof(CharT)));
if(m_arg == NULL)
OutOfMemory();
- m_arg[m_argLen] = static_cast<char>(x);
- ++ m_argLen;
+ m_arg[m_argLen] = static_cast<CharT>(x);
+ ++ m_argLen; // TODO: better allocation strategy
}
public:
- store_argument(): m_arg(static_cast<char *>(HeapAlloc(GetProcessHeap(), 0, 1))),
m_argLen(0)
+ store_argument(): m_arg(static_cast<CharT *>(HeapAlloc(GetProcessHeap(), 0, 1))),
m_argLen(0)
{
if(m_arg == NULL)
OutOfMemory();
}
- const char * get_arg() const { return m_arg; }
+ const CharT * get_arg() const { return m_arg; }
size_t get_arg_len() const { return m_argLen; }
};
@@ -363,6 +370,17 @@
DWORD filter_output::s_cbDummy = 0;
DWORD filter_output::s_pipeId = 0;
+
+ size_t LengthOfVersionStrings(const TCHAR * pszStrings)
+ {
+ size_t cchStrings = 0;
+
+ do
+ cchStrings += lstrlen(pszStrings + cchStrings) + 1;
+ while(pszStrings[cchStrings]);
+
+ return cchStrings + 1;
+ }
}
int main()
@@ -375,10 +393,15 @@
// Skip argv[0]
pszCommandLine = skip_argument(stringz_begin(pszCommandLine),
stringz_end(pszCommandLine)).base();
- // Get argv[1]: the line that should be filtered out of the output
- // argv[2..N] will become argv[0..N-2] of the compiler
- store_argument filterLine;
+ // Get argv[1]: the prefix for environment variable replacement
+ store_argument<TCHAR> envPrefix;
+ pszCommandLine = copy_argument(stringz_begin(pszCommandLine),
stringz_end(pszCommandLine), std::back_inserter(envPrefix)).base();
+
+ // Get argv[2]: the line that should be filtered out of the output
+ store_argument<char> filterLine;
pszCommandLine = copy_argument(stringz_begin(pszCommandLine),
stringz_end(pszCommandLine), std::back_inserter(filterLine)).base();
+
+ // argv[3..N] will become argv[0..N-3] of the compiler
// Initialize the output filters
bool fDone = false;
@@ -392,14 +415,62 @@
Die("DuplicateHandle");
// Fix the environment
- static TCHAR szPath[32768];
- DWORD cchPath = GetEnvironmentVariable(TEXT("MSC_HELPER_PATH"), szPath,
ARRAYSIZE(szPath));
-
- if(cchPath > ARRAYSIZE(szPath))
- DieMessage("msc_helper: %MSC_HELPER_PATH% variable too big\n");
-
- if(cchPath > 0 && !SetEnvironmentVariable(TEXT("PATH"), szPath))
- Die("SetEnvironmentVariable");
+ if(envPrefix.get_arg_len())
+ {
+ LPTCH pEnv = GetEnvironmentStrings();
+
+ if(!pEnv)
+ OutOfMemory();
+
+ SIZE_T cbEnv = LengthOfVersionStrings(pEnv) * sizeof(TCHAR);
+ LPVOID pDupEnv = HeapAlloc(GetProcessHeap(), 0, cbEnv);
+
+ if(!pDupEnv)
+ OutOfMemory();
+
+ RtlMoveMemory(pDupEnv, pEnv, cbEnv);
+ FreeEnvironmentStrings(pEnv);
+ pEnv = static_cast<TCHAR *>(pDupEnv);
+
+ LPCTSTR pszEnvVar = pEnv;
+
+ size_t cchPrefix = envPrefix.get_arg_len();
+ const TCHAR * pszBeginPrefix = envPrefix.get_arg();
+ const TCHAR * pszEndPrefix = pszBeginPrefix + cchPrefix;
+
+ do
+ {
+ const TCHAR * pszBeginName = pszEnvVar;
+ const TCHAR * pszEndName = std::find(stringz_begin(pszEnvVar), stringz_end(pszEnvVar),
TEXT('=')).base();
+ const TCHAR * pszBeginValue = pszEndName;
+
+ if(*pszEndName)
+ {
+ *const_cast<TCHAR *>(pszEndName) = 0;
+ ++ pszBeginValue;
+ }
+
+ size_t cchName = pszEndName - pszBeginName;
+
+ if(cchName >= cchPrefix && std::equal(pszBeginPrefix, pszEndPrefix,
pszBeginName))
+ {
+ SetEnvironmentVariable(pszBeginName, NULL);
+
+ if(cchName > cchPrefix)
+ SetEnvironmentVariable(pszBeginName + cchPrefix, *pszBeginValue ? pszBeginValue :
NULL);
+ }
+
+ pszEnvVar = pszBeginValue;
+
+ while(*pszEnvVar)
+ ++ pszEnvVar;
+
+ ++ pszEnvVar;
+ }
+ while(*pszEnvVar);
+
+ HeapFree(GetProcessHeap(), 0, pEnv);
+ }
// Run the sub-process
STARTUPINFO si;
@@ -472,4 +543,6 @@
Exit(dwExitCode);
}
+#endif
+
// EOF
Propchange: trunk/reactos/tools/rbuild_helper/rbuild_helper.cpp
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: trunk/reactos/tools/rbuild_helper/rbuild_helper.cpp
------------------------------------------------------------------------------
svn:mergeinfo =
Copied: trunk/reactos/tools/rbuild_helper/rbuild_helper.rbuild (from r41235,
trunk/reactos/tools/msc_helper/msc_helper.rbuild)
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/rbuild_helper/rbuild…
==============================================================================
--- trunk/reactos/tools/msc_helper/msc_helper.rbuild [iso-8859-1] (original)
+++ trunk/reactos/tools/rbuild_helper/rbuild_helper.rbuild [iso-8859-1] Wed Jun 10
15:16:28 2009
@@ -1,6 +1,6 @@
<?xml version="1.0"?>
-<module name="msc_helper" type="buildtool">
+<module name="rbuild_helper" type="buildtool">
<define name="UNICODE" />
<define name="_UNICODE" />
- <file>msc_helper.cpp</file>
+ <file>rbuild_helper.cpp</file>
</module>
Propchange: trunk/reactos/tools/rbuild_helper/rbuild_helper.rbuild
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: trunk/reactos/tools/rbuild_helper/rbuild_helper.rbuild
------------------------------------------------------------------------------
svn:mergeinfo =
Modified: trunk/reactos/tools/tools.rbuild
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/tools.rbuild?rev=413…
==============================================================================
--- trunk/reactos/tools/tools.rbuild [iso-8859-1] (original)
+++ trunk/reactos/tools/tools.rbuild [iso-8859-1] Wed Jun 10 15:16:28 2009
@@ -34,4 +34,7 @@
<directory name="utf16le">
<xi:include href="utf16le/utf16le.rbuild" />
</directory>
+<directory name="rbuild_helper">
+ <xi:include href="rbuild_helper/rbuild_helper.rbuild" />
+</directory>
</group>