summaryrefslogtreecommitdiff
path: root/package/hotplug2/patches/100-env_memleak.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/hotplug2/patches/100-env_memleak.patch')
-rw-r--r--package/hotplug2/patches/100-env_memleak.patch63
1 files changed, 0 insertions, 63 deletions
diff --git a/package/hotplug2/patches/100-env_memleak.patch b/package/hotplug2/patches/100-env_memleak.patch
deleted file mode 100644
index 28a3e25..0000000
--- a/package/hotplug2/patches/100-env_memleak.patch
+++ /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);
- }