From 471ecfcaae8ee70d2f3ac5a6412eec17c38e40b3 Mon Sep 17 00:00:00 2001 From: jiangzhiwen Date: Thu, 30 Jul 2020 11:42:05 +0800 Subject: [PATCH] adapt euler eof --- .../minddata/dataset/engine/datasetops/source/csv_op.cc | 5 ++++- .../ccsrc/minddata/dataset/engine/datasetops/source/csv_op.h | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/mindspore/ccsrc/minddata/dataset/engine/datasetops/source/csv_op.cc b/mindspore/ccsrc/minddata/dataset/engine/datasetops/source/csv_op.cc index 37d957ba21..1bf887458f 100644 --- a/mindspore/ccsrc/minddata/dataset/engine/datasetops/source/csv_op.cc +++ b/mindspore/ccsrc/minddata/dataset/engine/datasetops/source/csv_op.cc @@ -411,7 +411,10 @@ Status CsvOp::LoadFile(const std::string &file, const int64_t start_offset, cons csv_parser.Reset(); try { while (ifs.good()) { - char chr = ifs.get(); + // when ifstream reachs the end of file, the function get() return std::char_traits::eof() + // which is a 32-bit -1, it's not equal to the 8-bit -1 on Euler OS. So instead of char, we use + // int to receive its return value. + int chr = ifs.get(); if (csv_parser.processMessage(chr) != 0) { RETURN_STATUS_UNEXPECTED("Failed to parse file " + file + ":" + std::to_string(csv_parser.total_rows_ + 1) + ". error message: " + csv_parser.err_message_); diff --git a/mindspore/ccsrc/minddata/dataset/engine/datasetops/source/csv_op.h b/mindspore/ccsrc/minddata/dataset/engine/datasetops/source/csv_op.h index b095542756..3201d1df4f 100644 --- a/mindspore/ccsrc/minddata/dataset/engine/datasetops/source/csv_op.h +++ b/mindspore/ccsrc/minddata/dataset/engine/datasetops/source/csv_op.h @@ -95,7 +95,7 @@ class CsvOp : public ParallelOp { void setEndOffset(int64_t end_offset) { end_offset_ = end_offset; } - int processMessage(char c) { + int processMessage(int c) { Message m = getMessage(c); StateDiagram::iterator it = sd.find({cur_state_, m}); if (it == sd.end()) { @@ -132,7 +132,7 @@ class CsvOp : public ParallelOp { typedef std::pair> StateActionPair; typedef std::map StateDiagram; - Message getMessage(char c) { + Message getMessage(int c) { if (c == csv_field_delim_) { return Message::MS_DELIM; } else if (c == '"') {