Changed command syntax to allow unsetting
authorMyhailo Danylenko <isbear@ukrpost.net>
Mon, 07 Dec 2009 01:04:25 +0200
changeset 4 2c5225ab6eb7
parent 3 490c62fe90eb
child 5 da2fdd072650
Changed command syntax to allow unsetting
env.c
help/en/hlp_env.txt
--- a/env.c	Fri Nov 13 17:48:13 2009 +0200
+++ b/env.c	Mon Dec 07 01:04:25 2009 +0200
@@ -32,17 +32,10 @@
 
 extern char **environ;
 
-// /env [option] [value]
+// /env [option [= [value]]]
 static void do_env (char *arg)
 {
-	char **args = split_arg (arg, 2, 1);
-	char  *var  = args[0];
-	char  *val;
-
-	if (var)
-		val = args[1];
-
-	if (!var) {
+	if (!*arg) {
 		// print full variables list
 		GSList  *vars   = NULL;
 		int      max    = 0;
@@ -66,7 +59,7 @@
 		}
 
 		if (max) {
-			gchar  *format = g_strdup_printf ("%%-%ds = %%s", max);
+			gchar  *format = g_strdup_printf ("Env %%-%ds = %%s", max);
 			GSList *eel;
 
 			vars = g_slist_sort (vars, (GCompareFunc) strcmp);
@@ -85,17 +78,43 @@
 
 		g_slist_free (vars);
 
-	} else if (!val) {
-		// print variable alone
-		char *value = getenv (var);
+	} else {
+
+		char *varend = strchr (arg, '=');
+
+		if (!varend) {
+			// print variable alone
+			char *value = getenv (arg);
+
+			if (value)
+				scr_LogPrint (LPRINT_NORMAL, "Env %s = %s", arg, value);
+
+		} else if (varend == arg)
+
+				scr_LogPrint (LPRINT_NORMAL, "You must specify variable name.");
+
+		else {
 
-		if (value)
-			scr_LogPrint (LPRINT_NORMAL, "%s = %s", var, value);
-	} else
-		// set variable
-		setenv (var, val, 1);
+			char *argstart = varend + 1;
+			char *var;
+
+			for (varend--; varend > arg && *varend == ' '; --varend);
+
+			var = g_strndup (arg, varend - arg + 1);
+
+			while (!*argstart && *argstart == ' ')
+				++argstart;
 
-	free_arg_lst (args);
+			if (*argstart)
+				// set variable
+				setenv (var, argstart, 1);
+			else
+				// unset variable
+				unsetenv (var);
+
+			g_free (var);
+		}
+	}
 }
 
 // /cd [path]
--- a/help/en/hlp_env.txt	Fri Nov 13 17:48:13 2009 +0200
+++ b/help/en/hlp_env.txt	Mon Dec 07 01:04:25 2009 +0200
@@ -1,4 +1,12 @@
 
- /ENV [variable [value]]
+ /ENV [variable [= [value]]
 
 Tampers with mcabber environment. Without arguments prints entire list of variables, with variable name - only this variable, with value - sets specified variable's value.
+/env
+ Prints list of all environment variables.
+/env variable
+ Prints value of this variable.
+/env variable =
+ Unsets variable.
+/env variable = value
+ Sets variable.