env.c
author Myhailo Danylenko <isbear@ukrpost.net>
Fri, 06 Nov 2009 14:50:29 +0200
changeset 0 53ef7728edcf
child 3 490c62fe90eb
permissions -rw-r--r--
Initial commit
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     1
/*
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     2
 * env.c                -- Tampering with mcabber's environment
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     3
 *
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     4
 * Copyrigth (C) 2009      Myhailo Danylenko <isbear@ukrpost.net>
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     5
 *
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     6
 * This program is free software; you can redistribute it and/or modify
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     7
 * it under the terms of the GNU General Public License as published by
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     8
 * the Free Software Foundation; either version 2 of the License, or (at
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     9
 * your option) any later version.
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    10
 *
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    11
 * This program is distributed in the hope that it will be useful, but
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    12
 * WITHOUT ANY WARRANTY; without even the implied warranty of
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    14
 * General Public License for more details.
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    15
 *
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    16
 * You should have received a copy of the GNU General Public License
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    17
 * along with this program; if not, write to the Free Software
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    18
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    19
 * USA
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    20
 */
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    21
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    22
#include <glib.h>
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    23
#include <gmodule.h>
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    24
#include <string.h>
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    25
#include <stdlib.h>
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    26
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    27
#include "utils.h"
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    28
#include "compl.h"
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    29
#include "logprint.h"
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    30
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    31
extern char **environ;
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    32
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    33
// /env [option] [value]
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    34
static void do_env (char *arg)
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    35
{
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    36
	char **args = split_arg (arg, 2, 1);
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    37
	char  *var  = args[0];
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    38
	char  *val;
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    39
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    40
	if (var)
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    41
		val = args[1];
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    42
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    43
	if (!var) {
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    44
		// print full variables list
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    45
		GSList  *vars   = NULL;
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    46
		int      max    = 0;
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    47
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    48
		{
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    49
			char   **envvar;
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    50
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    51
			for (envvar = environ; *envvar; ++envvar) {
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    52
				char *end = strchr (*envvar, '=');
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    53
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    54
				if (end) {
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    55
					int   len  = end - *envvar;
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    56
					char *name = g_strndup (*envvar, len);
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    57
	
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    58
					if (len > max)
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    59
						max = len;
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    60
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    61
					vars = g_slist_prepend (vars, name);
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    62
				}
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    63
			}
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    64
		}
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    65
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    66
		if (max) {
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    67
			gchar  *format = g_strdup_printf ("%%-%ds = %%s", max);
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    68
			GSList *eel;
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    69
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    70
			vars = g_slist_sort (vars, (GCompareFunc) strcmp);
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    71
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    72
			for (eel = vars; eel; eel = eel->next) {
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    73
				char *name  = (char *) eel->data;
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    74
				char *value = getenv (name);
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    75
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    76
				scr_LogPrint (LPRINT_NORMAL, format, name, value);
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    77
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    78
				g_free (name);
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    79
			}
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    80
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    81
			g_free (format);
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    82
		}
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    83
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    84
		g_slist_free (vars);
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    85
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    86
	} else if (!val) {
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    87
		// print variable alone
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    88
		char *value = getenv (var);
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    89
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    90
		if (value)
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    91
			scr_LogPrint (LPRINT_NORMAL, "%s = %s", var, value);
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    92
	} else
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    93
		// set variable
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    94
		setenv (var, val, 1);
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    95
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    96
	free_arg_lst (args);
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    97
}
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    98
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    99
const gchar *g_module_check_init(GModule *module)
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   100
{
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   101
	// command
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   102
	cmd_add ("env", "", 0, 0, do_env, NULL);
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   103
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   104
	return NULL;
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   105
}
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   106
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   107
void g_module_unload(GModule *module)
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   108
{
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   109
	// command
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   110
	cmd_del ("env");
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   111
}
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   112
53ef7728edcf Initial commit
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   113
/* vim: se ts=4: */