hotplug2: procd does the hotplugging now
[openwrt.git] / package / hotplug2 / patches / 100-env_memleak.patch
diff --git a/package/hotplug2/patches/100-env_memleak.patch b/package/hotplug2/patches/100-env_memleak.patch
deleted file mode 100644 (file)
index 28a3e25..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
---- a/action.c
-+++ b/action.c
-@@ -31,6 +31,30 @@ static void action_dumb(const struct set
- }
- /**
-+ * 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 @@ static void action_dumb(const struct set
-  */
- 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);
- }