diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2010-04-19 13:46:58 +0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2010-04-19 13:46:58 +0000 |
commit | efc7a579e880ec15ebe9afc0d8766c85c7d53ec2 (patch) | |
tree | c83d553fcdc3f3497b6645baa198288d499054a1 /src/libutil/util.cc | |
parent | 55b5ddd3ca1ff4dfe4cfbfab92a4025d88ef6443 (diff) |
* Don't use the ATerm library for parsing/printing .drv files.
Diffstat (limited to 'src/libutil/util.cc')
-rw-r--r-- | src/libutil/util.cc | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/libutil/util.cc b/src/libutil/util.cc index d28d0e823..98912e7a0 100644 --- a/src/libutil/util.cc +++ b/src/libutil/util.cc @@ -1006,6 +1006,47 @@ bool hasSuffix(const string & s, const string & suffix) } +void expect(std::istream & str, const string & s) +{ + char s2[s.size()]; + str.read(s2, s.size()); + if (string(s2, s.size()) != s) + throw Error(format("expected string `%1%'") % s); +} + + +string parseString(std::istream & str) +{ + string res; + expect(str, "\""); + int c; + while ((c = str.get()) != '"') + if (c == '\\') { + c = str.get(); + if (c == 'n') res += '\n'; + else if (c == 'r') res += '\r'; + else if (c == 't') res += '\t'; + else res += c; + } + else res += c; + return res; +} + + +bool endOfList(std::istream & str) +{ + if (str.peek() == ',') { + str.get(); + return false; + } + if (str.peek() == ']') { + str.get(); + return true; + } + return false; +} + + void ignoreException() { try { |