aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2016-09-14 10:54:57 +0200
committerEelco Dolstra <eelco.dolstra@logicblox.com>2016-09-14 10:54:57 +0200
commite07c0dcf5c128875bf8af740b2c4bc81918713c9 (patch)
tree10cbe40f35fafb3a25c0802679f6c33f72b78be6
parent2c8c103ef80378bfcfa29ae054fd878305b5e275 (diff)
Move some .drv parsing functions out of util
-rw-r--r--src/libstore/derivations.cc46
-rw-r--r--src/libutil/util.cc41
-rw-r--r--src/libutil/util.hh14
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"). */