コード例 #1
0
ファイル: tcpsocket.cpp プロジェクト: arrrrrrr/ebftpd
void TCPSocket::Getline(char *buffer, size_t bufferSize, bool stripCRLF)
{
  if (!bufferSize) return;
  
  size_t bufferLen = 0;
  char ch;
  do
  {
    ch = GetcharBuffered();
    if (!stripCRLF || (ch != '\r' && ch != '\n'))
    {
      *buffer = ch;
      ++buffer;
      ++bufferLen;
    }
  }
  while (ch != '\n' && bufferLen < bufferSize - 1);
  
  *buffer = '\0';
  
  if (ch != '\n') throw BufferSizeExceeded();
}
コード例 #2
0
ファイル: inputline.cpp プロジェクト: MiKTeX/miktex
bool WebAppInputLine::InputLine(C4P_text& f, C4P_boolean bypassEndOfLine) const
{
  f.AssertValid();

  if (AmI("xetex"))
  {
    MIKTEX_UNEXPECTED();
  }

#if defined(PASCAL_TEXT_IO)
  MIKTEX_UNEXPECTED();
#endif

  if (feof(f) != 0)
  {
    return false;
  }

  IInputOutput* inputOutput = GetInputOutput();

  const C4P_signed32 first = inputOutput->first();
  C4P_signed32& last = inputOutput->last();
  const C4P_signed32 bufsize = inputOutput->bufsize();

  const char* xord = nullptr;
#if defined(WITH_OMEGA)
  if (!AmI("omega"))
#endif
  {
    xord = GetCharacterConverter()->xord();
  }

  char *buffer = nullptr;
#if defined(WITH_OMEGA)
  char16_t* buffer16 = nullptr;
  if (AmI("omega"))
  {
    buffer16 = inputOutput->buffer16();
  }
  else
#endif
  {
    buffer = inputOutput->buffer();
  }

  last = first;

  int ch = GetCharacter(f);
  if (ch == EOF)
  {
    return false;
  }
  if (ch == '\r')
  {
    ch = GetCharacter(f);
    if (ch == EOF)
    {
      return false;
    }
    if (ch != '\n')
    {
      ungetc(ch, f);
      ch = '\n';
    }
  }

  if (ch == '\n')
  {
    return true;
  }

#if defined(WITH_OMEGA)
  if (AmI("omega"))
  {
    buffer16[last] = ch;
  }
  else
#endif
  {
    buffer[last] = xord[ch & 0xff];
  }
  last += 1;

  while ((ch = GetCharacter(f)) != EOF && last < bufsize)
  {
    if (ch == '\r')
    {
      ch = GetCharacter(f);
      if (ch == EOF)
      {
        break;
      }
      if (ch != '\n')
      {
        ungetc(ch, f);
        ch = '\n';
      }
    }
    if (ch == '\n')
    {
      break;
    }
#if defined(WITH_OMEGA)
    if (AmI("omega"))
    {
      buffer16[last] = ch;
    }
    else
#endif
    {
      buffer[last] = xord[ch & 0xff];
    }
    last += 1;
  }

  if (ch != '\n' && ch != EOF)
  {
    BufferSizeExceeded();
  }

  if (!AmI("bibtex") && last >= inputOutput->maxbufstack())
  {
    inputOutput->maxbufstack() = last + 1;
    if (inputOutput->maxbufstack() >= bufsize)
    {
      BufferSizeExceeded();
    }
  }

#if defined(WITH_OMEGA)
  if (AmI("omega"))
  {
    while (last > first && (buffer16[last - 1] == u' ' || buffer16[last - 1] == u'\r'))
    {
      last -= 1;
    }
  }
  else
#endif
  {
    while (last > first && (buffer[last - 1] == ' ' || buffer[last - 1] == '\r'))
    {
      last -= 1;
    }
  }

  return true;
}