env.c
changeset 4 2c5225ab6eb7
parent 3 490c62fe90eb
child 5 da2fdd072650
equal deleted inserted replaced
3:490c62fe90eb 4:2c5225ab6eb7
    30 #include "compl.h"
    30 #include "compl.h"
    31 #include "logprint.h"
    31 #include "logprint.h"
    32 
    32 
    33 extern char **environ;
    33 extern char **environ;
    34 
    34 
    35 // /env [option] [value]
    35 // /env [option [= [value]]]
    36 static void do_env (char *arg)
    36 static void do_env (char *arg)
    37 {
    37 {
    38 	char **args = split_arg (arg, 2, 1);
    38 	if (!*arg) {
    39 	char  *var  = args[0];
       
    40 	char  *val;
       
    41 
       
    42 	if (var)
       
    43 		val = args[1];
       
    44 
       
    45 	if (!var) {
       
    46 		// print full variables list
    39 		// print full variables list
    47 		GSList  *vars   = NULL;
    40 		GSList  *vars   = NULL;
    48 		int      max    = 0;
    41 		int      max    = 0;
    49 
    42 
    50 		{
    43 		{
    64 				}
    57 				}
    65 			}
    58 			}
    66 		}
    59 		}
    67 
    60 
    68 		if (max) {
    61 		if (max) {
    69 			gchar  *format = g_strdup_printf ("%%-%ds = %%s", max);
    62 			gchar  *format = g_strdup_printf ("Env %%-%ds = %%s", max);
    70 			GSList *eel;
    63 			GSList *eel;
    71 
    64 
    72 			vars = g_slist_sort (vars, (GCompareFunc) strcmp);
    65 			vars = g_slist_sort (vars, (GCompareFunc) strcmp);
    73 
    66 
    74 			for (eel = vars; eel; eel = eel->next) {
    67 			for (eel = vars; eel; eel = eel->next) {
    83 			g_free (format);
    76 			g_free (format);
    84 		}
    77 		}
    85 
    78 
    86 		g_slist_free (vars);
    79 		g_slist_free (vars);
    87 
    80 
    88 	} else if (!val) {
    81 	} else {
    89 		// print variable alone
       
    90 		char *value = getenv (var);
       
    91 
    82 
    92 		if (value)
    83 		char *varend = strchr (arg, '=');
    93 			scr_LogPrint (LPRINT_NORMAL, "%s = %s", var, value);
       
    94 	} else
       
    95 		// set variable
       
    96 		setenv (var, val, 1);
       
    97 
    84 
    98 	free_arg_lst (args);
    85 		if (!varend) {
       
    86 			// print variable alone
       
    87 			char *value = getenv (arg);
       
    88 
       
    89 			if (value)
       
    90 				scr_LogPrint (LPRINT_NORMAL, "Env %s = %s", arg, value);
       
    91 
       
    92 		} else if (varend == arg)
       
    93 
       
    94 				scr_LogPrint (LPRINT_NORMAL, "You must specify variable name.");
       
    95 
       
    96 		else {
       
    97 
       
    98 			char *argstart = varend + 1;
       
    99 			char *var;
       
   100 
       
   101 			for (varend--; varend > arg && *varend == ' '; --varend);
       
   102 
       
   103 			var = g_strndup (arg, varend - arg + 1);
       
   104 
       
   105 			while (!*argstart && *argstart == ' ')
       
   106 				++argstart;
       
   107 
       
   108 			if (*argstart)
       
   109 				// set variable
       
   110 				setenv (var, argstart, 1);
       
   111 			else
       
   112 				// unset variable
       
   113 				unsetenv (var);
       
   114 
       
   115 			g_free (var);
       
   116 		}
       
   117 	}
    99 }
   118 }
   100 
   119 
   101 // /cd [path]
   120 // /cd [path]
   102 static void do_cd (char *arg)
   121 static void do_cd (char *arg)
   103 {
   122 {