summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pyuno/source/module/pyuno_module.cxx5
-rw-r--r--sal/osl/unx/process_impl.cxx19
-rw-r--r--sal/osl/w32/process.cxx8
3 files changed, 21 insertions, 11 deletions
diff --git a/pyuno/source/module/pyuno_module.cxx b/pyuno/source/module/pyuno_module.cxx
index e34b675837c7..718759f4e88f 100644
--- a/pyuno/source/module/pyuno_module.cxx
+++ b/pyuno/source/module/pyuno_module.cxx
@@ -263,10 +263,7 @@ static PyObject* getComponentContext(
{
// cppu::defaultBootstrap_InitialComponentContext expects
// command line arguments to be present
- static char * argv [1];
- argv[0] = strdup(
- "this is just a fake and cheap imitation of a command line");
- osl_setCommandArgs(1, argv);
+ osl_setCommandArgs(0, 0); // fake it
OUString iniFile;
if( path.isEmpty() )
diff --git a/sal/osl/unx/process_impl.cxx b/sal/osl/unx/process_impl.cxx
index 00766ccf4304..6d1694d5c85a 100644
--- a/sal/osl/unx/process_impl.cxx
+++ b/sal/osl/unx/process_impl.cxx
@@ -208,13 +208,26 @@ oslProcessError SAL_CALL osl_getCommandArg (sal_uInt32 nArg, rtl_uString ** strC
**************************************/
void SAL_CALL osl_setCommandArgs (int argc, char ** argv)
{
- OSL_ASSERT(argc > 0);
+ // special case for argc == 0: set up fake command line
+ int nArgs(argc ? argc : 1);
pthread_mutex_lock (&(g_command_args.m_mutex));
assert (g_command_args.m_nCount == 0);
if (g_command_args.m_nCount == 0)
{
- rtl_uString** ppArgs = (rtl_uString**)rtl_allocateZeroMemory (argc * sizeof(rtl_uString*));
- if (ppArgs != 0)
+ rtl_uString** ppArgs =
+ (rtl_uString**)rtl_allocateZeroMemory(nArgs * sizeof(rtl_uString*));
+ if (ppArgs != 0 && argc == 0)
+ {
+ // special case: set up fake command line
+ char const*const arg =
+ "this is just a fake and cheap imitation of a command line";
+ rtl_string2UString(&ppArgs[0],
+ arg, rtl_str_getLength(arg), RTL_TEXTENCODING_ASCII_US,
+ OSTRING_TO_OUSTRING_CVTFLAGS);
+ g_command_args.m_nCount = nArgs;
+ g_command_args.m_ppArgs = ppArgs;
+ }
+ else if (ppArgs != 0)
{
rtl_TextEncoding encoding = osl_getThreadTextEncoding();
for (int i = 0; i < argc; i++)
diff --git a/sal/osl/w32/process.cxx b/sal/osl/w32/process.cxx
index 920e77dfa6a2..6d55249d85db 100644
--- a/sal/osl/w32/process.cxx
+++ b/sal/osl/w32/process.cxx
@@ -261,14 +261,14 @@ static struct CommandArgs_Impl g_command_args =
#endif
static rtl_uString ** osl_createCommandArgs_Impl (int argc, char **)
{
+ int nArgs(0);
+ LPWSTR *wargv = CommandLineToArgvW( GetCommandLineW(), &nArgs );
+ assert(argc == nArgs || argc == 0 /* special case - faked */);
rtl_uString ** ppArgs =
- (rtl_uString**)rtl_allocateZeroMemory (argc * sizeof(rtl_uString*));
+ (rtl_uString**)rtl_allocateZeroMemory(nArgs * sizeof(rtl_uString*));
if (ppArgs != 0)
{
int i;
- int nArgs;
- LPWSTR *wargv = CommandLineToArgvW( GetCommandLineW(), &nArgs );
- OSL_ASSERT( nArgs == argc );
for (i = 0; i < nArgs; i++)
{
/* Convert to unicode */