diff options
author | Norbert Thiebaud <nthiebaud@gmail.com> | 2011-03-08 19:43:29 -0600 |
---|---|---|
committer | Norbert Thiebaud <nthiebaud@gmail.com> | 2011-03-08 19:43:29 -0600 |
commit | f0e5895d5baa04826d1884fc4720c6180f2eda04 (patch) | |
tree | d839e9131057f9d1271ec2578d1b370dcb89e032 /soldep | |
parent | 7572bcf0b17da4b37bf4ba834347196567ec3c37 (diff) | |
parent | 853a58836446858b75bf82916272e9fd27a7a892 (diff) |
Merge commit 'ooo/DEV300_m101' into integration/dev300_m101
* commit 'ooo/DEV300_m101': (500 commits)
masterfix DEV300: #i10000# remove hard dep
masterfix DEV300: #i10000# usage of L10N build_type
masterfix DEV300: #i10000# usage of L10N build_type
masterfix DEV300: #i100000# dep. fix
masterfix DEV300: #i10000# removed one hard dep
masterfix DEV300: #i10000# fixed patch handling
masterfix DEV300: #i10000# new configure
DEV300
masterfix DEV300: #i10000# nawk -> awk
l10nmove: adjust repository handling
l10nmove: fixed regex
l10nmove: minor fixes
l10nmove: add l10n repo to gb_REPOS
DEV300 masterfix: gnumake3: subsequenttests requires in environment
ab80: Adding changes of cws mib21, ab77, ab77run2, dr77i to dev300
DEV300 masterfix: #i10000#: windows: more bizare hacks ...
locales34: have a matching configure as well
DEV300
locales34: back out change from autoreconf
gnumake3: JunitTest.mk: bizarre hacks to make it work on windows
...
Conflicts:
configure
configure.in
instsetoo_native/prj/build.lst
instsetoo_native/util/makefile.mk
instsetoo_native/util/openoffice.lst
instsetoo_native/util/pack.lst
ooo.lst
scp2/source/canvas/canvascommons.scp
scp2/source/canvas/mtfrenderer.scp
scp2/source/ooo/common_brand.scp
scp2/source/ooo/directory_ooo.scp
scp2/source/ooo/file_library_ooo.scp
scp2/source/ooo/file_ooo.scp
scp2/source/ooo/makefile.mk
scp2/source/ooo/module_hidden_ooo.scp
scp2/source/ooo/module_langpack.ulf
scp2/source/ooo/ure.scp
scp2/source/python/file_python.scp
scp2/source/sdkoo/sdkoo.scp
scp2/source/templates/module_langpack_accessories_templates.sct
scp2/source/templates/module_langpack_accessories_templates_root.sct
set_soenv.in
soldep/bootstrp/appdef.cxx
soldep/bootstrp/dep.cxx
soldep/bootstrp/hashtbl.cxx
soldep/bootstrp/makefile.mk
soldep/bootstrp/minormk.cxx
soldep/bootstrp/prj.cxx
soldep/bootstrp/prodmap.cxx
soldep/inc/dep.hxx
soldep/inc/minormk.hxx
soldep/inc/prodmap.hxx
soldep/inc/soldep/appdef.hxx
soldep/inc/soldep/connctr.hxx
soldep/inc/soldep/depper.hxx
soldep/inc/soldep/depwin.hxx
soldep/inc/soldep/hashtbl.hxx
soldep/inc/soldep/objwin.hxx
soldep/inc/soldep/prj.hxx
soldep/inc/soldep/sdtresid.hxx
soldep/inc/soldep/soldep.hxx
soldep/inc/soldep/soldlg.hxx
soldep/inc/soldep/tbox.hxx
soldep/prj/d.lst
soldep/source/connctr.cxx
soldep/source/depapp.hxx
soldep/source/depper.cxx
soldep/source/depwin.cxx
soldep/source/makefile.mk
soldep/source/objwin.cxx
soldep/source/soldep.cxx
soldep/source/soldlg.cxx
soldep/source/soldlg.src
soldep/source/tbox.cxx
solenv/bin/build.pl
solenv/bin/cws.pl
solenv/bin/make_installer.pl
solenv/bin/mhids.pl
solenv/bin/modules/CwsConfig.pm
solenv/bin/modules/RepositoryHelper.pm
solenv/bin/modules/installer/regmerge.pm
solenv/bin/modules/installer/scriptitems.pm
solenv/bin/modules/installer/servicesfile.pm
solenv/bin/modules/installer/simplepackage.pm
solenv/bin/modules/installer/substfilenamefiles.pm
solenv/config/ssolar.cmn
solenv/inc/_tg_rslb.mk
solenv/inc/extension_post.mk
solenv/inc/libs.mk
solenv/inc/minor.mk
solenv/inc/postset.mk
solenv/inc/settings.mk
solenv/inc/tg_rslb.mk
solenv/inc/unxlng.mk
solenv/inc/wntmsc.mk
soltools/HIDCompiler/hidclex.l
stlport/prj/d.lst
stlport/systemstlguards/postextstl.h
Diffstat (limited to 'soldep')
-rw-r--r-- | soldep/bootstrp/command.cxx | 683 | ||||
-rw-r--r-- | soldep/bootstrp/sstring.cxx | 314 | ||||
-rw-r--r-- | soldep/inc/soldep/command.hxx | 163 | ||||
-rw-r--r-- | soldep/inc/soldep/listmacr.hxx | 60 | ||||
-rw-r--r-- | soldep/inc/soldep/sstring.hxx | 105 |
5 files changed, 1325 insertions, 0 deletions
diff --git a/soldep/bootstrp/command.cxx b/soldep/bootstrp/command.cxx new file mode 100644 index 000000000000..39a10093c12b --- /dev/null +++ b/soldep/bootstrp/command.cxx @@ -0,0 +1,683 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifdef SCO +#define _IOSTREAM_H +#endif + +#include <tools/fsys.hxx> +#include <tools/stream.hxx> +#include "soldep/command.hxx" +#include <tools/debug.hxx> +#include <soldep/appdef.hxx> + +#ifdef _MSC_VER +#pragma warning (push,1) +#endif + +#include <iostream> +#include <string.h> +#include <stdlib.h> +#include <stdio.h> +#include <ctype.h> +#include <errno.h> + +#ifdef _MSC_VER +#pragma warning (pop) +#endif + +//#define MH_TEST2 1 // fuers direkte Testen + +#if defined(WNT) || defined(OS2) +#ifdef _MSC_VER +#pragma warning (push,1) +#endif +#include <process.h> // for _SPAWN +#ifdef _MSC_VER +#pragma warning (pop) +#endif +#endif +#ifdef UNX +#include <sys/types.h> +#include <unistd.h> +#if ( defined NETBSD ) || defined (FREEBSD) || defined (AIX) \ + || defined (HPUX) || defined (MACOSX) +#include <sys/wait.h> +#else +#include <wait.h> +#endif +#define P_WAIT 1 // erstmal einen dummz +#endif + +#if defined WNT +#include <tools/svwin.h> +#endif + +#if defined(WNT) || defined(OS2) +#define cPathSeperator ';' +#endif +#ifdef UNX +#define cPathSeperator ':' +#endif + +/*****************************************************************************/ +CommandLine::CommandLine(sal_Bool bWrite) +/*****************************************************************************/ + : bTmpWrite(bWrite) +{ + CommandBuffer = new char [1]; + if (CommandBuffer == NULL) { + //cout << "Error: nospace" << endl; + exit(0); + } + CommandBuffer[0] = '\0'; + nArgc = 0; + ppArgv = new char * [1]; + ppArgv[0] = NULL; + + ComShell = new char [128]; + char* pTemp = getenv("COMMAND_SHELL"); + if(!pTemp) + strcpy(ComShell,COMMAND_SHELL); + else + strcpy(ComShell,pTemp); + + strcpy(&ComShell[strlen(ComShell)]," -C "); +} + +/*****************************************************************************/ +CommandLine::CommandLine(const char *CommandString, sal_Bool bWrite) +/*****************************************************************************/ + : bTmpWrite(bWrite) +{ + CommandBuffer = new char [1]; + if (CommandBuffer == NULL) { + //cout << "Error: nospace" << endl; + exit(0); + } + nArgc = 0; + ppArgv = new char * [1]; + ppArgv[0] = NULL; + + ComShell = new char [128]; + char* pTemp = getenv("COMMAND_SHELL"); + if(!pTemp) + strcpy(ComShell,COMMAND_SHELL); + else + strcpy(ComShell,pTemp); + + strcpy(&ComShell[strlen(ComShell)]," -C "); + + BuildCommand(CommandString); +} + +/*****************************************************************************/ +CommandLine::CommandLine(const CommandLine& CCommandLine, sal_Bool bWrite) +/*****************************************************************************/ + : bTmpWrite(bWrite) +{ + CommandBuffer = new char [1]; + if (CommandBuffer == NULL) { + //cout << "Error: nospace" << endl; + exit(0); + } + nArgc = 0; + ppArgv = new char * [1]; + ppArgv[0] = NULL; + + ComShell = new char [128]; + char* pTemp = getenv("COMMAND_SHELL"); + if(!pTemp) + strcpy(ComShell,COMMAND_SHELL); + else + strcpy(ComShell,pTemp); + + strcpy(&ComShell[strlen(ComShell)]," -C "); + + BuildCommand(CCommandLine.CommandBuffer); +} + +/*****************************************************************************/ +CommandLine::~CommandLine() +/*****************************************************************************/ +{ + delete [] CommandBuffer; + delete [] ComShell; + //for (int i = 0; ppArgv[i] != '\0'; i++) { + for (int i = 0; ppArgv[i] != 0; i++) { + delete [] ppArgv[i]; + } + delete [] ppArgv; + +} + +/*****************************************************************************/ +CommandLine& CommandLine::operator=(const CommandLine& CCommandLine) +/*****************************************************************************/ +{ + strcpy (CommandBuffer, CCommandLine.CommandBuffer); + for (int i = 0; i != nArgc; i++) { + delete [] ppArgv[i]; + } + delete [] ppArgv; + ppArgv = new char * [1]; + ppArgv[0] = NULL; + BuildCommand(CommandBuffer); + return *this; +} + +/*****************************************************************************/ +CommandLine& CommandLine::operator=(const char *CommandString) +/*****************************************************************************/ +{ + strcpy (CommandBuffer, CommandString); + for (int i = 0; i != nArgc; i++) { + delete [] ppArgv[i]; + } + delete [] ppArgv; + ppArgv = new char * [1]; + ppArgv[0] = NULL; + BuildCommand(CommandBuffer); + + return *this; +} + +/*****************************************************************************/ +void CommandLine::Print() +/*****************************************************************************/ +{ + //cout << "******* start print *******" << endl; + //cout << "nArgc = " << nArgc << endl; + //cout << "CommandBuffer = " << CommandBuffer << endl; + for (int i = 0; ppArgv[i] != NULL; i++) { + //cout << "ppArgv[" << i << "] = " << ppArgv[i] << endl; + } + //cout << "******** end print ********" << endl; +} + +/*****************************************************************************/ +void CommandLine::BuildCommand(const char *CommandString) +/*****************************************************************************/ +{ + int index = 0, pos=0; + char buffer[1024]; + char WorkString[1024]; + + strcpy(WorkString,CommandString); + + //falls LogWindow -> in tmpfile schreiben + if(bTmpWrite) + { + strcpy(&WorkString[strlen(WorkString)]," >&"); + strcpy(&WorkString[strlen(WorkString)],getenv("TMP")); + strcpy(&WorkString[strlen(WorkString)],TMPNAME); + } + + // delete old memory and get some new memory for CommandBuffer + + delete [] CommandBuffer; + CommandBuffer = new char [strlen(ComShell)+strlen(WorkString)+1]; + if (CommandBuffer == NULL) { + //cout << "Error: nospace" << endl; + exit(0); + } + strcpy (CommandBuffer, ComShell); + strcpy (&CommandBuffer[strlen(ComShell)], WorkString); + + CommandString = CommandBuffer; + + // get the number of tokens + Strtokens(CommandString); + + // delete the space for the old CommandLine + + for (int i = 0; ppArgv[i] != 0; i++) { + delete [] ppArgv[i]; + } + delete [] ppArgv; + + /* get space for the new command line */ + + ppArgv = (char **) new char * [nArgc+1]; + if (ppArgv == NULL) { + //cout << "Error: no space" << endl; + exit(0); + } + + // flush the white space + + while ( isspace(*CommandString) ) + CommandString++; + + index = 0; + + // start the loop to build all the individual tokens + + while (*CommandString != '\0') { + + pos = 0; + + // copy the token until white space is found + + while ( !isspace(*CommandString) && *CommandString != '\0') { + + buffer[pos++] = *CommandString++; + + } + + buffer[pos] = '\0'; + + // get space for the individual tokens + + ppArgv[index] = (char *) new char [strlen(buffer)+1]; + if (ppArgv[index] == NULL) { + //cout << "Error: nospace" << endl; + exit(0); + } + + // copy the token + + strcpy (ppArgv[index++], buffer); + + // flush while space + + while ( isspace(*CommandString) ) + CommandString++; + + } + + // finish by setting the las pointer to NULL + ppArgv[nArgc]= NULL; + +} + +/*****************************************************************************/ +void CommandLine::Strtokens(const char *CommandString) +/*****************************************************************************/ +{ + int count = 0; + const char *temp; + + temp = CommandString; + + /* bypass white space */ + + while (isspace(*temp)) temp++; + + for (count=0; *temp != '\0'; count++) { + + /* continue until white space of string terminator is found */ + + while ((!isspace(*temp)) && (*temp != '\0')) temp++; + + /* bypass white space */ + + while (isspace(*temp)) temp++; + + } + nArgc = count; +} + +/*****************************************************************************/ +CCommand::CCommand( ByteString &rString ) +/*****************************************************************************/ +{ + rString.SearchAndReplace( '\t', ' ' ); + aCommand = rString.GetToken( 0, ' ' ); + aCommandLine = Search( "PATH" ); +#ifndef UNX + aCommandLine += " /c "; +#else + aCommandLine += " -c "; +#endif + + ByteString sCmd( rString.GetToken( 0, ' ' )); + ByteString sParam( rString.Copy( sCmd.Len())); + + aCommandLine += Search( "PATH", sCmd ); + aCommandLine += sParam; + + ImplInit(); +} + +/*****************************************************************************/ +CCommand::CCommand( const char *pChar ) +/*****************************************************************************/ +{ + ByteString aString = pChar; + aString.SearchAndReplace( '\t', ' ' ); + aCommand = aString.GetToken( 0, ' ' ); + + aCommandLine = Search( "PATH" ); +#ifndef UNX + aCommandLine += " /c "; +#else + aCommandLine += " -c "; +#endif + ByteString rString( pChar ); + + ByteString sCmd( rString.GetToken( 0, ' ' )); + ByteString sParam( rString.Copy( sCmd.Len())); + + aCommandLine += Search( "PATH", sCmd ); + aCommandLine += sParam; + + ImplInit(); +} + +/*****************************************************************************/ +void CCommand::ImplInit() +/*****************************************************************************/ +{ + char pTmpStr[255]; + size_t *pPtr; + char *pChar; + int nVoid = sizeof( size_t * ); + nArgc = aCommandLine.GetTokenCount(' '); + sal_uIntPtr nLen = aCommandLine.Len(); + + ppArgv = (char **) new char[ (sal_uIntPtr)(nLen + nVoid * (nArgc +2) + nArgc ) ]; + pChar = (char *) ppArgv + ( (1+nArgc) * nVoid ); + pPtr = (size_t *) ppArgv; + for ( xub_StrLen i=0; i<nArgc; i++ ) + { + (void) strcpy( pTmpStr, aCommandLine.GetToken(i, ' ' ).GetBuffer() ); + size_t nStrLen = strlen( pTmpStr ) + 1; + strcpy( pChar, pTmpStr ); + *pPtr = (sal_uIntPtr) pChar; + pChar += nStrLen; + pPtr += 1; +#ifdef UNX + if ( i == 1 ) + { + sal_uInt16 nWo = aCommandLine.Search("csh -c "); + if (nWo != STRING_NOTFOUND) + aCommandLine.Erase(0, nWo + 7); + else + aCommandLine.Erase(0, 16); + i = nArgc; + strcpy( pChar, aCommandLine.GetBuffer() ); + *pPtr = (sal_uIntPtr) pChar; + pPtr += 1; + } +#endif + } + *pPtr = 0; +} + +/*****************************************************************************/ +CCommand::operator int() +/*****************************************************************************/ +{ + int nRet; +#if defined WNT + nRet = _spawnv( P_WAIT, ppArgv[0], (const char **) ppArgv ); +#elif defined OS2 + nRet = _spawnv( P_WAIT, ppArgv[0], ppArgv ); +#elif defined UNX + //fprintf( stderr, "CComand : operator (int) not implemented\n"); + // **** Unix Implementierung *************** + pid_t pid; + + if (( pid = fork()) < 0 ) + { + DBG_ASSERT( sal_False, "fork error" ); + } + else if ( pid == 0 ) + { + if ( execv( ppArgv[0], (char * const *) ppArgv ) < 0 ) + { + DBG_ASSERT( sal_False, "execv failed" ); + } + } + //fprintf( stderr, "parent: %s %s\n", ppArgv[0] , ppArgv[1] ); + if ( (nRet = waitpid( pid, NULL, 0 ) < 0) ) + { + DBG_ASSERT( sal_False, "wait error" ); + } +#endif + + switch ( errno ) + { + case E2BIG : + nError = COMMAND_TOOBIG; + break; + case EINVAL : + nError = COMMAND_INVALID; + break; + case ENOENT: + nError = COMMAND_NOTFOUND; + break; + case ENOEXEC : + nError = COMMAND_NOEXEC; + break; + case ENOMEM : + nError = COMMAND_NOMEM; + break; + default: + nError = COMMAND_UNKNOWN; + } + + if ( nRet ) + fprintf( stderr, "Program returned with errros\n"); + return nRet; +} + +/*****************************************************************************/ +ByteString CCommand::Search(ByteString aEnv, ByteString sItem) +/*****************************************************************************/ +{ + // default wird eine Shell im Path gesucht, + // wenn aber compsec gestzt ist holen wir uns die + // Shell von dort + if ( sItem.Equals( COMMAND_SHELL )) + { + ByteString aComspec = GetEnv( "COMSPEC" ); + if ( !aComspec.Equals("")) + return aComspec; + } + + DirEntry aItem( String( sItem, RTL_TEXTENCODING_ASCII_US )); + if ( aItem.Exists()) + return sItem; + + ByteString aEntry, sReturn; + ByteString sEnv( aEnv ); + ByteString sEnvironment = GetEnv( sEnv.GetBuffer()); + xub_StrLen nCount = sEnvironment.GetTokenCount( cPathSeperator ); + + sal_Bool bFound = sal_False; + + for ( xub_StrLen i=0; i<nCount && !bFound; i++ ) + { + aEntry = sEnvironment.GetToken(i, cPathSeperator ); +#ifndef UNX + aEntry += '\\'; +#else + aEntry += '/'; +#endif + aEntry += sItem; + + String sEntry( aEntry, RTL_TEXTENCODING_ASCII_US ); + DirEntry aDirEntry( sEntry ); + aDirEntry.ToAbs(); + if ( aDirEntry.Exists()) { + sReturn = aEntry; + bFound = sal_True; + } + } + if ( !bFound ) + { + sEnv = sEnv.ToUpperAscii(); + ByteString sEnvironment2 = GetEnv(sEnv.GetBuffer() ); + xub_StrLen nCount2 = sEnvironment2.GetTokenCount( cPathSeperator ); + for ( xub_StrLen i=0; i<nCount2 && !bFound; i++ ) + { + aEntry = sEnvironment2.GetToken(i, cPathSeperator ); +#ifndef UNX + aEntry += '\\'; +#else + aEntry += '/'; +#endif + aEntry += sItem; + + String sEntry( aEntry, RTL_TEXTENCODING_ASCII_US ); + DirEntry aDirEntry( sEntry ); + aDirEntry.ToAbs(); + if ( aDirEntry.Exists()) { + sReturn = aEntry; + bFound = sal_True; + } + } + } + + if ( sReturn.Equals( "" )) + sReturn = sItem; + + return sReturn; +} + +/*****************************************************************************/ +CCommandd::CCommandd( ByteString &rString, CommandBits nBits ) +/*****************************************************************************/ + : CCommand( rString ), + nFlag( nBits ) +{ +} + + +/*****************************************************************************/ +CCommandd::CCommandd( const char *pChar, CommandBits nBits ) +/*****************************************************************************/ + : CCommand( pChar ), + nFlag( nBits ) +{ +} + +/*****************************************************************************/ +CCommandd::operator int() +/*****************************************************************************/ +{ + int nRet = 0; + +#ifdef WNT + LPCTSTR lpApplicationName = NULL; + LPTSTR lpCommandLine = (char *) GetCommandLine_().GetBuffer(); + LPSECURITY_ATTRIBUTES lpProcessAttributes = NULL; + LPSECURITY_ATTRIBUTES lpThreadAttributes = NULL; + sal_Bool bInheritHandles = sal_True; + + // wie wuenschen wir denn gestartet zu werden ?? + DWORD dwCreationFlags; + + if ( nFlag & COMMAND_EXECUTE_START ) + dwCreationFlags = DETACHED_PROCESS; + else + dwCreationFlags = CREATE_NEW_CONSOLE; + + // wir erben vom Vaterprozess + LPVOID lpEnvironment = NULL; + + // das exe im Pfad suchen + LPCTSTR lpCurrentDirectory = NULL; + + // in dieser Struktur bekommen wir die erzeugte Processinfo + // zurueck + PROCESS_INFORMATION aProcessInformation; + + // weiteres Startupinfo anlegen + STARTUPINFO aStartupInfo; + + aStartupInfo.cb = sizeof( STARTUPINFO ); + aStartupInfo.lpReserved = NULL; + aStartupInfo.lpDesktop = NULL; + + // das Fenster bekommt den Namen des Exes + aStartupInfo.lpTitle = NULL; + aStartupInfo.dwX = 100; + aStartupInfo.dwY = 100; + //aStartupInfo.dwXSize = 400; + //aStartupInfo.dwYSize = 400; + aStartupInfo.dwXCountChars = 40; + aStartupInfo.dwYCountChars = 40; + + // Farben setzen + aStartupInfo.dwFillAttribute = FOREGROUND_RED | BACKGROUND_RED | + BACKGROUND_BLUE | BACKGROUND_GREEN; + +// aStartupInfo.dwFlags = STARTF_USESTDHANDLES; + //aStartupInfo.wShowWindow = SW_NORMAL; //SW_SHOWDEFAULT; + //aStartupInfo.wShowWindow = SW_HIDE; //SW_SHOWNOACTIVATE; + aStartupInfo.wShowWindow = SW_SHOWNOACTIVATE; + aStartupInfo.cbReserved2 = NULL; + aStartupInfo.lpReserved2 = NULL; + //aStartupInfo.hStdInput = stdin; + //aStartupInfo.hStdOutput = stdout; + //aStartupInfo.hStdError = stderr; + + if ( nFlag & COMMAND_EXECUTE_HIDDEN ) + { + aStartupInfo.wShowWindow = SW_HIDE; + aStartupInfo.dwFlags = aStartupInfo.dwFlags | STARTF_USESHOWWINDOW; + } + + bool bProcess = CreateProcess( lpApplicationName, + lpCommandLine, lpProcessAttributes, + lpThreadAttributes, bInheritHandles, + dwCreationFlags, lpEnvironment, lpCurrentDirectory, + &aStartupInfo, &aProcessInformation ); + + LPVOID lpMsgBuf; + + if ( bProcess ) + { + FormatMessage( + FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, + NULL, + GetLastError(), + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language + (LPTSTR) &lpMsgBuf, + 0, + NULL ); + + ByteString aErrorString = (char *) lpMsgBuf; + + if ( nFlag & COMMAND_EXECUTE_WAIT ) + { + DWORD aProcessState = STILL_ACTIVE; + while(aProcessState == STILL_ACTIVE) + { + GetExitCodeProcess(aProcessInformation.hProcess,&aProcessState); + } + } + } + else + fprintf( stderr, "Can not start Process !" ); + +#endif + return nRet; +} diff --git a/soldep/bootstrp/sstring.cxx b/soldep/bootstrp/sstring.cxx new file mode 100644 index 000000000000..a9c50839f6f6 --- /dev/null +++ b/soldep/bootstrp/sstring.cxx @@ -0,0 +1,314 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef _TOOLS_STRINGLIST +# define _TOOLS_STRINGLIST +#endif + +#define ENABLE_BYTESTRING_STREAM_OPERATORS +#include <tools/stream.hxx> +#include "soldep/sstring.hxx" + +SByteStringList::SByteStringList() +{ +} + +SByteStringList::~SByteStringList() +{ +} + +sal_uIntPtr SByteStringList::IsString( ByteString* pStr ) +{ + sal_uIntPtr nRet = NOT_THERE; + if ( (nRet = GetPrevString( pStr )) != 0 ) + { + ByteString* pString = GetObject( nRet ); + if ( *pString == *pStr ) + return nRet; + else + return NOT_THERE; + } + else + { + ByteString* pString = GetObject( 0 ); + if ( pString && (*pString == *pStr) ) + return 0; + else + return NOT_THERE; + } +} + +sal_uIntPtr SByteStringList::GetPrevString( ByteString* pStr ) +{ + sal_uIntPtr nRet = 0; + sal_Bool bFound = sal_False; + sal_uIntPtr nCountMember = Count(); + sal_uIntPtr nUpper = nCountMember; + sal_uIntPtr nLower = 0; + sal_uIntPtr nCurrent = nUpper / 2; + sal_uIntPtr nRem = 0; + ByteString* pString; + + do + { + if ( (nCurrent == nLower) || (nCurrent == nUpper) ) + return nLower; + pString = GetObject( nCurrent ); + StringCompare nResult = pStr->CompareTo( *pString ); + if ( nResult == COMPARE_LESS ) + { + nUpper = nCurrent; + nCurrent = (nCurrent + nLower) /2; + } + else if ( nResult == COMPARE_GREATER ) + { + nLower = nCurrent; + nCurrent = (nUpper + nCurrent) /2; + } + else if ( nResult == COMPARE_EQUAL ) + return nCurrent; + if ( nRem == nCurrent ) + return nCurrent; + nRem = nCurrent; + } + while ( !bFound ); + return nRet; +} + +/************************************************************************** +* +* Sortiert einen ByteString in die Liste ein und gibt die Position, +* an der einsortiert wurde, zurueck +* +**************************************************************************/ + +sal_uIntPtr SByteStringList::PutString( ByteString* pStr ) +{ + sal_uIntPtr nPos = GetPrevString ( pStr ); + if ( Count() ) + { + { + ByteString* pString = GetObject( 0 ); + if ( pString->CompareTo( *pStr ) == COMPARE_GREATER ) + { + Insert( pStr, (sal_uIntPtr)0 ); + return (sal_uIntPtr)0; + } + } + ByteString* pString = GetObject( nPos ); + if ( *pStr != *pString ) + { + Insert( pStr, nPos+1 ); + return ( nPos +1 ); + } + } + else + { + Insert( pStr ); + return (sal_uIntPtr)0; + } + + return NOT_THERE; +} + +ByteString* SByteStringList::RemoveString( const ByteString& rName ) +{ + sal_uIntPtr i; + ByteString* pReturn; + + for( i = 0 ; i < Count(); i++ ) + { + if ( rName == *GetObject( i ) ) + { + pReturn = GetObject(i); + Remove(i); + return pReturn; + } + } + + return NULL; +} + +void SByteStringList::CleanUp() +{ + ByteString* pByteString = First(); + while (pByteString) { + delete pByteString; + pByteString = Next(); + } + Clear(); +} + +SByteStringList& SByteStringList::operator<< ( SvStream& rStream ) +{ + sal_uInt32 nListCount; + rStream >> nListCount; + for ( sal_uInt16 i = 0; i < nListCount; i++ ) { + ByteString* pByteString = new ByteString(); + rStream >> *pByteString; + Insert (pByteString, LIST_APPEND); + } + return *this; +} + +SByteStringList& SByteStringList::operator>> ( SvStream& rStream ) +{ + sal_uInt32 nListCount = Count(); + rStream << nListCount; + ByteString* pByteString = First(); + while (pByteString) { + rStream << *pByteString; + pByteString = Next(); + } + return *this; +} + + + + + + + +SUniStringList::SUniStringList() +{ +} + +SUniStringList::~SUniStringList() +{ +} + +sal_uIntPtr SUniStringList::IsString( UniString* pStr ) +{ + sal_uIntPtr nRet = NOT_THERE; + if ( (nRet = GetPrevString( pStr )) != 0 ) + { + UniString* pString = GetObject( nRet ); + if ( *pString == *pStr ) + return nRet; + else + return NOT_THERE; + } + else + { + UniString* pString = GetObject( 0 ); + if ( pString && (*pString == *pStr) ) + return 0; + else + return NOT_THERE; + } +} + +sal_uIntPtr SUniStringList::GetPrevString( UniString* pStr ) +{ + sal_uIntPtr nRet = 0; + sal_Bool bFound = sal_False; + sal_uIntPtr nCountMember = Count(); + sal_uIntPtr nUpper = nCountMember; + sal_uIntPtr nLower = 0; + sal_uIntPtr nCurrent = nUpper / 2; + sal_uIntPtr nRem = 0; + UniString* pString; + + do + { + if ( (nCurrent == nLower) || (nCurrent == nUpper) ) + return nLower; + pString = GetObject( nCurrent ); + StringCompare nResult = pStr->CompareTo( *pString ); + if ( nResult == COMPARE_LESS ) + { + nUpper = nCurrent; + nCurrent = (nCurrent + nLower) /2; + } + else if ( nResult == COMPARE_GREATER ) + { + nLower = nCurrent; + nCurrent = (nUpper + nCurrent) /2; + } + else if ( nResult == COMPARE_EQUAL ) + return nCurrent; + if ( nRem == nCurrent ) + return nCurrent; + nRem = nCurrent; + } + while ( !bFound ); + return nRet; +} + +/************************************************************************** +* +* Sortiert einen UniString in die Liste ein und gibt die Position, +* an der einsortiert wurde, zurueck +* +**************************************************************************/ + +sal_uIntPtr SUniStringList::PutString( UniString* pStr ) +{ + sal_uIntPtr nPos = GetPrevString ( pStr ); + if ( Count() ) + { + { + UniString* pString = GetObject( 0 ); + if ( pString->CompareTo( *pStr ) == COMPARE_GREATER ) + { + Insert( pStr, (sal_uIntPtr)0); + return (sal_uIntPtr)0; + } + } + UniString* pString = GetObject( nPos ); + if ( *pStr != *pString ) + { + Insert( pStr, nPos+1 ); + return ( nPos +1 ); + } + } + else + { + Insert( pStr ); + return (sal_uIntPtr)0; + } + + return NOT_THERE; +} + +UniString* SUniStringList::RemoveString( const UniString& rName ) +{ + sal_uIntPtr i; + UniString* pReturn; + + for( i = 0 ; i < Count(); i++ ) + { + if ( rName == *GetObject( i ) ) + { + pReturn = GetObject(i); + Remove(i); + return pReturn; + } + } + + return NULL; +} diff --git a/soldep/inc/soldep/command.hxx b/soldep/inc/soldep/command.hxx new file mode 100644 index 000000000000..50781e1679a9 --- /dev/null +++ b/soldep/inc/soldep/command.hxx @@ -0,0 +1,163 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef COMMAND_HXX +#define COMMAND_HXX + +#include <iostream> + +#include <tools/stream.hxx> +#define STRLEN 100 +#ifndef UNX +#define TMPNAME "\\command.tmp" +#else +#define TMPNAME "/tmp/command.tmp" +#endif + +/** Different types of spawnable programs +*/ +enum ExeType +{ + EXE, /// programm is a native executable + BAT, /// programm is a DOS-Batch + BTM /// programm is a 4DOS-Batch +}; + +#define COMMAND_NOTFOUND 0x0001 +#define COMMAND_TOOBIG 0x0002 +#define COMMAND_INVALID 0x0004 +#define COMMAND_NOEXEC 0x0008 +#define COMMAND_NOMEM 0x0010 +#define COMMAND_UNKNOWN 0x0020 + +#ifdef WNT +#define COMMAND_SHELL "4nt.exe" +#endif +#ifdef OS2 +#define COMMAND_SHELL "4os2.exe" +#endif +#ifdef UNX +#define COMMAND_SHELL "csh" +#endif + +class CommandLine; +class LogWindow; + +class CommandLine +{ +friend class ChildProcess; +private: + char *CommandBuffer; + char *ComShell; + char **ppArgv; + sal_Bool bTmpWrite; + +public: + CommandLine(sal_Bool bTmpWrite = sal_False); + CommandLine(const char *, sal_Bool bTmpWrite = sal_False); + CommandLine(const CommandLine&, sal_Bool bTmpWrite = sal_False); + virtual ~CommandLine(); + + int nArgc; + + CommandLine& operator=(const CommandLine&); + CommandLine& operator=(const char *); + void BuildCommand(const char *); + char** GetCommand(void) { return ppArgv; } + void Strtokens(const char *); + void Print(); +}; + +/** Declares and spawns a child process. + The spawned programm could be a native executable or a schell script. +*/ +class CCommand +{ +private: + ByteString aCommandLine; + ByteString aCommand; + char *pArgv; + char **ppArgv; + sal_uIntPtr nArgc; + int nError; + +protected: + void ImplInit(); + void Initpp( sal_uIntPtr nCount, ByteString &rStr ); + +public: + /** Creates the process specified without spawning it + @param rString specifies the programm or shell scrip + */ + CCommand( ByteString &rString ); + + /** Creates the process specified without spawning it + @param pChar specifies the programm or shell scrip + */ + CCommand( const char *pChar ); + + /** Try to find the given programm in specified path + @param sEnv specifies the current search path, defaulted by environment + @param sItem specifies the system shell + @return the Location (when programm was found) + */ + static ByteString Search( ByteString sEnv, + ByteString sItem = COMMAND_SHELL ); + + /** Spawns the Process + @return 0 when spawned without errors, otherwise a error code + */ + operator int(); + + ByteString GetCommandLine_() { return aCommandLine; } + ByteString GetCommand() { return aCommand; } + + char** GetCommandStr() { return ppArgv; } +}; + +#define COMMAND_EXECUTE_WINDOW 0x0000001 +#define COMMAND_EXECUTE_CONSOLE 0x0000002 +#define COMMAND_EXECUTE_HIDDEN 0x0000004 +#define COMMAND_EXECUTE_START 0x0000008 +#define COMMAND_EXECUTE_WAIT 0x0000010 +#define COMMAND_EXECUTE_REMOTE 0x1000000 + +typedef sal_uIntPtr CommandBits; + +/** Allowes to spawn programms hidden, waiting etc. + @see CCommand +*/ +class CCommandd : public CCommand +{ + CommandBits nFlag; +public: + CCommandd( ByteString &rString, CommandBits nBits ); + CCommandd( const char *pChar, CommandBits nBits ); + operator int(); +}; + +#endif diff --git a/soldep/inc/soldep/listmacr.hxx b/soldep/inc/soldep/listmacr.hxx new file mode 100644 index 000000000000..a27f51cfdd4c --- /dev/null +++ b/soldep/inc/soldep/listmacr.hxx @@ -0,0 +1,60 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef _LISTMACR_HXX +#define _LISTMACR_HXX + +#define DECL_DEST_LIST( TmpListType, ListType, PointerType ) \ +DECLARE_LIST(TmpListType, PointerType) \ +class ListType : public TmpListType \ +{ \ +public: \ + void ClearAndDelete() \ + { \ + while ( Count()) { \ + PointerType pTmp = GetObject(( sal_uIntPtr ) 0 ); \ + delete pTmp; \ + Remove(( sal_uIntPtr ) 0 ); \ + } \ + } \ + ~ListType() \ + { \ + ClearAndDelete(); \ + } \ +}; \ + +#endif + + + + + + + + + + diff --git a/soldep/inc/soldep/sstring.hxx b/soldep/inc/soldep/sstring.hxx new file mode 100644 index 000000000000..08eb1da71a09 --- /dev/null +++ b/soldep/inc/soldep/sstring.hxx @@ -0,0 +1,105 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef _SSTRING_HXX +#define _SSTRING_HXX + +#include <tools/string.hxx> +#include <tools/list.hxx> + +#define NOT_THERE LIST_ENTRY_NOTFOUND + +#define SStringList SUniStringList +#define StringList UniStringList + +DECLARE_LIST( ByteStringList, ByteString* ) +DECLARE_LIST( UniStringList, UniString* ) + +class SvStream; + +// --------------------- +// - class SStringList - +// --------------------- + +class SByteStringList : public ByteStringList +{ +public: + SByteStringList(); + ~SByteStringList(); + + // neuen ByteString in Liste einfuegen + sal_uIntPtr PutString( ByteString* ); + ByteString* RemoveString( const ByteString& rName ); + + // Position des ByteString in Liste, wenn nicht enthalten, dann + // return = NOT_THERE + sal_uIntPtr IsString( ByteString* ); + + // Vorgaenger ermitteln ( auch wenn selbst noch nicht in + // Liste enthalten + sal_uIntPtr GetPrevString( ByteString* ); + void CleanUp(); + + SByteStringList& operator<< ( SvStream& rStream ); + SByteStringList& operator>> ( SvStream& rStream ); +}; + +// --------------------- +// - class SUniStringList - +// --------------------- + +class SUniStringList : public UniStringList +{ +public: + SUniStringList(); + ~SUniStringList(); + + // neuen UniString in Liste einfuegen + sal_uIntPtr PutString( UniString* ); + UniString* RemoveString( const UniString& rName ); + + // Position des UniString in Liste, wenn nicht enthalten, dann + // return = NOT_THERE + sal_uIntPtr IsString( UniString* ); + + // Vorgaenger ermitteln ( auch wenn selbst noch nicht in + // Liste enthalten + sal_uIntPtr GetPrevString( UniString* ); +}; + +class Text +{ +protected: + String aString; + +public: + Text( char* pChar ); + Text( String &rStr ) { aString = rStr; } + void Stderr(); +}; + +#endif |