diff toys/other/printenv.c @ 653:2986aa63a021

Move commands into "posix", "lsb", and "other" menus/directories.
author Rob Landley <rob@landley.net>
date Sat, 25 Aug 2012 14:25:22 -0500
parents toys/printenv.c@e0eed40f4ab1
children 6df4ccc0acbe
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toys/other/printenv.c	Sat Aug 25 14:25:22 2012 -0500
@@ -0,0 +1,47 @@
+/* vi: set sw=4 ts=4:
+ *
+ * printenv.c - Print environment variables.
+ *
+ * Copyright 2012 Georgi Chorbadzhiyski <georgi@unixsol.org>
+ *
+
+USE_PRINTENV(NEWTOY(printenv, "0(null)", TOYFLAG_USR|TOYFLAG_BIN))
+
+config PRINTENV
+	bool "printenv"
+	default y
+	help
+	  usage: printenv [-0] [env_var...]
+
+	  Print environment variables.
+
+	  -0	Use \0 as delimiter instead of \n
+*/
+
+#include "toys.h"
+
+extern char **environ;
+
+void printenv_main(void)
+{
+	char **env, **var = toys.optargs;
+	char delim = '\n';
+
+	if (toys.optflags) delim = 0;
+
+	do {
+		int catch = 0, len = *var ? strlen(*var) : 0;
+
+		for (env = environ; *env; env++) {
+			char *out = *env;
+			if (*var) {
+				if (!strncmp(out, *var, len) && out[len] == '=')
+					out += len +1;
+				else continue;
+			}
+			xprintf("%s%c", out, delim);
+			catch++;
+		}
+		if (*var && !catch) toys.exitval = 1;
+	} while (*var && *(++var));
+}