diff options
Diffstat (limited to 'ace/ARGV.cpp')
-rw-r--r-- | ace/ARGV.cpp | 201 |
1 files changed, 0 insertions, 201 deletions
diff --git a/ace/ARGV.cpp b/ace/ARGV.cpp deleted file mode 100644 index 50ea455063e..00000000000 --- a/ace/ARGV.cpp +++ /dev/null @@ -1,201 +0,0 @@ -// ARGV.cpp -// $Id$ - -// Transforms a string BUF into an ARGV-style vector of strings. - -#define ACE_BUILD_DLL -#include "ace/ARGV.h" - -#if !defined (__ACE_INLINE__) -#include "ace/ARGV.i" -#endif /* __ACE_INLINE__ */ - -ACE_ALLOC_HOOK_DEFINE(ACE_ARGV) - -void -ACE_ARGV::dump (void) const -{ - ACE_TRACE ("ACE_ARGV::dump"); - - ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this)); - ACE_DEBUG ((LM_DEBUG, "argc_ = %d", this->argc_)); - - for (size_t i = 0; i < this->argc_; i++) - ACE_DEBUG ((LM_DEBUG, "\nargv_[%i] = %s", i, this->argv_[i])); - - ACE_DEBUG ((LM_DEBUG, "\nbuf = %s\n")); - ACE_DEBUG ((LM_DEBUG, "\n")); - ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP)); -} - -ACE_ARGV::ACE_ARGV (char buf[], - int substitute_env_args) - : argc_ (0), - argv_ (0), - buf_ (0) -{ - ACE_TRACE ("ACE_ARGV::ACE_ARGV"); - - if (buf == 0) - return; - - char *cp = buf; - - // First pass: count arguments. - - // '#' is the start-comment token.. - while (*cp != '\0' && *cp != '#') - { - // Skip whitespace.. - while (isspace (*cp)) - cp++; - - // Increment count and move to next whitespace.. - if (*cp != '\0') - this->argc_++; - - // Grok quotes.... - if (*cp == '\'' || *cp == '"') - { - char quote = *cp; - - // Scan past the string.. - for (cp++; *cp != '\0' && *cp != quote; cp++) - continue; - - // '\0' implies unmatched quote.. - if (*cp == '\0') - { - ACE_ERROR ((LM_ERROR, - "unmatched %c detected\n", quote)); - this->argc_--; - break; - } - else - cp++; - } - else // Skip over non-whitespace.... - while (*cp != '\0' && !isspace (*cp)) - cp++; - } - - // Second pass: copy arguments.. - char arg[BUFSIZ]; - - // Make a new argv vector of argc + 1 elements. - ACE_NEW (this->argv_, char *[this->argc_ + 1]); - - for (size_t i = 0; i < this->argc_; i++) - { - // Skip whitespace.. - while (isspace (*buf)) - buf++; - - // Copy next argument and move to next whitespace.. - if (*buf == '\'' || *buf == '"') - { - char quote = *buf++; - - for (cp = arg; - *buf != '\0' && *buf != quote; - buf++, cp++) - if (unsigned (cp - arg) < sizeof arg) - *cp = *buf; - - *cp = '\0'; - if (*buf == quote) - buf++; - } - else - { - for (cp = arg; - *buf && !isspace (*buf); - buf++, cp++) - if (unsigned (cp - arg) < sizeof arg) - *cp = *buf; - *cp = '\0'; - } - - // Check for environment variable substitution here. - if (substitute_env_args) - this->argv_[i] = ACE::strenvdup (arg); - else - this->argv_[i] = ACE_OS::strdup (arg); - } - - this->argv_[this->argc_] = 0; -} - -ACE_ARGV::ACE_ARGV (char *argv[], - int substitute_env_args) - : argc_ (0), - argv_ (0), - buf_ (0) -{ - ACE_TRACE ("ACE_ARGV::ACE_ARGV"); - - if (argv == 0 || argv[0] == 0) - return; - - int buf_len = 0; - - // Determine the length of the buffer. - - for (int i = 0; argv[i] != 0; i++) - { - char *temp; - - // Account for environment variables. - if (substitute_env_args - && (argv[i][0] == '$' - && (temp = ACE_OS::getenv (&argv[i][1])) != 0)) - buf_len += ACE_OS::strlen (temp); - else - buf_len += ACE_OS::strlen (argv[i]); - - // Add one for the extra space between each string. - buf_len++; - } - - // Step through all argv params and copy each one into buf; separate - // each param with white space. - - ACE_NEW (this->buf_, char[buf_len]); - - char *end = this->buf_; - - for (int j = 0; argv[j] != 0; j++) - { - char *temp; - - // Account for environment variables. - if (substitute_env_args - && (argv[j][0] == '$' - && (temp = ACE_OS::getenv (&argv[j][1])) != 0)) - end = ACE::strecpy (end, temp); - else - end = ACE::strecpy (end, argv[j]); - - // Add white space and advance the pointer. - *end++ = ' '; - } - - // Null terminate the string. - *end = '\0'; -} - -// Free up the space allocated by the constructor.. - -ACE_ARGV::~ACE_ARGV (void) -{ - ACE_TRACE ("ACE_ARGV::~ACE_ARGV"); - if (this->argv_ == 0) - return; - - for (int i = 0; this->argv_[i] != 0; i++) - ACE_OS::free ((void *) this->argv_[i]); - - ACE_OS::free ((void *) this->argv_); - delete this->buf_; -} - |