All of lore.kernel.org
 help / color / mirror / Atom feed
* patches for udev 018
@ 2004-02-21 18:12 Marco d'Itri
  2004-02-28  1:07 ` Greg KH
  0 siblings, 1 reply; 2+ messages in thread
From: Marco d'Itri @ 2004-02-21 18:12 UTC (permalink / raw)
  To: linux-hotplug

[-- Attachment #1: Type: text/plain, Size: 545 bytes --]

fix_expr: remove usage of expr in ide-devfs.sh, because it may be in
/usr/bin and not available at early boot time.

fix_segfault: fix a segfault when udev is started without the command
line parameter.

makefile_clean: delete all binaries when cleaning

merge_symlinks: allow multiple KERNEL=... SYMLINK=... directives
 
multiple_rules: allow listing more than one rules file in udev.conf

no_error_on_enoent: do not exit with an error and delete all files

remove_warnings: fix a compile time warning

-- 
ciao, |
Marco | [4695 sc.Be13Nezixw]

[-- Attachment #2: fix_expr --]
[-- Type: text/plain, Size: 700 bytes --]

diff -ruN udev-018.orig/extras/ide-devfs.sh udev-018/extras/ide-devfs.sh
--- udev-018.orig/extras/ide-devfs.sh	2004-02-19 19:38:37.000000000 +0100
+++ udev-018/extras/ide-devfs.sh	2004-02-21 17:57:06.000000000 +0100
@@ -8,7 +8,7 @@
 TARGET="${2#[0-9]\.}"
 
 if [ -z "${HOST#[13579]}" ]; then
-	HOST=`expr ${HOST} - 1`
+	HOST=$((${HOST} - 1))
 	BUS="1"
 else
 	BUS="0"
@@ -24,7 +24,7 @@
 		if [ -e "${x}" ]; then
 			MEDIA=`cat ${x}`
 			if [ "${MEDIA}" = "$2" ]; then
-				num=`expr ${num} + 1`
+				num=$((${num} + 1))
 			fi
 			if [ "${x}" = "/proc/ide/${DRIVE}/media" ]; then
 				break
@@ -32,7 +32,7 @@
 		fi
 	done
 	
-	echo `expr ${num} - 1`
+	echo $((${num} - 1))
 }
 
 if [ -z "$3" ]; then

[-- Attachment #3: fix_segfault --]
[-- Type: text/plain, Size: 478 bytes --]

diff -ruN udev-018.orig/udev.c udev-018/udev.c
--- udev-018.orig/udev.c	2004-02-19 19:38:35.000000000 +0100
+++ udev-018/udev.c	2004-02-21 11:40:26.000000000 +0100
@@ -129,8 +129,13 @@
 		goto exit;
 	}
 
-	/* skip blacklisted subsystems */
 	subsystem = argv[1];
+	if (!subsystem) {
+		dbg ("no subsystem?");
+		goto exit;
+	}
+
+	/* skip blacklisted subsystems */
 	i = 0;
 	while (subsystem_blacklist[i][0] != '\0') {
 		if (strcmp(subsystem, subsystem_blacklist[i]) == 0) {

[-- Attachment #4: makefile_clean --]
[-- Type: text/plain, Size: 579 bytes --]

diff -ruN udev-018.orig/Makefile udev-018/Makefile
--- udev-018.orig/Makefile	2004-02-19 19:38:36.000000000 +0100
+++ udev-018/Makefile	2004-02-21 13:41:36.000000000 +0100
@@ -278,7 +278,7 @@
 clean:
 	-find . \( -not -type d \) -and \( -name '*~' -o -name '*.[oas]' \) -type f -print \
 	 | xargs rm -f 
-	-rm -f core $(ROOT) $(GEN_HEADERS) $(GEN_CONFIGS) $(HELPER) $(DAEMON) $(SENDER)
+	-rm -f core $(ROOT) $(GEN_HEADERS) $(GEN_CONFIGS) $(TESTER) $(HELPER) $(DAEMON) $(SENDER)
 	$(MAKE) -C klibc clean
 	@extras="$(EXTRAS)" ; for target in $$extras ; do \
 		echo $$target ; \

[-- Attachment #5: merge_symlinks --]
[-- Type: text/plain, Size: 3092 bytes --]

diff -ruN udev-018.orig/namedev.c udev-018/namedev.c
--- udev-018.orig/namedev.c	2004-02-19 19:38:37.000000000 +0100
+++ udev-018/namedev.c	2004-02-21 12:57:35.000000000 +0100
@@ -805,30 +805,54 @@
 	list_for_each_entry(dev, &config_device_list, node) {
 		dbg("process rule");
 		if (match_rule(dev, class_dev, udev, sysfs_device) == 0) {
-			if (dev->name[0] == '\0') {
+			if (dev->name[0] == '\0' && dev->name[0] == '\0'
+					&& dev->symlink[0] == '\0') {
 				info("configured rule in '%s' at line %i applied, '%s' is ignored",
 				     udev_rules_filename, dev->config_line, udev->kernel_name);
 				return -1;
 			}
 
-			info("configured rule in '%s' at line %i applied, '%s' becomes '%s'",
-			     udev_rules_filename, dev->config_line, udev->kernel_name, dev->name);
-			strfieldcpy(udev->name, dev->name);
-			strfieldcpy(udev->symlink, dev->symlink);
-			goto found;
+			/* if everything matched add symlink to list of aliases */
+			if (dev->symlink[0] != '\0') {
+				char temp[NAME_MAX];
+
+				/* do not clobber dev */
+				strfieldcpy(temp, dev->symlink);
+				apply_format(udev, temp, class_dev, sysfs_device);
+				if (strlen(udev->symlink) + strlen(temp) + 2
+						> sizeof(udev->symlink)) {
+					dbg("could not append symlink %s for %s",
+						dev->symlink, udev->kernel_name);
+				} else {
+					strfieldcat(udev->symlink, temp);
+					strfieldcat(udev->symlink, " ");
+				}
+			}
+
+			/* is this symlink only rule? */
+			if (dev->name[0] == '\0')
+				continue;
+
+			/* Yup, this rule belongs to us!
+			 * but continue to collect symlinks */
+			if (udev->name[0] == '\0') {
+				info("configured rule line %i applied, '%s' becomes '%s'",
+					dev->config_line, udev->kernel_name, dev->name);
+				strfieldcpy(udev->name, dev->name);
+				/* substitute placeholder */
+				apply_format(udev, udev->name, class_dev, sysfs_device);
+			} else {
+				dbg("conflicting rule for '%s' would become '%s'",
+					dev->kernel, dev->name);
+			}
 		}
 	}
 
-	/* no rule was found so we use the kernel name */
-	strfieldcpy(udev->name, udev->kernel_name);
-	goto done;
-
-found:
-	/* substitute placeholder */
-	apply_format(udev, udev->name, class_dev, sysfs_device);
-	apply_format(udev, udev->symlink, class_dev, sysfs_device);
-	udev->partitions = dev->partitions;
-done:
+	/* no rule was found, so we use the kernel name */
+	if (udev->name[0] == '\0')
+		strfieldcpy(udev->name, class_dev->name);
+	dbg("symlinks for '%s' are: '%s'", udev->name, udev->symlink);
+
 	perm = find_perm(udev->name);
 	if (perm) {
 		udev->mode = perm->mode;
diff -ruN udev-018.orig/udev.h udev-018/udev.h
--- udev-018.orig/udev.h	2004-02-19 19:38:37.000000000 +0100
+++ udev-018/udev.h	2004-02-21 12:12:58.000000000 +0100
@@ -61,6 +61,12 @@
 	strncpy(to, from, sizeof(to)-1); \
 } while (0)
 
+#define strfieldcat(to, from) \
+do { \
+	to[sizeof(to)-1] = '\0'; \
+	strncat(to, from, sizeof(to)-1); \
+} while (0)
+
 extern int udev_add_device(char *path, char *subsystem, int fake);
 extern int udev_remove_device(char *path, char *subsystem);
 extern void udev_init_config(void);

[-- Attachment #6: multiple_rules --]
[-- Type: text/plain, Size: 1638 bytes --]

diff -ruN udev-018.orig/namedev_parse.c udev-018/namedev_parse.c
--- udev-018.orig/namedev_parse.c	2004-02-19 19:38:35.000000000 +0100
+++ udev-018/namedev_parse.c	2004-02-21 15:30:29.000000000 +0100
@@ -114,7 +114,32 @@
 	return NULL;
 }
 
-int namedev_init_rules(void)
+static int call_foreach_file(int parser (const char *f) , char *filenames)
+{
+	char *start = filenames;
+	int retval = 0;
+
+	while (1) {
+		char *end, *file;
+
+		for (end = start; !isspace(*end) && *end != '\0'; end++)
+			;
+
+		file = malloc(end - start + 1);
+		strncpy(file, start, end - start);
+		file[end - start] = '\0';
+		retval += parser(file);
+		free(file);
+
+		if (*end == '\0')
+			break;
+		start = end + 1;
+	}
+
+	return retval;
+}
+
+static int namedev_parse_rules(const char *filename)
 {
 	char line[255];
 	int lineno;
@@ -127,11 +152,11 @@
 	int retval = 0;
 	struct config_device dev;
 
-	fd = fopen(udev_rules_filename, "r");
+	fd = fopen(filename, "r");
 	if (fd != NULL) {
-		dbg("reading '%s' as rules file", udev_rules_filename);
+		dbg("reading '%s' as rules file", filename);
 	} else {
-		dbg("can't open '%s' as a rules file", udev_rules_filename);
+		dbg("can't open '%s' as a rules file", filename);
 		return -ENODEV;
 	}
 
@@ -262,7 +287,7 @@
 			continue;
 error:
 			dbg("%s:%d:%d: parse error, rule skipped",
-				  udev_rules_filename, lineno, temp - line);
+				  filename, lineno, temp - line);
 		}
 	}
 exit:
@@ -270,6 +295,11 @@
 	return retval;
 }
 
+int namedev_init_rules(void)
+{
+	return call_foreach_file(namedev_parse_rules, udev_rules_filename);
+}
+
 int namedev_init_permissions(void)
 {
 	char line[255];

[-- Attachment #7: no_error_on_enoent --]
[-- Type: text/plain, Size: 826 bytes --]

diff -ruN udev-018.orig/udev-remove.c udev-018/udev-remove.c
--- udev-018.orig/udev-remove.c	2004-02-19 19:38:35.000000000 +0100
+++ udev-018/udev-remove.c	2004-02-21 13:40:21.000000000 +0100
@@ -51,6 +51,8 @@
 
 		/* remove if empty */
 		retval = rmdir(path);
+		if (errno == ENOENT)
+			retval = 0;
 		if (retval) {
 			if (errno == ENOTEMPTY)
 				return 0;
@@ -77,6 +79,8 @@
 
 	info("removing device node '%s'", filename);
 	retval = unlink(filename);
+	if (errno == ENOENT)
+		retval = 0;
 	if (retval) {
 		dbg("unlink(%s) failed with error '%s'",
 			filename, strerror(errno));
@@ -108,6 +112,8 @@
 
 			dbg("unlinking symlink '%s'", filename);
 			retval = unlink(filename);
+			if (errno == ENOENT)
+				retval = 0;
 			if (retval) {
 				dbg("unlink(%s) failed with error '%s'",
 					filename, strerror(errno));

[-- Attachment #8: remove_warnings --]
[-- Type: text/plain, Size: 323 bytes --]

diff -ruN udev-016.orig/logging.h udev-016/logging.h
--- udev-016.orig/logging.h	2004-02-02 10:34:49.000000000 +0100
+++ udev-016/logging.h	2004-02-03 22:27:43.000000000 +0100
@@ -32,6 +32,7 @@
 #ifdef LOG
 #include <stdarg.h>
 #include <syslog.h>
+#include <unistd.h>
 
 #undef info
 #define info(format, arg...)								\

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: patches for udev 018
  2004-02-21 18:12 patches for udev 018 Marco d'Itri
@ 2004-02-28  1:07 ` Greg KH
  0 siblings, 0 replies; 2+ messages in thread
From: Greg KH @ 2004-02-28  1:07 UTC (permalink / raw)
  To: linux-hotplug

On Sat, Feb 21, 2004 at 07:12:22PM +0100, Marco d'Itri wrote:

Hm, next time can you CC: me so I am sure to see these patches?  Most of
them don't apply anymore :(

Can you redo them against the 019 release, and send them each in a
separate email (one mail per patch.)

thanks,

greg k-h


-------------------------------------------------------
SF.Net is sponsored by: Speed Start Your Linux Apps Now.
Build and deploy apps & Web services for Linux with
a free DVD software kit from IBM. Click Now!
http://ads.osdn.com/?ad_id\x1356&alloc_id438&op=click
_______________________________________________
Linux-hotplug-devel mailing list  http://linux-hotplug.sourceforge.net
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2004-02-28  1:07 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-02-21 18:12 patches for udev 018 Marco d'Itri
2004-02-28  1:07 ` Greg KH

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.