summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Ma <yanmin@google.com>2020-02-26 12:39:57 -0800
committerMike Ma <yanmin@google.com>2020-02-26 12:39:57 -0800
commit266bec303c25dfebc7043643ee9ef0c8fd9aa03b (patch)
tree9e96eda4a71eda6f79e48740fff2ccb6c5163ade
parentd506a78e94594be701b2a061cb48b5e2f5cf3908 (diff)
Handle EOF explicitly in incident_helper
getLine returns -1 when it reaches EOF, and currently incident_helper does not differentiate between EOF and an actual error when calling getLinefrom file. So incident_helper throws an error when it reaches EOF, and this is not good. This change separates these two cases. Bug: 149895022 Bug: 150145113 Test: incident_helper_test Change-Id: Ic5e67f8f9e55719c17d624718b730981c4249da1
-rw-r--r--cmds/incident_helper/src/ih_util.cpp21
-rw-r--r--cmds/incident_helper/src/ih_util.h1
2 files changed, 14 insertions, 8 deletions
diff --git a/cmds/incident_helper/src/ih_util.cpp b/cmds/incident_helper/src/ih_util.cpp
index 77a56e55045b..9439e1d44291 100644
--- a/cmds/incident_helper/src/ih_util.cpp
+++ b/cmds/incident_helper/src/ih_util.cpp
@@ -237,33 +237,38 @@ double toDouble(const std::string& s) {
Reader::Reader(const int fd)
{
mFile = fdopen(fd, "r");
+ mBuffer = new char[1024];
mStatus = mFile == nullptr ? "Invalid fd " + std::to_string(fd) : "";
}
Reader::~Reader()
{
if (mFile != nullptr) fclose(mFile);
+ free(mBuffer);
}
bool Reader::readLine(std::string* line) {
if (mFile == nullptr) return false;
- char* buf = nullptr;
size_t len = 0;
- ssize_t read = getline(&buf, &len, mFile);
+ ssize_t read = getline(&mBuffer, &len, mFile);
if (read != -1) {
- std::string s(buf);
+ std::string s(mBuffer);
line->assign(trim(s, DEFAULT_NEWLINE));
- } else if (errno == EINVAL) {
- mStatus = "Bad Argument";
+ return true;
}
- free(buf);
- return read != -1;
+ if (!feof(mFile)) {
+ mStatus = "Error reading file. Ferror: " + std::to_string(ferror(mFile));
+ }
+ return false;
}
bool Reader::ok(std::string* error) {
+ if (mStatus.empty()) {
+ return true;
+ }
error->assign(mStatus);
- return mStatus.empty();
+ return false;
}
// ==============================================================================
diff --git a/cmds/incident_helper/src/ih_util.h b/cmds/incident_helper/src/ih_util.h
index 09dc8e6fdbfc..5812c603297e 100644
--- a/cmds/incident_helper/src/ih_util.h
+++ b/cmds/incident_helper/src/ih_util.h
@@ -117,6 +117,7 @@ public:
private:
FILE* mFile;
+ char* mBuffer;
std::string mStatus;
};