src/share/vm/services/diagnosticFramework.cpp

Print this page
rev 3087 : 7141252: Diagnostic Framework Default parser fixes


  44   }
  45   cmd_end = _cmd;
  46 
  47   if (no_command_name) {
  48     _cmd = NULL;
  49     _cmd_len = 0;
  50   } else {
  51     // Look for end of the command name
  52     while (cmd_end < line_end && !isspace((int) cmd_end[0])) {
  53       cmd_end++;
  54     }
  55     _cmd_len = cmd_end - _cmd;
  56   }
  57   _args = cmd_end;
  58   _args_len = line_end - _args;
  59 }
  60 
  61 bool DCmdArgIter::next(TRAPS) {
  62   if (_len == 0) return false;
  63   // skipping spaces
  64   while (_cursor < _len - 1 && isspace(_buffer[_cursor])) {
  65     _cursor++;
  66   }
  67   // handling end of command line
  68   if (_cursor >= _len - 1) {
  69     _cursor = _len - 1;
  70     _key_addr = &_buffer[_len - 1];
  71     _key_len = 0;
  72     _value_addr = &_buffer[_len - 1];
  73     _value_len = 0;
  74     return false;
  75   }





  76   // extracting first item, argument or option name
  77   _key_addr = &_buffer[_cursor];

  78   while (_cursor <= _len - 1 && _buffer[_cursor] != '=' && _buffer[_cursor] != _delim) {
  79     // argument can be surrounded by single or double quotes
  80     if (_buffer[_cursor] == '\"' || _buffer[_cursor] == '\'') {
  81       _key_addr++;
  82       char quote = _buffer[_cursor];
  83       while (_cursor < _len - 1) {
  84         _cursor++;
  85         if (_buffer[_cursor] == quote && _buffer[_cursor - 1] != '\\') {
  86           break;
  87         }
  88       }
  89       if (_buffer[_cursor] != quote) {
  90         THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(),
  91                 "Format error in diagnostic command arguments", false);
  92       }
  93       break;
  94     }
  95     _cursor++;
  96   }
  97   _key_len = &_buffer[_cursor] - _key_addr;




  44   }
  45   cmd_end = _cmd;
  46 
  47   if (no_command_name) {
  48     _cmd = NULL;
  49     _cmd_len = 0;
  50   } else {
  51     // Look for end of the command name
  52     while (cmd_end < line_end && !isspace((int) cmd_end[0])) {
  53       cmd_end++;
  54     }
  55     _cmd_len = cmd_end - _cmd;
  56   }
  57   _args = cmd_end;
  58   _args_len = line_end - _args;
  59 }
  60 
  61 bool DCmdArgIter::next(TRAPS) {
  62   if (_len == 0) return false;
  63   // skipping spaces
  64   while (_cursor < _len - 1 && _buffer[_cursor] == _delim) {
  65     _cursor++;
  66   }
  67   // handling end of command line
  68   if (_cursor >= _len - 1) {
  69     _cursor = _len - 1;
  70     _key_addr = &_buffer[_len - 1];
  71     _key_len = 0;
  72     _value_addr = &_buffer[_len - 1];
  73     _value_len = 0;
  74     return false;
  75   }
  76 
  77   if (_buffer[_cursor] == _delim) {
  78     _cursor++;
  79   }
  80 
  81   // extracting first item, argument or option name
  82   _key_addr = &_buffer[_cursor];
  83 
  84   while (_cursor <= _len - 1 && _buffer[_cursor] != '=' && _buffer[_cursor] != _delim) {
  85     // argument can be surrounded by single or double quotes
  86     if (_buffer[_cursor] == '\"' || _buffer[_cursor] == '\'') {
  87       _key_addr++;
  88       char quote = _buffer[_cursor];
  89       while (_cursor < _len - 1) {
  90         _cursor++;
  91         if (_buffer[_cursor] == quote && _buffer[_cursor - 1] != '\\') {
  92           break;
  93         }
  94       }
  95       if (_buffer[_cursor] != quote) {
  96         THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(),
  97                 "Format error in diagnostic command arguments", false);
  98       }
  99       break;
 100     }
 101     _cursor++;
 102   }
 103   _key_len = &_buffer[_cursor] - _key_addr;