From 05c0ca34a722cc87ef1519fd36c82acd8022a7c8 Mon Sep 17 00:00:00 2001
From: Felix Fietkau <nbd@openwrt.org>
Date: Mon, 25 Jun 2007 09:46:37 +0000
Subject: [PATCH] update to hotplug2 svn version (recommended by iSteve)

SVN-Revision: 7725
---
 package/hotplug2/Makefile                     |   1 +
 .../hotplug2/patches/100-rules_override.patch |  35 --
 package/hotplug2/patches/100-svn_update.patch | 542 ++++++++++++++++++
 .../hotplug2/patches/120-action_types.patch   |  13 -
 4 files changed, 543 insertions(+), 48 deletions(-)
 delete mode 100644 package/hotplug2/patches/100-rules_override.patch
 create mode 100644 package/hotplug2/patches/100-svn_update.patch
 delete mode 100644 package/hotplug2/patches/120-action_types.patch

diff --git a/package/hotplug2/Makefile b/package/hotplug2/Makefile
index 94aadc0853..ee35bd6fce 100644
--- a/package/hotplug2/Makefile
+++ b/package/hotplug2/Makefile
@@ -21,6 +21,7 @@ include $(INCLUDE_DIR)/package.mk
 define Package/hotplug2
   SECTION:=utils
   CATEGORY:=Utilities
+  VERSION:=0.9+r102-$(PKG_RELEASE)
   TITLE:=Dynamic device management subsystem for embedded systems
   URL:=http://isteve.bofh.cz/~isteve/hotplug2/
 endef
diff --git a/package/hotplug2/patches/100-rules_override.patch b/package/hotplug2/patches/100-rules_override.patch
deleted file mode 100644
index 55b2aaacc9..0000000000
--- a/package/hotplug2/patches/100-rules_override.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-Index: hotplug2-0.9/hotplug2.c
-===================================================================
---- hotplug2-0.9.orig/hotplug2.c	2007-06-04 13:21:41.134723240 +0200
-+++ hotplug2-0.9/hotplug2.c	2007-06-04 13:21:41.203712752 +0200
-@@ -391,6 +391,7 @@
- 	int rv = 0;
- 	int i;
- 	char *coldplug_command = NULL;
-+	char *rules_file = HOTPLUG2_RULE_PATH;
- 	sigset_t block_mask;
- 	
- 	struct rules_t *rules = NULL;
-@@ -435,6 +436,13 @@
- 						break;
- 					
- 					modprobe_command = *argv;
-+				} else if (!strcmp(*argv, "--set-rules-file")) {
-+					argv++;
-+					argc--;
-+					if (argc <= 0)
-+						break;
-+					
-+					rules_file = *argv;
- 				}
- 			}
- 		}
-@@ -443,7 +451,7 @@
- #ifdef HAVE_RULES
- 	if (!dumb) {
- 		filemap = MAP_FAILED;
--		rule_fd = open(HOTPLUG2_RULE_PATH, O_RDONLY | O_NOATIME);
-+		rule_fd = open(rules_file, O_RDONLY | O_NOATIME);
- 		if (rule_fd == -1) {
- 			dumb = 1;
- 			ERROR("rules parse","Unable to open rules file: %s.", strerror(errno));
diff --git a/package/hotplug2/patches/100-svn_update.patch b/package/hotplug2/patches/100-svn_update.patch
new file mode 100644
index 0000000000..ab6bbc2423
--- /dev/null
+++ b/package/hotplug2/patches/100-svn_update.patch
@@ -0,0 +1,542 @@
+diff -urN -x .svn hotplug2-0.9/AUTHORS hotplug2/AUTHORS
+--- hotplug2-0.9/AUTHORS	2006-10-08 18:13:50.000000000 +0200
++++ hotplug2/AUTHORS	2007-06-25 10:51:14.688225416 +0200
+@@ -1,7 +1,11 @@
+  Authors:
+ ----------
+ iSteve <isteve@bofh.cz>
+-Tomas Janousek <tomi@nomi.cz>
++
++ Contributions:
++----------------
++nbd (rules override patch)
++Tomas Janousek <tomi@nomi.cz> (Makefiles, SVN hosting)
+ 
+  Thanks to:
+ ------------
+@@ -10,5 +14,9 @@
+ Randy Dunlap (help with isapnpmap)
+ Igor2 (provided testing machines)
+ yanek (provided testing machines)
++Zdenek Styblik (provided testing OpenWRT device)
++OpenWRT team (for trusting this project)
++mtu (debugging, testing, ideas)
++mnemoc (trivial sanity changes on makefiles, linux24 compat patches)
+ 
+-...anyone taking more than a short peek at the software.
+\ No newline at end of file
++...anyone taking more than a short peek at the software.
+diff -urN -x .svn hotplug2-0.9/Changelog hotplug2/Changelog
+--- hotplug2-0.9/Changelog	2006-10-08 15:32:31.000000000 +0200
++++ hotplug2/Changelog	2007-06-25 10:51:14.689225264 +0200
+@@ -1,3 +1,10 @@
++0.9 - 1.0:
++* Add --set-rules-file.
++* Allow any ACTION.
++* Add 'printdebug' rule.
++* Fix chmod, chown, chgrp.
++* Use octal for chmod and makedev.
++
+ 0.8 - 0.9:
+ * Use signals to handle children.
+ * Separate info and debugging output.
+@@ -44,4 +51,4 @@
+ * Add more actions.
+ * Significant cleanup of rules handling.
+ * Better error reporting.
+- 
+\ No newline at end of file
++ 
+diff -urN -x .svn hotplug2-0.9/docs/hotplug2.8 hotplug2/docs/hotplug2.8
+--- hotplug2-0.9/docs/hotplug2.8	2006-09-26 09:23:36.000000000 +0200
++++ hotplug2/docs/hotplug2.8	2007-06-25 10:51:14.540247912 +0200
+@@ -31,6 +31,8 @@
+ .TP 
+ \fB\-\-set\-modprobe\-cmd <cmd>\fR
+ Sets the application used to perform modprobe. It only gets used in dumb mode. Default is to autodetect: if '/bin/modprobe' is from module\-init\-tools, use '/sbin/modprobe', otherwise use '/sbin/hotplug2\-modwrap'.
++\fB\-\-set\-rules\-file <file>\fR
++Sets the path to the file containing hotplug2 rules.
+ .SH "SIGNALS"
+ .TP 
+ \fBSIGUSR1\fR
+diff -urN -x .svn hotplug2-0.9/docs/hotplug2.rules.doc hotplug2/docs/hotplug2.rules.doc
+--- hotplug2-0.9/docs/hotplug2.rules.doc	2006-09-26 10:19:46.000000000 +0200
++++ hotplug2/docs/hotplug2.rules.doc	2007-06-25 10:51:14.537248368 +0200
+@@ -11,12 +11,12 @@
+ 	[... [...]]
+ }
+ 
+-Comments are allowed, they are prefixed with '#', treating the whole rest of the
+-line as comment. Please note that comments in place of action parameters are not
+-supported.
++Comments are allowed, they are prefixed with '#', treating the whole rest of
++the line as comment. Please note that comments in place of action parameters
++are not supported.
+ 
+-The <key> is one of the environmental variables that have been obtained by the
+-uevent netlink. 
++The <key> is one of the environmental variables that have been obtained by
++the uevent netlink. 
+ 
+  COMMON KEYS
+  -----------
+@@ -66,9 +66,9 @@
+   -------
+ 
+  * run <...>
+-	Execute an application using system();, takes one parameter. Note that
+-	the application has set all environmental variables read by uevent
+-	netlink.
++	Execute an application using system();, takes one parameter. Note
++	that the application has set all environmental variables read by 
++	uevent netlink.
+ 
+  * break
+ 	Break the processing of the current block of actions.
+@@ -86,23 +86,22 @@
+ 
+  * exec <application [parameter [parameter [...]]]> ;
+ 	Execute an application. Takes variable number of parameters, but the
+-	last parameter must be terminated with semicolon. Again, all variables
+-	are set as environmental.
++	last parameter must be terminated with semicolon. Again, all
++	variables are set as environmental.
+ 	
+-	If you need to escape the ';', use '\\;'. Only applies for actions with
+-	variable number of parameters.
++	If you need to escape the ';', use '\\;'. Only applies for actions
++	with variable number of parameters.
+ 	
+  * makedev <path> <mode>
+-	Create a device with given mode. The mode is not in octal unless it
+-	starts with '0', eg. "0644" != "644".
++	Create a device with given mode. Mode is interpreted as octal.
+ 	
+ 	Major, minor and devpath must be set for makedev to be able to work.
+ 	Tests for these variables are also performed internally in makedev
+ 	function.
+ 
+  * symlink <target> <linkname>
+-	Create a symbolic link (symlink, also known as soft link) pointing at
+-	target with name linkname.
++	Create a symbolic link (symlink, also known as soft link) pointing
++	at target with name linkname.
+ 	
+  * chown <path> <owner name>
+ 	Change owner of path to owner name.
+@@ -111,12 +110,14 @@
+ 	Change group of path to group name.
+ 	
+  * chmod <path> <mode>
+-	Change mode of path to given mode. Like with makedev, heading '0' is
+-	necessary for the mode to be interpreted as octal.
++	Change mode of path to given mode. Mode is interpreted as octal.
+ 
+  * setenv <key> <value>
+ 	Sets environmental variable key to the given value. If an env var
+ 	of the given name already exists, it gets overwritten.
++
++ * printdebug
++ 	Prints all variables read from kernel.
+ 	
+  ESCAPING
+  --------
+@@ -136,8 +137,9 @@
+  SAMPLE CONFIG
+  -------------
+ 
+-Below is a sample hotplug2.rules file. It loads modules to all available devices
+-quietly and creates device nodes for block devices.
++Below is a sample hotplug2.rules file. It loads modules to all available
++devices quietly and creates device nodes for block devices. Note that this
++sample is not very viable for real life usage.
+ ---------------------------------------------------------------------------------
+ MODALIAS is set {
+ 	exec modprobe -q %MODALIAS% ;
+@@ -146,3 +148,33 @@
+ SUBSYSTEM == block, DEVPATH is set, MAJOR is set, MINOR is set {
+ 	makedev /dev/%DEVICENAME% 0644
+ }
++
++
++Please find also the more complex set of rules, dedicated to handling most
++common needs.
++---------------------------------------------------------------------------------
++#For debugging
++#ACTION is set {
++#	printdebug
++#}
++
++# Load modules (what old hotplug did)
++MODALIAS is set {
++	exec modprobe -q %MODALIAS% ;
++}
++
++# Create device nodes
++DEVPATH is set, MAJOR is set, MINOR is set {
++	makedev /dev/%DEVICENAME% 0644
++}
++
++# Mount a USB flashdisk
++ACTION == add, PHYSDEVPATH ~~ "/usb[0-9]*/", DEVICENAME ~~ "^sd[a-z][0-9]+$", DEVPATH is set, MAJOR is set, MINOR is set {
++	makedev /dev/%DEVICENAME% 0644
++	exec mount /dev/%DEVICENAME% /mnt/%DEVICENAME%
++}
++
++# Unmount a USB flashdisk
++ACTION == remove, PHYSDEVPATH ~~ "/usb[0-9]*/", DEVICENAME ~~ "^sd[a-z][0-9]+$", MAJOR is set, MINOR is set {
++	exec umount /mnt/%DEVICENAME%
++}
+diff -urN -x .svn hotplug2-0.9/docs/Makefile hotplug2/docs/Makefile
+--- hotplug2-0.9/docs/Makefile	2006-09-26 00:27:02.000000000 +0200
++++ hotplug2/docs/Makefile	2007-06-25 10:51:14.540247912 +0200
+@@ -2,12 +2,13 @@
+ 
+ BINS=
+ SUBDIRS=
+-
++DESTDIR=
++MANDIR=/usr/share/man
+ 
+ all:
+ 
+ install:
+-	$(INSTALL) $(wildcard *.8) /usr/share/man/man8/
++	$(INSTALL) $(wildcard *.8) $(DESTDIR)$(MANDIR)/man8/
+ 
+ 
+ include ../common.mak
+diff -urN -x .svn hotplug2-0.9/examples/Makefile hotplug2/examples/Makefile
+--- hotplug2-0.9/examples/Makefile	2006-09-26 01:03:08.000000000 +0200
++++ hotplug2/examples/Makefile	2007-06-25 10:51:14.685225872 +0200
+@@ -2,19 +2,23 @@
+ 
+ BINS=
+ SUBDIRS=
++DESTDIR=
++KERNELVER=`uname -r`
+ 
+ 
+ all:
+ 
+ install:
+-	case "`uname -r`" in \
+-		2.6.*) \
+-		$(INSTALL) hotplug2.rules-2.6kernel /etc/hotplug2.rules \
+-		;; \
+-		*) \
+-		$(INSTALL) hotplug2.rules-2.4kernel /etc/hotplug2.rules \
+-		;; \
+-	esac
++	if ! [ -e "/etc/hotplug2.rules" ]; then \
++		case "$(KERNELVER)" in \
++			2.6.*) \
++			$(INSTALL) hotplug2.rules-2.6kernel $(DESTDIR)/etc/hotplug2.rules \
++			;; \
++			*) \
++			$(INSTALL) hotplug2.rules-2.4kernel $(DESTDIR)/etc/hotplug2.rules \
++			;; \
++		esac; \
++	fi;
+ 
+ 
+ include ../common.mak
+diff -urN -x .svn hotplug2-0.9/hotplug2.c hotplug2/hotplug2.c
+--- hotplug2-0.9/hotplug2.c	2006-10-08 15:18:23.000000000 +0200
++++ hotplug2/hotplug2.c	2007-06-25 10:51:14.688225416 +0200
+@@ -391,6 +391,7 @@
+ 	int rv = 0;
+ 	int i;
+ 	char *coldplug_command = NULL;
++	char *rules_file = HOTPLUG2_RULE_PATH;
+ 	sigset_t block_mask;
+ 	
+ 	struct rules_t *rules = NULL;
+@@ -435,15 +436,31 @@
+ 						break;
+ 					
+ 					modprobe_command = *argv;
++				} else if (!strcmp(*argv, "--set-rules-file")) {
++					argv++;
++					argc--;
++					if (argc <= 0)
++						break;
++					
++					rules_file = *argv;
+ 				}
+ 			}
+ 		}
+ 	}
+ 	
+-#ifdef HAVE_RULES
++#ifndef HAVE_RULES
++	/*
++	 * We don't use rules, so we use dumb mode only.
++	 */
++	dumb = 1;
++#else
++	/*
++	 * We're not in dumb mode, parse the rules. If we fail,
++	 * faillback to dumb mode.
++	 */
+ 	if (!dumb) {
+ 		filemap = MAP_FAILED;
+-		rule_fd = open(HOTPLUG2_RULE_PATH, O_RDONLY | O_NOATIME);
++		rule_fd = open(rules_file, O_RDONLY | O_NOATIME);
+ 		if (rule_fd == -1) {
+ 			dumb = 1;
+ 			ERROR("rules parse","Unable to open rules file: %s.", strerror(errno));
+@@ -477,10 +494,12 @@
+ 		
+ 		if (dumb == 1)
+ 			ERROR("rules parse","Parsing rules failed, switching to dumb mode.");
+-	} else if (!modprobe_command)
+-#else
+-	if (dumb && !modprobe_command)
++	} else
+ #endif
++	/*
++	 * No modprobe command specified, let's autodetect it.
++	 */
++	if (!modprobe_command)
+ 	{
+ 		if (get_modprobe_command()) {
+ 			ERROR("modprobe_command","Unable to autodetect modprobe command.");
+@@ -536,7 +555,7 @@
+ 		
+ 		modalias = get_hotplug2_value_by_key(tmpevent, "MODALIAS");
+ 		seqnum = get_hotplug2_value_by_key(tmpevent, "SEQNUM");
+-		
++
+ 		if (seqnum == NULL) {
+ 			free_hotplug2_event(tmpevent);
+ 			ERROR("reading events", "Malformed event read (missing SEQNUM).");
+@@ -547,7 +566,7 @@
+ 		if (cur_seqnum > highest_seqnum)
+ 			highest_seqnum = cur_seqnum;
+ 		
+-		if (tmpevent->action == ACTION_ADD && (!dumb || modalias != NULL)) {
++		if ((dumb && tmpevent->action == ACTION_ADD && modalias != NULL) || (!dumb)) {
+ 			/* 
+ 			 * We have more children than we want. Wait until SIGCHLD handler reduces
+ 			 * their numbers.
+@@ -568,11 +587,9 @@
+ 					sigprocmask(SIG_UNBLOCK, &block_mask, 0);
+ 					signal(SIGCHLD, SIG_DFL);
+ 					signal(SIGUSR1, SIG_DFL);
+-#ifdef HAVE_RULES
+ 					if (!dumb)
+ 						perform_action(dup_hotplug2_event(tmpevent), rules);
+ 					else
+-#endif
+ 						perform_dumb_action(dup_hotplug2_event(tmpevent), modalias);
+ 					exit(0);
+ 					break;
+@@ -593,12 +610,10 @@
+ 	signal(SIGINT, SIG_DFL);
+ 	signal(SIGCHLD, SIG_DFL);
+ 	
+-#ifdef HAVE_RULES
+ 	if (!dumb) {
+ 		rules_free(rules);
+ 		free(rules);
+ 	}
+-#endif
+ 
+ 	cleanup();
+ 	
+diff -urN -x .svn hotplug2-0.9/linux24_compat/hotplug2-modwrap.c hotplug2/linux24_compat/hotplug2-modwrap.c
+--- hotplug2-0.9/linux24_compat/hotplug2-modwrap.c	2006-09-25 22:23:07.000000000 +0200
++++ hotplug2/linux24_compat/hotplug2-modwrap.c	2007-06-25 10:51:14.601238640 +0200
+@@ -122,6 +122,12 @@
+ 		free(module);
+ 		free(line);
+ 	}
++
++	if (strcmp(argv[argc - 1], match_alias) == 0) {
++		if (execute(argv)) {
++			ERROR("execute", "Unable to execute: `%s'.", argv[0]);
++		}
++	}	
+ 	
+ 	free(filename);
+ 	free(match_alias);
+diff -urN -x .svn hotplug2-0.9/linux24_compat/Makefile hotplug2/linux24_compat/Makefile
+--- hotplug2-0.9/linux24_compat/Makefile	2006-09-26 00:26:46.000000000 +0200
++++ hotplug2/linux24_compat/Makefile	2007-06-25 10:51:14.601238640 +0200
+@@ -2,13 +2,14 @@
+ 
+ BINS=generate_alias hotplug2-coldplug-2.4 hotplug2-modwrap
+ SUBDIRS=
++DESTDIR=
+ 
+ 
+ all: $(BINS)
+ 
+ install:
+-	$(INSTALL_BIN) hotplug2-coldplug-2.4 hotplug2-modwrap /sbin/
+-	$(INSTALL_BIN) generate_alias /usr/sbin/
++	$(INSTALL_BIN) hotplug2-coldplug-2.4 hotplug2-modwrap $(DESTDIR)/sbin/
++	$(INSTALL_BIN) generate_alias $(DESTDIR)/usr/sbin/
+ 
+ 
+ hotplug2-coldplug-2.4: hotplug2-coldplug-2.4.o ../parser_utils.o ../filemap_utils.o ../mem_utils.o
+diff -urN -x .svn hotplug2-0.9/Makefile hotplug2/Makefile
+--- hotplug2-0.9/Makefile	2006-09-26 01:03:08.000000000 +0200
++++ hotplug2/Makefile	2007-06-25 10:51:14.693224656 +0200
+@@ -2,12 +2,13 @@
+ 
+ BINS=hotplug2 hotplug2-dnode
+ SUBDIRS=linux24_compat docs examples
++DESTDIR=
+ 
+ 
+ all: $(BINS)
+ 
+ install:
+-	$(INSTALL_BIN) $(BINS) /sbin/
++	$(INSTALL_BIN) $(BINS) $(DESTDIR)/sbin/
+ 
+ 
+ hotplug2: hotplug2.o childlist.o mem_utils.o rules.o
+diff -urN -x .svn hotplug2-0.9/rules.c hotplug2/rules.c
+--- hotplug2-0.9/rules.c	2006-09-29 22:19:31.000000000 +0200
++++ hotplug2/rules.c	2007-06-25 10:51:14.692224808 +0200
+@@ -59,6 +59,24 @@
+ 	free(path);
+ }
+ 
++static void rmdir_p(char *path) {
++	char *ptr;
++	
++	path = strdup(path);
++	ptr = path;
++	while (ptr != NULL) {
++		ptr = strrchr(path, '/');
++		if (ptr == NULL)
++			break;
++		
++		*ptr = '\0';
++		
++		if (rmdir(path))
++			break;
++	}
++	free(path);
++}
++
+ static char *replace_str(char *hay, char *needle, char *replacement) {
+         char *ptr, *start, *bptr, *buf;
+         int occurences, j;
+@@ -250,11 +268,30 @@
+ 	return rv;
+ }
+ 
+-static int chown_chgrp(int action, char *file, char *param) {
++static int chmod_file(struct hotplug2_event_t *event, char *file, char *value) {
++	int rv;
++
++	file = replace_key_by_value(strdup(file), event);
++	value = replace_key_by_value(strdup(value), event);
++
++	rv = chmod(file, strtoul(value, 0, 8));
++
++	free(file);
++	free(value);
++
++	return rv;
++}
++
++static int chown_chgrp(struct hotplug2_event_t *event, int action, char *file, char *param) {
+ 	struct group *grp;
+ 	struct passwd *pwd;
+ 	int rv;
+-	
++
++	file = replace_key_by_value(strdup(file), event);
++	param = replace_key_by_value(strdup(param), event);
++
++	rv = -1;
++
+ 	switch (action) {
+ 		case ACT_CHOWN:
+ 			pwd = getpwnam(param);
+@@ -265,8 +302,20 @@
+ 			rv = chown(file, -1, grp->gr_gid);
+ 			break;
+ 	}
++
++	free(file);
++	free(param);
+ 	
+-	return -1;
++	return rv;
++}
++
++static int print_debug(struct hotplug2_event_t *event) {
++	int i;
++
++	for (i = 0; i < event->env_vars_c; i++)
++		printf("%s=%s\n", event->env_vars[i].key, event->env_vars[i].value);
++
++	return 0;
+ }
+ 
+ static int rule_condition_eval(struct hotplug2_event_t *event, struct condition_t *condition) {
+@@ -347,11 +396,11 @@
+ 				last_rv = make_dev_from_event(event, rule->actions[i].parameter[0], strtoul(rule->actions[i].parameter[1], NULL, 0));
+ 				break;
+ 			case ACT_CHMOD:
+-				last_rv = chmod(rule->actions[i].parameter[0], strtoul(rule->actions[i].parameter[1], NULL, 0));
++				last_rv = chmod_file(event, rule->actions[i].parameter[0], rule->actions[i].parameter[1]);
+ 				break;
+ 			case ACT_CHOWN:
+ 			case ACT_CHGRP:
+-				last_rv = chown_chgrp(rule->actions[i].type, rule->actions[i].parameter[0], rule->actions[i].parameter[1]);
++				last_rv = chown_chgrp(event, rule->actions[i].type, rule->actions[i].parameter[0], rule->actions[i].parameter[1]);
+ 				break;
+ 			case ACT_SYMLINK:
+ 				last_rv = make_symlink(event, rule->actions[i].parameter[0], rule->actions[i].parameter[1]);
+@@ -365,6 +414,13 @@
+ 			case ACT_SETENV:
+ 				last_rv = setenv(rule->actions[i].parameter[0], rule->actions[i].parameter[1], 1);
+ 				break;
++			case ACT_REMOVE:
++				last_rv = unlink(rule->actions[i].parameter[0]);
++				rmdir_p(rule->actions[i].parameter[0]);
++				break;
++			case ACT_DEBUG:
++				last_rv = print_debug(event);
++				break;
+ 		}
+ 	}
+ 	
+@@ -518,6 +574,8 @@
+ 		{"chmod", 2, ACT_CHMOD},
+ 		{"chgrp", 2, ACT_CHGRP},
+ 		{"setenv", 2, ACT_SETENV},
++		{"remove", 1, ACT_REMOVE},
++		{"printdebug", 0, ACT_DEBUG},
+ 		/*symlink*/
+ 		{"symlink", 2, ACT_SYMLINK},
+ 		{"softlink", 2, ACT_SYMLINK},
+diff -urN -x .svn hotplug2-0.9/rules.h hotplug2/rules.h
+--- hotplug2-0.9/rules.h	2006-09-25 13:42:22.000000000 +0200
++++ hotplug2/rules.h	2007-06-25 10:51:14.687225568 +0200
+@@ -24,9 +24,11 @@
+ #define ACT_CHGRP			6	/* chgrp <...> */
+ #define ACT_CHOWN			7	/* chown <...> */
+ #define ACT_SYMLINK			8	/* symlink <...> */
+-#define ACT_NEXT_EVENT		9	/* next */
++#define ACT_NEXT_EVENT			9	/* next */
+ #define ACT_NEXT_IF_FAILED		10	/* next_if_failed */
+ #define ACT_SETENV			11	/* setenv <...> */
++#define ACT_REMOVE			12	/* remove <...> */
++#define ACT_DEBUG			13	/* debug */
+ 
+ #define EVAL_MATCH			1
+ #define EVAL_NOT_MATCH			0
+diff -urN -x .svn hotplug2-0.9/TODO hotplug2/TODO
+--- hotplug2-0.9/TODO	1970-01-01 01:00:00.000000000 +0100
++++ hotplug2/TODO	2007-06-25 10:51:14.691224960 +0200
+@@ -0,0 +1 @@
++ - live rules update (via inotify)
diff --git a/package/hotplug2/patches/120-action_types.patch b/package/hotplug2/patches/120-action_types.patch
deleted file mode 100644
index c81b241b7a..0000000000
--- a/package/hotplug2/patches/120-action_types.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-Index: hotplug2-0.9/hotplug2.c
-===================================================================
---- hotplug2-0.9.orig/hotplug2.c	2007-06-25 09:07:07.038012616 +0200
-+++ hotplug2-0.9/hotplug2.c	2007-06-25 09:07:19.420130248 +0200
-@@ -555,7 +555,7 @@
- 		if (cur_seqnum > highest_seqnum)
- 			highest_seqnum = cur_seqnum;
- 		
--		if (tmpevent->action == ACTION_ADD && (!dumb || modalias != NULL)) {
-+		if (!dumb || modalias != NULL) {
- 			/* 
- 			 * We have more children than we want. Wait until SIGCHLD handler reduces
- 			 * their numbers.
-- 
GitLab