diff options
author | Michael Stahl <mstahl@redhat.com> | 2013-10-10 13:47:18 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2013-10-10 14:38:38 +0200 |
commit | 1acaa577b67158c060d2f57414f7aea86504a489 (patch) | |
tree | 30ac01bdf0a5b054d1e2a8d0171fe222d585b39b /sal/osl/unx | |
parent | efbf0b412bc76149b410d0cd17c7040513d4c203 (diff) |
sal: add special handling of argc==0 to osl_setCommandArgs()
... to set up a fake command line. This is used from pyuno, when
invoked from the "python" executable as "import uno".
On WNT there is an API to get the actual command line, so just use that
even in the "fake" case; on UNX just fake something up.
Just for the record the whole osl_setCommandArgs() is called exactly once
assumption should work out _unless_ there is a program that uses SAL_MAIN
_and_ does a python-level "import uno" _before_ it wants to create a
python-based UNO service (via pyuno_loader::CreateInstance), since
pyuno already takes care to call Runtime::initialize() at most once.
Change-Id: Ifd23de733ea3e6b694d46ab039b6aa4fd3e7fc1b
Signed-off-by: Stephan Bergmann <sbergman@redhat.com>
Diffstat (limited to 'sal/osl/unx')
-rw-r--r-- | sal/osl/unx/process_impl.cxx | 19 |
1 files changed, 16 insertions, 3 deletions
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++) |