diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2012-02-29 02:50:12 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2012-02-29 02:50:12 +0900 |
| commit | 037f1512dbcdf19237d6064660d5c75b4121f0bf (patch) | |
| tree | ec092c918a1396e382d776932d2265b019888b9e /src/Netrc.cc | |
| parent | c63a524a889415bb321231ac723de8547318900d (diff) | |
Added BufferedFile::getLine() to make reading one line more flexible.
Fixes bug#3495336
Diffstat (limited to 'src/Netrc.cc')
| -rw-r--r-- | src/Netrc.cc | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/src/Netrc.cc b/src/Netrc.cc index 50713224..1eb10aa6 100644 --- a/src/Netrc.cc +++ b/src/Netrc.cc @@ -115,12 +115,16 @@ void Netrc::addAuthenticator(const SharedHandle<Authenticator>& authenticator) namespace { void skipMacdef(BufferedFile& fp) { - char buf[4096]; + std::string s; while(1) { - if(!fp.gets(buf, sizeof(buf))) { + s = fp.getLine(); + if(s.empty() || fp.eof()) { break; } - if(buf[0] == '\n' || buf[0] == '\r') { + if(!fp) { + throw DL_ABORT_EX("Netrc:I/O error."); + } + if(s[0] == '\n' || s[0] == '\r') { break; } } @@ -144,18 +148,23 @@ void Netrc::parse(const std::string& path) }; SharedHandle<Authenticator> authenticator; STATE state = GET_TOKEN; - char buf[4096]; while(1) { - if(!fp.getsn(buf, sizeof(buf))) { - break; + std::string line = fp.getLine(); + if(line.empty()) { + if(fp.eof()) { + break; + } else if(!fp) { + throw DL_ABORT_EX("Netrc:I/O error."); + } else { + continue; + } } - size_t len = strlen(buf); - if(len == 0 || buf[0] == '#') { + if(line[0] == '#') { continue; } std::vector<Scip> tokens; - util::splitIterM(&buf[0], &buf[len], std::back_inserter(tokens), " \t", - true); + util::splitIterM(line.begin(), line.end(), std::back_inserter(tokens), + " \t", true); for(std::vector<Scip>::const_iterator iter = tokens.begin(), eoi = tokens.end(); iter != eoi; ++iter) { if(state == GET_TOKEN) { |
