diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2016-09-14 10:54:57 +0200 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2016-09-14 10:54:57 +0200 |
commit | e07c0dcf5c128875bf8af740b2c4bc81918713c9 (patch) | |
tree | 10cbe40f35fafb3a25c0802679f6c33f72b78be6 | |
parent | 2c8c103ef80378bfcfa29ae054fd878305b5e275 (diff) |
Move some .drv parsing functions out of util
-rw-r--r-- | src/libstore/derivations.cc | 46 | ||||
-rw-r--r-- | src/libutil/util.cc | 41 | ||||
-rw-r--r-- | src/libutil/util.hh | 14 |
3 files changed, 46 insertions, 55 deletions
diff --git a/src/libstore/derivations.cc b/src/libstore/derivations.cc index f051f10bd..3b6a62e13 100644 --- a/src/libstore/derivations.cc +++ b/src/libstore/derivations.cc @@ -87,6 +87,38 @@ Path writeDerivation(ref<Store> store, } +MakeError(FormatError, Error) + + +/* Read string `s' from stream `str'. */ +static void expect(std::istream & str, const string & s) +{ + char s2[s.size()]; + str.read(s2, s.size()); + if (string(s2, s.size()) != s) + throw FormatError(format("expected string ‘%1%’") % s); +} + + +/* Read a C-style string from stream `str'. */ +static 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; +} + + static Path parsePath(std::istream & str) { string s = parseString(str); @@ -96,6 +128,20 @@ static Path parsePath(std::istream & str) } +static bool endOfList(std::istream & str) +{ + if (str.peek() == ',') { + str.get(); + return false; + } + if (str.peek() == ']') { + str.get(); + return true; + } + return false; +} + + static StringSet parseStrings(std::istream & str, bool arePaths) { StringSet res; diff --git a/src/libutil/util.cc b/src/libutil/util.cc index f1e714a66..7efaf3e89 100644 --- a/src/libutil/util.cc +++ b/src/libutil/util.cc @@ -1087,47 +1087,6 @@ 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 FormatError(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; -} - - string decodeOctalEscaped(const string & s) { string r; diff --git a/src/libutil/util.hh b/src/libutil/util.hh index 819921dff..69c723ad2 100644 --- a/src/libutil/util.hh +++ b/src/libutil/util.hh @@ -334,20 +334,6 @@ bool hasPrefix(const string & s, const string & prefix); bool hasSuffix(const string & s, const string & suffix); -/* Read string `s' from stream `str'. */ -void expect(std::istream & str, const string & s); - -MakeError(FormatError, Error) - - -/* Read a C-style string from stream `str'. */ -string parseString(std::istream & str); - - -/* Utility function used to parse legacy ATerms. */ -bool endOfList(std::istream & str); - - /* Escape a string that contains octal-encoded escape codes such as used in /etc/fstab and /proc/mounts (e.g. "foo\040bar" decodes to "foo bar"). */ |