diff options
-rw-r--r-- | pyuno/source/module/pyuno_module.cxx | 5 | ||||
-rw-r--r-- | sal/osl/unx/process_impl.cxx | 19 | ||||
-rw-r--r-- | sal/osl/w32/process.cxx | 8 |
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 */ |