summaryrefslogtreecommitdiff
path: root/basic/source/app/process.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'basic/source/app/process.cxx')
-rw-r--r--basic/source/app/process.cxx111
1 files changed, 67 insertions, 44 deletions
diff --git a/basic/source/app/process.cxx b/basic/source/app/process.cxx
index bd06aa0425..55b3369ded 100644
--- a/basic/source/app/process.cxx
+++ b/basic/source/app/process.cxx
@@ -36,10 +36,10 @@
#include <tools/postwin.h>
#endif
#include <tools/errcode.hxx>
-#include <vos/process.hxx>
#include <basic/sbxcore.hxx>
#include <tools/string.hxx>
#include <osl/file.hxx>
+#include <osl/process.h>
#include <basic/ttstrhlp.hxx>
@@ -51,29 +51,46 @@
#include <basic/process.hxx>
Process::Process()
-: pArgumentList( NULL )
-, pEnvList( NULL )
-, pProcess( NULL )
+: m_nArgumentCount( 0 )
+, m_pArgumentList( NULL )
+, m_nEnvCount( 0 )
+, m_pEnvList( NULL )
+, m_aProcessName()
+, m_pProcess( NULL )
, bWasGPF( FALSE )
, bHasBeenStarted( FALSE )
{
}
+#define FREE_USTRING_LIST( count, list ) \
+ if ( count && list ) \
+ { \
+ for ( unsigned int i = 0; i < count; ++i ) \
+ { \
+ rtl_uString_release( list[i] ); \
+ list[i] = NULL; \
+ } \
+ delete[] list; \
+ } \
+ count = 0; \
+ list = NULL;
+
Process::~Process()
{
-// delete pArgumentList;
-// delete pEnvList;
- delete pProcess;
+ FREE_USTRING_LIST( m_nArgumentCount, m_pArgumentList );
+ FREE_USTRING_LIST( m_nEnvCount, m_pEnvList );
+ if ( m_pProcess )
+ osl_freeProcessHandle( m_pProcess );
}
BOOL Process::ImplIsRunning()
{
- if ( pProcess && bHasBeenStarted )
+ if ( m_pProcess && bHasBeenStarted )
{
- vos::OProcess::TProcessInfo aProcessInfo;
- pProcess->getInfo( vos::OProcess::TData_ExitCode, &aProcessInfo );
- if ( !(aProcessInfo.Fields & vos::OProcess::TData_ExitCode) )
+ oslProcessInfo aProcessInfo;
+ osl_getProcessInfo(m_pProcess, osl_Process_EXITCODE, &aProcessInfo );
+ if ( !(aProcessInfo.Fields & osl_Process_EXITCODE) )
return TRUE;
else
return FALSE;
@@ -84,11 +101,11 @@ BOOL Process::ImplIsRunning()
long Process::ImplGetExitCode()
{
- if ( pProcess )
+ if ( m_pProcess )
{
- vos::OProcess::TProcessInfo aProcessInfo;
- pProcess->getInfo( vos::OProcess::TData_ExitCode, &aProcessInfo );
- if ( !(aProcessInfo.Fields & vos::OProcess::TData_ExitCode) )
+ oslProcessInfo aProcessInfo;
+ osl_getProcessInfo(m_pProcess, osl_Process_EXITCODE, &aProcessInfo );
+ if ( !(aProcessInfo.Fields & osl_Process_EXITCODE) )
SbxBase::SetError( SbxERR_NO_ACTIVE_OBJECT );
return aProcessInfo.Code;
}
@@ -102,13 +119,14 @@ long Process::ImplGetExitCode()
void Process::SetImage( const String &aAppPath, const String &aAppParams, const Environment *pEnv )
{ // Set image file of executable
- if ( pProcess && ImplIsRunning() )
+ if ( m_pProcess && ImplIsRunning() )
SbxBase::SetError( SbxERR_NO_ACTIVE_OBJECT );
else
{
- delete pArgumentList; pArgumentList = NULL;
- delete pEnvList; pEnvList = NULL;
- delete pProcess; pProcess = NULL;
+ FREE_USTRING_LIST( m_nArgumentCount, m_pArgumentList );
+ FREE_USTRING_LIST( m_nEnvCount, m_pEnvList );
+ osl_freeProcessHandle( m_pProcess );
+ m_pProcess = NULL;
xub_StrLen i, nCount = aAppParams.GetQuotedTokenCount( CUniString("\"\"" ), ' ' );
::rtl::OUString *pParamList = new ::rtl::OUString[nCount];
@@ -123,42 +141,45 @@ void Process::SetImage( const String &aAppPath, const String &aAppParams, const
nParamCount++;
}
}
- pArgumentList = new vos::OArgumentList( pParamList, nCount );
-
+ m_nArgumentCount = nParamCount;
+ m_pArgumentList = new rtl_uString*[m_nArgumentCount];
+ for ( i = 0 ; i < m_nArgumentCount ; i++ )
+ {
+ m_pArgumentList[i] = NULL;
+ rtl_uString_assign( &(m_pArgumentList[i]), pParamList[i].pData );
+ }
+ delete [] pParamList;
- ::rtl::OUString *pEnvArray = NULL;
if ( pEnv )
{
- pEnvArray = new ::rtl::OUString[pEnv->size()];
+ m_pEnvList = new rtl_uString*[pEnv->size()];
- xub_StrLen nEnvCount = 0;
+ m_nEnvCount = 0;
Environment::const_iterator aIter = pEnv->begin();
while ( aIter != pEnv->end() )
{
::rtl::OUString aTemp = ::rtl::OUString( (*aIter).first );
aTemp += ::rtl::OUString::createFromAscii( "=" );
aTemp += ::rtl::OUString( (*aIter).second );
- pEnvArray[nEnvCount] = aTemp;
- nEnvCount++;
+ m_pEnvList[m_nEnvCount] = NULL;
+ rtl_uString_assign( &(m_pEnvList[m_nEnvCount]), aTemp.pData );
+ m_nEnvCount++;
aIter++;
}
- pEnvList = new vos::OEnvironment( pEnvArray, nEnvCount );
}
::rtl::OUString aNormalizedAppPath;
osl::FileBase::getFileURLFromSystemPath( ::rtl::OUString(aAppPath), aNormalizedAppPath );
- pProcess = new vos::OProcess( aNormalizedAppPath );
+ m_aProcessName = aNormalizedAppPath;;
bHasBeenStarted = FALSE;
- delete [] pParamList;
- delete [] pEnvArray;
}
}
BOOL Process::Start()
{ // Start program
BOOL bSuccess=FALSE;
- if ( pProcess && !ImplIsRunning() )
+ if ( m_pProcess && !ImplIsRunning() )
{
bWasGPF = FALSE;
#ifdef WNT
@@ -167,20 +188,22 @@ BOOL Process::Start()
try
{
#endif
- if ( pEnvList )
- {
- bSuccess = pProcess->execute( (vos::OProcess::TProcessOption)(vos::OProcess::TOption_SearchPath),
- *pArgumentList,
- *pEnvList ) == vos::OProcess::E_None;
- }
- else
- {
- bSuccess = pProcess->execute( (vos::OProcess::TProcessOption)(vos::OProcess::TOption_SearchPath),
- *pArgumentList ) == vos::OProcess::E_None;
- }
+ bSuccess = osl_executeProcess(
+ m_aProcessName.pData,
+ m_pArgumentList,
+ m_nArgumentCount,
+ osl_Process_SEARCHPATH
+ /*| osl_Process_DETACHED*/
+ /*| osl_Process_WAIT*/,
+ NULL,
+ NULL,
+ m_pEnvList,
+ m_nEnvCount,
+ &m_pProcess ) == osl_Process_E_None;
+
#ifdef WNT
}
- catch( ... )
+ catch( ... )
{
bWasGPF = TRUE;
// TODO: Output debug message !!
@@ -216,7 +239,7 @@ BOOL Process::WasGPF()
BOOL Process::Terminate()
{
if ( ImplIsRunning() )
- return pProcess->terminate() == vos::OProcess::E_None;
+ return osl_terminateProcess(m_pProcess) == osl_Process_E_None;
return TRUE;
}