changeset 406:c8a3d740c229

'env' implementation - Initial
author Tryn Mirell <tryn@mirell.org>
date Mon, 16 Jan 2012 01:48:51 -0600
parents a8b14410e784
children b8390ededd02
files toys/env.c
diffstat 1 files changed, 52 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toys/env.c	Mon Jan 16 01:48:51 2012 -0600
@@ -0,0 +1,52 @@
+/* vi: set sw=4 ts=4:
+ * env.c
+
+USE_ENV(NEWTOY(env, "^?i", TOYFLAG_USR|TOYFLAG_BIN))
+
+config ENV
+	bool "env"
+	default n
+	help
+        
+        Set the environment for command invocation
+*/
+
+#include "toys.h"
+
+extern char **environ;
+
+void env_main(void)
+{
+    char **ev;
+    char **command = NULL;
+
+    if (toys.optflags & 1) clearenv();
+    
+    for (ev = toys.optargs; *ev != NULL; ev++) {
+        char *env = NULL, *val = NULL;
+        char *del = "=";
+        
+        env = strtok(*ev, del);
+        
+        if (env != NULL) val = strtok(NULL, del);
+        
+        if (val != NULL) {
+            setenv(env, val, 1);
+        } else {
+            command = ev;
+            break;
+        }
+    }
+    
+    if (!command) {
+        char **ep;
+        if (environ) {
+            for (ep = environ; *ep != NULL; ep++)
+                xputs(*ep);
+            return;
+        }
+    } else {
+        execvp(*command, command);
+    }
+
+}