Commit a2c7471e66d87751312cd10dba4905307202b56f

Authored by Jay Berkenbilt
Committed by GitHub
2 parents 84e29026 cfcceff6

Merge pull request #920 from m-holger/fixqdf_rl

Refactor QdfFixer::processLines
include/qpdf/QUtil.hh
... ... @@ -485,6 +485,11 @@ namespace QUtil
485 485 void read_file_into_memory(
486 486 char const* filename, std::shared_ptr<char>& file_buf, size_t& size);
487 487  
  488 + QPDF_DLL
  489 + std::string read_file_into_string(char const* filename);
  490 + QPDF_DLL
  491 + std::string read_file_into_string(FILE* f, std::string_view filename = "");
  492 +
488 493 // This used to be called strcasecmp, but that is a macro on some
489 494 // platforms, so we have to give it a name that is not likely to
490 495 // be a macro anywhere.
... ...
libqpdf/QPDFJob_config.cc
... ... @@ -760,11 +760,9 @@ QPDFJob::Config::showObject(std::string const&amp; parameter)
760 760 QPDFJob::Config*
761 761 QPDFJob::Config::jobJsonFile(std::string const& parameter)
762 762 {
763   - std::shared_ptr<char> file_buf;
764   - size_t size;
765   - QUtil::read_file_into_memory(parameter.c_str(), file_buf, size);
766 763 try {
767   - o.initializeFromJson(std::string(file_buf.get(), size), true);
  764 + o.initializeFromJson(
  765 + QUtil::read_file_into_string(parameter.c_str()), true);
768 766 } catch (std::exception& e) {
769 767 throw std::runtime_error(
770 768 "error with job-json file " + std::string(parameter) + ": " +
... ...
libqpdf/QUtil.cc
... ... @@ -1243,6 +1243,37 @@ QUtil::read_file_into_memory(
1243 1243 }
1244 1244 }
1245 1245  
  1246 +std::string
  1247 +QUtil::read_file_into_string(char const* filename)
  1248 +{
  1249 + FILE* f = safe_fopen(filename, "rb");
  1250 + FileCloser fc(f);
  1251 + return read_file_into_string(f, filename);
  1252 +}
  1253 +
  1254 +std::string
  1255 +QUtil::read_file_into_string(FILE* f, std::string_view filename)
  1256 +{
  1257 + fseek(f, 0, SEEK_END);
  1258 + auto size = QIntC::to_size(QUtil::tell(f));
  1259 + fseek(f, 0, SEEK_SET);
  1260 + std::string result(size, '\0');
  1261 + if (auto read = fread(result.data(), 1, size, f); read != size) {
  1262 + if (ferror(f)) {
  1263 + throw std::runtime_error(
  1264 + std::string("failure reading file ") + std::string(filename) +
  1265 + " into memory: read " + uint_to_string(read) + "; wanted " +
  1266 + uint_to_string(size));
  1267 + } else {
  1268 + throw std::runtime_error(
  1269 + std::string("premature eof reading file ") +
  1270 + std::string(filename) + " into memory: read " +
  1271 + uint_to_string(read) + "; wanted " + uint_to_string(size));
  1272 + }
  1273 + }
  1274 + return result;
  1275 +}
  1276 +
1246 1277 static bool
1247 1278 read_char_from_FILE(char& ch, FILE* f)
1248 1279 {
... ...
libtests/qtest/qutil/qutil.out
... ... @@ -116,6 +116,7 @@ This file is used for qutil testing.
116 116 It has mixed newlines.
117 117 Some lines are very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very long.
118 118 read 24652 bytes
  119 +read 24652 bytes
119 120 ---- hex encode/decode
120 121 begin hex encode/decode
121 122 end hex encode/decode
... ...
libtests/qutil.cc
... ... @@ -576,6 +576,12 @@ read_from_file_test()
576 576 auto buf2 = b2.getBufferSharedPointer();
577 577 assert(buf2->getSize() == size);
578 578 assert(memcmp(buf2->getBuffer(), p, size) == 0);
  579 +
  580 + auto s = QUtil::read_file_into_string("other-file");
  581 + std::cout << "read " << s.size() << " bytes" << std::endl;
  582 + assert(s.size() == 24652);
  583 + assert(s.substr(0, 36) == "This file is used for qutil testing.");
  584 + assert(s.substr(24641, 10) == "very long.");
579 585 }
580 586  
581 587 void
... ...
qpdf/fix-qdf.cc
... ... @@ -6,6 +6,7 @@
6 6 #include <cstring>
7 7 #include <iostream>
8 8 #include <regex>
  9 +#include <string_view>
9 10  
10 11 static char const* whoami = 0;
11 12  
... ... @@ -20,7 +21,7 @@ class QdfFixer
20 21 {
21 22 public:
22 23 QdfFixer(std::string const& filename);
23   - void processLines(std::list<std::string>& lines);
  24 + void processLines(std::string const& input);
24 25  
25 26 private:
26 27 void fatal(std::string const&);
... ... @@ -58,9 +59,9 @@ class QdfFixer
58 59 size_t xref_f1_nbytes;
59 60 size_t xref_f2_nbytes;
60 61 size_t xref_size;
61   - std::vector<std::string> ostream;
  62 + std::vector<std::string_view> ostream;
62 63 std::vector<qpdf_offset_t> ostream_offsets;
63   - std::vector<std::string> ostream_discarded;
  64 + std::vector<std::string_view> ostream_discarded;
64 65 size_t ostream_idx;
65 66 int ostream_id;
66 67 std::string ostream_extends;
... ... @@ -92,54 +93,71 @@ QdfFixer::fatal(std::string const&amp; msg)
92 93 }
93 94  
94 95 void
95   -QdfFixer::processLines(std::list<std::string>& lines)
  96 +QdfFixer::processLines(std::string const& input)
96 97 {
97   - static std::regex re_n_0_obj("^(\\d+) 0 obj\n$");
98   - static std::regex re_xref("^xref\n$");
99   - static std::regex re_stream("^stream\n$");
100   - static std::regex re_endobj("^endobj\n$");
101   - static std::regex re_type_objstm("/Type /ObjStm");
102   - static std::regex re_type_xref("/Type /XRef");
103   - static std::regex re_extends("/Extends (\\d+ 0 R)");
104   - static std::regex re_ostream_obj("^%% Object stream: object (\\d+)");
105   - static std::regex re_endstream("^endstream\n$");
106   - static std::regex re_length_or_w("/(Length|W) ");
107   - static std::regex re_size("/Size ");
108   - static std::regex re_ignore_newline("^%QDF: ignore_newline\n$");
109   - static std::regex re_num("^\\d+\n$");
110   - static std::regex re_trailer("^trailer <<");
111   - static std::regex re_size_n("^ /Size \\d+\n$");
112   - static std::regex re_dict_end("^>>\n$");
  98 + using namespace std::literals;
  99 +
  100 + static const std::regex re_n_0_obj("^(\\d+) 0 obj\n$");
  101 + static const std::regex re_extends("/Extends (\\d+ 0 R)");
  102 + static const std::regex re_ostream_obj("^%% Object stream: object (\\d+)");
  103 + static const std::regex re_num("^\\d+\n$");
  104 + static const std::regex re_size_n("^ /Size \\d+\n$");
  105 +
  106 + auto sv_diff = [](size_t i) {
  107 + return static_cast<std::string_view::difference_type>(i);
  108 + };
113 109  
114 110 lineno = 0;
115   - for (auto const& line: lines) {
  111 + bool more = true;
  112 + auto len_line = sv_diff(0);
  113 +
  114 + std::string_view line;
  115 + std::string_view input_view{input.data(), input.size()};
  116 + size_t offs = 0;
  117 +
  118 + auto b_line = input.cbegin();
  119 + std::smatch m;
  120 + auto const matches = [&m, &b_line, &len_line](std::regex const& r) {
  121 + return std::regex_search(b_line, b_line + len_line, m, r);
  122 + };
  123 +
  124 + while (more) {
116 125 ++lineno;
117 126 last_offset = offset;
118   - offset += QIntC::to_offset(line.length());
119   - std::smatch m;
120   - auto matches = [&m, &line](std::regex& r) {
121   - return std::regex_search(line, m, r);
122   - };
  127 + b_line += len_line;
  128 +
  129 + offs = input_view.find('\n');
  130 + if (offs == std::string::npos) {
  131 + more = false;
  132 + line = input_view;
  133 + } else {
  134 + offs++;
  135 + line = input_view.substr(0, offs);
  136 + input_view.remove_prefix(offs);
  137 + }
  138 + len_line = sv_diff(line.size());
  139 + offset += len_line;
  140 +
123 141 if (state == st_top) {
124 142 if (matches(re_n_0_obj)) {
125 143 checkObjId(m[1].str());
126 144 state = st_in_obj;
127   - } else if (matches(re_xref)) {
  145 + } else if (line.compare("xref\n"sv) == 0) {
128 146 xref_offset = last_offset;
129 147 state = st_at_xref;
130 148 }
131 149 std::cout << line;
132 150 } else if (state == st_in_obj) {
133 151 std::cout << line;
134   - if (matches(re_stream)) {
  152 + if (line.compare("stream\n"sv) == 0) {
135 153 state = st_in_stream;
136 154 stream_start = offset;
137   - } else if (matches(re_endobj)) {
  155 + } else if (line.compare("endobj\n"sv) == 0) {
138 156 state = st_top;
139   - } else if (matches(re_type_objstm)) {
  157 + } else if (line.find("/Type /ObjStm"sv) != line.npos) {
140 158 state = st_in_ostream_dict;
141 159 ostream_id = last_obj;
142   - } else if (matches(re_type_xref)) {
  160 + } else if (line.find("/Type /XRef"sv) != line.npos) {
143 161 xref_offset = xref.back().getOffset();
144 162 xref_f1_nbytes = 0;
145 163 auto t = xref_offset;
... ... @@ -171,7 +189,7 @@ QdfFixer::processLines(std::list&lt;std::string&gt;&amp; lines)
171 189 state = st_in_xref_stream_dict;
172 190 }
173 191 } else if (state == st_in_ostream_dict) {
174   - if (matches(re_stream)) {
  192 + if (line.compare("stream\n"sv) == 0) {
175 193 state = st_in_ostream_offsets;
176 194 } else {
177 195 ostream_discarded.push_back(line);
... ... @@ -200,21 +218,22 @@ QdfFixer::processLines(std::list&lt;std::string&gt;&amp; lines)
200 218 if (matches(re_ostream_obj)) {
201 219 checkObjId(m[1].str());
202 220 state = st_in_ostream_outer;
203   - } else if (matches(re_endstream)) {
  221 + } else if (line.compare("endstream\n"sv) == 0) {
204 222 stream_length = QIntC::to_size(last_offset - stream_start);
205 223 writeOstream();
206 224 state = st_in_obj;
207 225 }
208 226 } else if (state == st_in_xref_stream_dict) {
209   - if (matches(re_length_or_w)) {
  227 + if ((line.find("/Length"sv) != line.npos) ||
  228 + (line.find("/W"sv) != line.npos)) {
210 229 // already printed
211   - } else if (matches(re_size)) {
  230 + } else if (line.find("/Size"sv) != line.npos) {
212 231 auto xref_size = 1 + xref.size();
213 232 std::cout << " /Size " << xref_size << "\n";
214 233 } else {
215 234 std::cout << line;
216 235 }
217   - if (matches(re_stream)) {
  236 + if (line.compare("stream\n"sv) == 0) {
218 237 writeBinary(0, 1);
219 238 writeBinary(0, xref_f1_nbytes);
220 239 writeBinary(0, xref_f2_nbytes);
... ... @@ -238,13 +257,13 @@ QdfFixer::processLines(std::list&lt;std::string&gt;&amp; lines)
238 257 state = st_done;
239 258 }
240 259 } else if (state == st_in_stream) {
241   - if (matches(re_endstream)) {
  260 + if (line.compare("endstream\n"sv) == 0) {
242 261 stream_length = QIntC::to_size(last_offset - stream_start);
243 262 state = st_after_stream;
244 263 }
245 264 std::cout << line;
246 265 } else if (state == st_after_stream) {
247   - if (matches(re_ignore_newline)) {
  266 + if (line.compare("%QDF: ignore_newline\n"sv) == 0) {
248 267 if (stream_length > 0) {
249 268 --stream_length;
250 269 }
... ... @@ -273,7 +292,7 @@ QdfFixer::processLines(std::list&lt;std::string&gt;&amp; lines)
273 292 }
274 293 state = st_before_trailer;
275 294 } else if (state == st_before_trailer) {
276   - if (matches(re_trailer)) {
  295 + if (line.compare("trailer <<\n"sv) == 0) {
277 296 std::cout << line;
278 297 state = st_in_trailer;
279 298 }
... ... @@ -284,7 +303,7 @@ QdfFixer::processLines(std::list&lt;std::string&gt;&amp; lines)
284 303 } else {
285 304 std::cout << line;
286 305 }
287   - if (matches(re_dict_end)) {
  306 + if (line.compare(">>\n"sv) == 0) {
288 307 std::cout << "startxref\n" << xref_offset << "\n%%EOF\n";
289 308 state = st_done;
290 309 }
... ... @@ -392,17 +411,17 @@ realmain(int argc, char* argv[])
392 411 } else if (argc == 2) {
393 412 filename = argv[1];
394 413 }
395   - std::list<std::string> lines;
  414 + std::string input;
396 415 if (filename == 0) {
397 416 filename = "standard input";
398 417 QUtil::binary_stdin();
399   - lines = QUtil::read_lines_from_file(stdin, true);
  418 + input = QUtil::read_file_into_string(stdin);
400 419 } else {
401   - lines = QUtil::read_lines_from_file(filename, true);
  420 + input = QUtil::read_file_into_string(filename);
402 421 }
403 422 QUtil::binary_stdout();
404 423 QdfFixer qf(filename);
405   - qf.processLines(lines);
  424 + qf.processLines(input);
406 425 return 0;
407 426 }
408 427  
... ...