diff options
Diffstat (limited to 'src/libexpr/primops.cc')
-rw-r--r-- | src/libexpr/primops.cc | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc index 2a96e25a8484..bb9190579af2 100644 --- a/src/libexpr/primops.cc +++ b/src/libexpr/primops.cc @@ -622,6 +622,17 @@ static Expr prim_dirOf(EvalState & state, const ATermVector & args) } +/* Return the contents of a file as a string. */ +static Expr prim_readFile(EvalState & state, const ATermVector & args) +{ + PathSet context; + Path path = coerceToPath(state, args[0], context); + if (!context.empty()) + throw EvalError(format("string `%1%' cannot refer to other paths") % path); + return makeStr(readFile(path)); +} + + /************************************************************* * Creating files *************************************************************/ @@ -968,6 +979,7 @@ void EvalState::addPrimOps() addPrimOp("__pathExists", 1, prim_pathExists); addPrimOp("baseNameOf", 1, prim_baseNameOf); addPrimOp("dirOf", 1, prim_dirOf); + addPrimOp("__readFile", 1, prim_readFile); // Creating files addPrimOp("__toXML", 1, prim_toXML); |