summaryrefslogtreecommitdiff
path: root/src/Netrc.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2012-02-29 02:50:12 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2012-02-29 02:50:12 +0900
commit037f1512dbcdf19237d6064660d5c75b4121f0bf (patch)
treeec092c918a1396e382d776932d2265b019888b9e /src/Netrc.cc
parentc63a524a889415bb321231ac723de8547318900d (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.cc29
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) {