[leaf-commits] src/bering-uclibc4/source/busybox modprobe_alias_behaviors.patch, NONE, 1.1

Andrew <[email protected]>
Newsgroups gmane.linux.leaf.cvs
Message-ID <[email protected]>
Update of /cvsroot/leaf/src/bering-uclibc4/source/busybox
In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv23126

Added Files:
	modprobe_alias_behaviors.patch 
Log Message:
File added


--- NEW FILE: modprobe_alias_behaviors.patch ---
diff -aur busybox-1.15.3/modutils/Config.in busybox-1.15.3.new/modutils/Config.in
--- busybox-1.15.3/modutils/Config.in	2009-12-12 23:13:28.000000000 +0200
+++ busybox-1.15.3.new/modutils/Config.in	2010-07-10 00:34:05.230458203 +0300
@@ -52,6 +52,31 @@
 	help
 	  Check if the module is already loaded.
 
+choice
+	prompt "Alias loading policy"
+	default FEATURE_MODPROBE_SMALL_LOAD_FIRST_ALIAS
+	depends on MODPROBE_SMALL
+	help
+	  Policy for matching modalias: first matched, longest matched
+	  modalias, or modalias with longest prefix before wildcard
+
+config FEATURE_MODPROBE_SMALL_LOAD_FIRST_ALIAS
+	bool "First matched"
+	help
+	  Load first matched modalias (classical behavior)
+
+config FEATURE_MODPROBE_SMALL_LOAD_LONGEST_ALIAS
+	bool "Longest matched"
+	help
+	  Load longest modalias
+
+config FEATURE_MODPROBE_SMALL_LOAD_ALIAS_WITH_LONGEST_PREFIX
+	bool "With longest prefix"
+	help
+	  Load modalias that have longest prefix before wildcard
+
+endchoice
+
 config INSMOD
 	bool "insmod"
 	default n
diff -aur busybox-1.15.3/modutils/modprobe-small.c busybox-1.15.3.new/modutils/modprobe-small.c
--- busybox-1.15.3/modutils/modprobe-small.c	2009-12-12 23:13:28.000000000 +0200
+++ busybox-1.15.3.new/modutils/modprobe-small.c	2010-07-10 01:27:10.149457190 +0300
@@ -412,6 +412,14 @@
 static module_info* find_alias(const char *alias)
 {
 	int i;
+#if ENABLE_FEATURE_MODPROBE_SMALL_LOAD_ALIAS_WITH_LONGEST_PREFIX || ENABLE_FEATURE_MODPROBE_SMALL_LOAD_ALIAS_WITH_LONGEST_PREFIX
+	char res_alias[128];
+#endif
+#if ENABLE_FEATURE_MODPROBE_SMALL_LOAD_ALIAS_WITH_LONGEST_PREFIX
+	/* for code speed optimization */
+	char* pos;
+	int pos1, pos2;
+#endif
 	int dep_bb_fd;
 	module_info *result;
 	dbg1_error_msg("find_alias('%s')", alias);
@@ -445,10 +453,12 @@
 		if (!modinfo[i].aliases) {
 			parse_module(&modinfo[i], modinfo[i].pathname);
 		}
+#if ENABLE_FEATURE_MODPROBE_SMALL_LOAD_FIRST_ALIAS
 		if (result) {
 			i++;
 			continue;
 		}
+#endif
 		/* "alias1 symbol:sym1 alias2 symbol:sym2" */
 		desc = str_2_list(modinfo[i].aliases);
 		/* Does matching substring exist? */
@@ -460,13 +470,46 @@
 			if (fnmatch(s, alias, 0) == 0) {
 				dbg1_error_msg("found alias '%s' in module '%s'",
 						alias, modinfo[i].pathname);
+#if ENABLE_FEATURE_MODPROBE_SMALL_LOAD_LONGEST_ALIAS
+				/* Select longest modalias */
+				if (res_alias == NULL || strlen(res_alias) < strlen(s)) {
+					strcpy(res_alias, s);
+					result = &modinfo[i];
+					dbg1_error_msg("using module '%s'",
+							 modinfo[i].pathname);
+				}
+#elif ENABLE_FEATURE_MODPROBE_SMALL_LOAD_ALIAS_WITH_LONGEST_PREFIX
+				/* Select modalias that have longest prefix without '*' */
+				if (result != NULL) {
+					pos = strchr(res_alias, '*');
+					if (pos != NULL) {
+						pos1 = pos - res_alias;
+					} else
+						pos1 = strlen(res_alias);
+					pos = strchr(s, '*');
+					if (pos != NULL) {
+						pos2 = pos - s;
+					} else
+						pos2 = strlen(s);
+				}
+				if (result == NULL || pos1 < pos2 ) {
+					strcpy(res_alias, s);
+					result = &modinfo[i];
+					dbg1_error_msg("using module '%s'",
+							 modinfo[i].pathname);
+				}
+#else
+				/* Classical 'first match' */
 				result = &modinfo[i];
+#endif
 				break;
 			}
 		}
 		free(desc);
+#if ENABLE_FEATURE_MODPROBE_SMALL_LOAD_FIRST_ALIAS
 		if (result && dep_bb_fd < 0)
 			return result;
+#endif
 		i++;
 	}
 


------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.