diff options
Diffstat (limited to 'TAO/orbsvcs/IFR_Service/be_init.cpp')
-rw-r--r-- | TAO/orbsvcs/IFR_Service/be_init.cpp | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/TAO/orbsvcs/IFR_Service/be_init.cpp b/TAO/orbsvcs/IFR_Service/be_init.cpp new file mode 100644 index 00000000000..8327a82601f --- /dev/null +++ b/TAO/orbsvcs/IFR_Service/be_init.cpp @@ -0,0 +1,126 @@ +// $Id$ + +#include "global_extern.h" +#include "be_extern.h" +#include "../../tao/Version.h" + +int +BE_save_orb_args (int &argc, char *argv[]) +{ + int i = 1; + ACE_CString holder; + + while (i < argc) + { + if (ACE_OS::strncmp (argv[i], "-ORB", 4) == 0) + { + holder += ACE_CString (argv[i]); + holder += " "; + + // Could be another -ORBxxx arg or an IDL compiler arg. + if (*argv[i + 1] == '-') + { + ++i; + continue; + } + + // No-copy constructor. + ACE_CString tmp (argv[i + 1], + 0, + 0); + + // If the arg ends with either .idl or .pidl, we're done. + + size_t len = tmp.length (); + ssize_t pos = tmp.find (".idl"); + + if (len - pos == 4) + { + return 0; + } + + pos = tmp.find (".pidl"); + + if (len - pos == 5) + { + return 0; + } + + // If we're here, the next arg goes with the preceding -ORBxxx. + holder += tmp; + holder += " "; + i += 2; + } + else + { + ++i; + } + } + + be_global->orb_args (holder); + + return 0; +} + +// 'ac' must be passed in by reference, because it is also +// passed by reference to ORB_init, which may modify it. +// After BE_ifr_init returns to main() the modified argc +// must be passed to DRV_parse_args(). +int +BE_ifr_orb_init (int &ac, char *av[]) +{ + ACE_DECLARE_NEW_CORBA_ENV; + ACE_TRY + { + be_global->orb (CORBA::ORB_init (ac, + av, + 0 + ACE_ENV_ARG_PARAMETER)); + ACE_TRY_CHECK; + } + ACE_CATCHANY + { + ACE_PRINT_EXCEPTION (ACE_ANY_EXCEPTION, + ACE_TEXT ("BE_ifr_orb_init")); + + return 1; + } + ACE_ENDTRY; + + return 0; +} + +TAO_IFR_BE_Export void +BE_version (void) +{ + ACE_DEBUG ((LM_DEBUG, + "%s %s\n", + ACE_TEXT ("TAO_IFR_BE, version"), + ACE_TEXT (TAO_VERSION))); +} + +TAO_IFR_BE_Export int +BE_init (int &argc, char *argv[]) +{ + // Initialize BE global data object. + ACE_NEW_RETURN (be_global, + BE_GlobalData, + -1); + + int status = BE_save_orb_args (argc, argv); + + if (status != 0) + { + return status; + } + + idl_global->using_ifr_backend (true); + + return BE_ifr_orb_init (argc, argv); +} + +TAO_IFR_BE_Export void +BE_post_init (char *[], long) +{ +} + |