bool BufferedStreamMgr::getLine(QuickString &line) { line.clear(); if (_mainBufCurrStartPos >= _mainBufCurrLen) { if (!readFileChunk()) { _eof = true; return false; } } bool retVal = true; while (1) { int searchPos = _mainBufCurrStartPos; while (searchPos < _mainBufCurrLen && _mainBuf[searchPos] != '\n') { searchPos++; } line.append((char *)_mainBuf + _mainBufCurrStartPos, searchPos - _mainBufCurrStartPos); _mainBufCurrStartPos = searchPos +1; if (searchPos == _mainBufCurrLen) { //hit end of buffer, but no newline yet if (!readFileChunk()) { //hit eof retVal = true; break; } } else if (_mainBuf[searchPos] == '\n') { retVal = true; break; } } //strip any whitespace characters, such as DOS newline characters or extra tabs, //from the end of the line int lastPos = line.size(); while (isspace(line[lastPos-1])) lastPos--; line.resize(lastPos); return retVal; }
bool ContextBase::parseIoBufSize(QuickString bufStr) { char lastChar = bufStr[bufStr.size()-1]; int multiplier = 1; if (!isdigit(lastChar)) { switch (lastChar) { case 'K': multiplier = 1 << 10; break; case 'M': multiplier = 1 << 20; break; case 'G': multiplier = 1 << 30; break; default: _errorMsg = "\n***** ERROR: Unrecognized memory buffer size suffix \'"; _errorMsg += lastChar; _errorMsg += "\' given. *****"; return false; break; } //lop off suffix character bufStr.resize(bufStr.size()-1); } if (!isNumeric(bufStr)) { _errorMsg = "\n***** ERROR: argument passed to -iobuf is not numeric. *****"; return false; } _ioBufSize = str2chrPos(bufStr) * multiplier; if (_ioBufSize < MIN_ALLOWED_BUF_SIZE) { _errorMsg = "\n***** ERROR: specified buffer size is too small. *****"; return false; } return true; }