summaryrefslogtreecommitdiff
path: root/ACE
diff options
context:
space:
mode:
Diffstat (limited to 'ACE')
-rw-r--r--ACE/ChangeLog8
-rw-r--r--ACE/ace/Process.cpp12
-rw-r--r--ACE/ace/Process.h8
3 files changed, 23 insertions, 5 deletions
diff --git a/ACE/ChangeLog b/ACE/ChangeLog
index 072349a1d41..656c633a7f9 100644
--- a/ACE/ChangeLog
+++ b/ACE/ChangeLog
@@ -1,3 +1,11 @@
+Thu Oct 14 13:15:00 UTC 2010 Martin Corino <mcorino@remedy.nl>
+
+ * ace/Process.h:
+ * ace/Process.cpp:
+ Changes to allow to dynamically define the max. number of cmdline args.
+ The tao_idl compiler was running out of room in certain instances and
+ the static max was very conservative.
+
Thu Oct 14 09:38:00 UTC 2010 Martin Corino <mcorino@remedy.nl>
* tests/Bug_3911_Regression_Test.cpp:
diff --git a/ACE/ace/Process.cpp b/ACE/ace/Process.cpp
index 5a0c70e482c..d60a3d2f931 100644
--- a/ACE/ace/Process.cpp
+++ b/ACE/ace/Process.cpp
@@ -796,7 +796,8 @@ ACE_Process::convert_env_buffer (const char* env) const
ACE_Process_Options::ACE_Process_Options (bool inherit_environment,
size_t command_line_buf_len,
size_t env_buf_len,
- size_t max_env_args)
+ size_t max_env_args,
+ size_t max_cmdline_args)
:
#if !defined (ACE_HAS_WINCE)
inherit_environment_ (inherit_environment),
@@ -830,6 +831,8 @@ ACE_Process_Options::ACE_Process_Options (bool inherit_environment,
command_line_buf_ (0),
command_line_copy_ (0),
command_line_buf_len_ (command_line_buf_len),
+ max_command_line_args_ (max_cmdline_args),
+ command_line_argv_ (0),
process_group_ (ACE_INVALID_PID),
use_unicode_environment_ (false)
{
@@ -859,6 +862,8 @@ ACE_Process_Options::ACE_Process_Options (bool inherit_environment,
this->startup_info_.cb = sizeof this->startup_info_;
#endif /* ACE_WIN32 */
#endif /* !ACE_HAS_WINCE */
+ ACE_NEW (command_line_argv_,
+ ACE_TCHAR *[max_cmdline_args]);
}
#if !defined (ACE_HAS_WINCE)
@@ -1178,6 +1183,7 @@ ACE_Process_Options::~ACE_Process_Options (void)
#endif /* !ACE_HAS_WINCE */
delete [] command_line_buf_;
ACE::strdelete (command_line_copy_);
+ delete [] command_line_argv_;
}
int
@@ -1315,12 +1321,12 @@ ACE_Process_Options::command_line_argv (void)
parser.preserve_designators ('\"', '\"'); // "
parser.preserve_designators ('\'', '\'');
- int x = 0;
+ unsigned int x = 0;
do
command_line_argv_[x] = parser.next ();
while (command_line_argv_[x] != 0
// substract one for the ending zero.
- && ++x < MAX_COMMAND_LINE_OPTIONS - 1);
+ && ++x < max_command_line_args_ - 1);
command_line_argv_[x] = 0;
}
diff --git a/ACE/ace/Process.h b/ACE/ace/Process.h
index fe01a050526..7ed719b06fc 100644
--- a/ACE/ace/Process.h
+++ b/ACE/ace/Process.h
@@ -84,7 +84,8 @@ public:
ACE_Process_Options (bool inherit_environment = true,
size_t command_line_buf_len = DEFAULT_COMMAND_LINE_BUF_LEN,
size_t env_buf_len = ENVIRONMENT_BUFFER,
- size_t max_env_args = MAX_ENVIRONMENT_ARGS);
+ size_t max_env_args = MAX_ENVIRONMENT_ARGS,
+ size_t max_cmdline_args = MAX_COMMAND_LINE_OPTIONS);
/// Destructor.
~ACE_Process_Options (void);
@@ -440,8 +441,11 @@ protected:
/// Max length of command_line_buf_
size_t command_line_buf_len_;
+ /// Maximum number of command-line arguments. Configurable
+ size_t max_command_line_args_;
+
/// Argv-style command-line arguments.
- ACE_TCHAR *command_line_argv_[MAX_COMMAND_LINE_OPTIONS];
+ ACE_TCHAR **command_line_argv_;
/// Process-group on Unix; unused on Win32.
pid_t process_group_;