| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- diff -Naur a/action.c b/action.c
- --- a/action.c 2009-11-18 13:15:21.000000000 +0000
- +++ b/action.c 2009-11-18 13:11:19.000000000 +0000
- @@ -31,6 +31,30 @@
- }
-
- /**
- + * Creates a "key=value" string from the given key and value
- + *
- + * @1 Key
- + * @2 Value
- + *
- + * Returns: Newly allocated string in "key=value" form
- + *
- + */
- +static char* alloc_env(const char *key, const char *value) {
- + size_t keylen, vallen;
- + char *combined;
- +
- + keylen = strlen(key);
- + vallen = strlen(value) + 1;
- +
- + combined = xmalloc(keylen + vallen + 1);
- + memcpy(combined, key, keylen);
- + combined[keylen] = '=';
- + memcpy(&combined[keylen + 1], value, vallen);
- +
- + return combined;
- +}
- +
- +/**
- * Choose what action should be taken according to passed settings.
- *
- * @1 Hotplug settings
- @@ -41,16 +65,25 @@
- */
- void action_perform(struct settings_t *settings, struct uevent_t *event) {
- int i;
- + char **env;
- +
- + env = xmalloc(sizeof(char *) * event->env_vars_c);
- +
- + for (i = 0; i < event->env_vars_c; i++) {
- + env[i] = alloc_env(event->env_vars[i].key, event->env_vars[i].value);
- + putenv(env[i]);
- + }
-
- - for (i = 0; i < event->env_vars_c; i++)
- - setenv(event->env_vars[i].key, event->env_vars[i].value, 1);
- -
- if (settings->dumb == 0) {
- ruleset_execute(&settings->rules, event, settings);
- } else {
- action_dumb(settings, event);
- }
-
- - for (i = 0; i < event->env_vars_c; i++)
- + for (i = 0; i < event->env_vars_c; i++) {
- unsetenv(event->env_vars[i].key);
- + free(env[i]);
- + }
- +
- + free(env);
- }
|