aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pkgs/default.nix20
1 files changed, 13 insertions, 7 deletions
diff --git a/pkgs/default.nix b/pkgs/default.nix
index 10465a6..ea3421b 100644
--- a/pkgs/default.nix
+++ b/pkgs/default.nix
@@ -1,7 +1,7 @@
with import ../lib;
pkgs: oldpkgs: {
- execve = name: { filename, argv ? null, envp ? {}, destination ? "" }:
+ exec = name: { filename, argv ? null, envp ? null, destination ? "" }:
pkgs.writeC name { inherit destination; } /* c */ ''
#include <unistd.h>
@@ -16,18 +16,24 @@ pkgs: oldpkgs: {
static char *const argv[] = ${toC (argv ++ [null])};
''}
- static char *const envp[] = ${toC (
- mapAttrsToList (k: v: "${k}=${v}") envp ++ [null]
- )};
+ ${optionalString (envp != null) /* c */ ''
+ static char *const envp[] = ${toC (
+ mapAttrsToList (k: v: "${k}=${v}") envp ++ [null]
+ )};
+ ''}
int main (MAIN_ARGS) {
- execve(filename, argv, envp);
+ ${if envp == null then /* c */ ''
+ execv(filename, argv);
+ '' else /* c */ ''
+ execve(filename, argv, envp);
+ ''}
return -1;
}
'';
- execveBin = name: cfg:
- pkgs.execve name (cfg // { destination = "/bin/${name}"; });
+ execBin = name: cfg:
+ pkgs.exec name (cfg // { destination = "/bin/${name}"; });
makeScriptWriter = { interpreter, check ? null }: name: text:
assert (with types; either absolute-pathname filename).check name;