mirror of
https://github.com/qpdf/qpdf.git
synced 2024-12-22 19:08:59 +00:00
Add qpdf private API methods InputSource::read_line
This commit is contained in:
parent
fa2d331215
commit
64a7b9f34a
@ -81,6 +81,8 @@ class QPDF_DLL_CLASS InputSource
|
||||
// The following methods are for internal use by qpdf only.
|
||||
inline size_t read(std::string& str, size_t count, qpdf_offset_t at = -1);
|
||||
inline std::string read(size_t count, qpdf_offset_t at = -1);
|
||||
size_t read_line(std::string& str, size_t count, qpdf_offset_t at = -1);
|
||||
std::string read_line(size_t count, qpdf_offset_t at = -1);
|
||||
inline qpdf_offset_t fastTell();
|
||||
inline bool fastRead(char&);
|
||||
inline void fastUnread(bool);
|
||||
|
@ -19,27 +19,41 @@ InputSource::getLastOffset() const
|
||||
return this->last_offset;
|
||||
}
|
||||
|
||||
std::string
|
||||
InputSource::readLine(size_t max_line_length)
|
||||
size_t
|
||||
InputSource::read_line(std::string& str, size_t count, qpdf_offset_t at)
|
||||
{
|
||||
// Return at most max_line_length characters from the next line. Lines are terminated by one or
|
||||
// more \r or \n characters. Consume the trailing newline characters but don't return them.
|
||||
// After this is called, the file will be positioned after a line terminator or at the end of
|
||||
// the file, and last_offset will point to position the file had when this method was called.
|
||||
|
||||
auto result = read(max_line_length);
|
||||
auto eol = result.find_first_of("\n\r"sv);
|
||||
read(str, count, at);
|
||||
auto eol = str.find_first_of("\n\r"sv);
|
||||
if (eol != std::string::npos) {
|
||||
auto next_line = result.find_first_not_of("\n\r"sv, eol);
|
||||
result.resize(eol);
|
||||
auto next_line = str.find_first_not_of("\n\r"sv, eol);
|
||||
str.resize(eol);
|
||||
if (eol != std::string::npos) {
|
||||
seek(last_offset + static_cast<qpdf_offset_t>(next_line), SEEK_SET);
|
||||
return result;
|
||||
return eol;
|
||||
}
|
||||
}
|
||||
// We did not necessarily find the end of the trailing newline sequence.
|
||||
seek(last_offset, SEEK_SET);
|
||||
findAndSkipNextEOL();
|
||||
return eol;
|
||||
}
|
||||
|
||||
std::string
|
||||
InputSource::readLine(size_t max_line_length)
|
||||
{
|
||||
return read_line(max_line_length);
|
||||
}
|
||||
|
||||
inline std::string
|
||||
InputSource::read_line(size_t count, qpdf_offset_t at)
|
||||
{
|
||||
std::string result(count, '\0');
|
||||
read_line(result, count, at);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user