summaryrefslogtreecommitdiffstats
path: root/source/a/udev/rule_generator.diff
blob: 25c72b8450def7ecf1af285fb4041ac44bda4456 (about) (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
diff -Nur udev-182.orig/src/rule_generator/write_cd_rules udev-182/src/rule_generator/write_cd_rules
--- udev-182.orig/src/rule_generator/write_cd_rules	2012-03-24 22:47:53.138527732 -0500
+++ udev-182/src/rule_generator/write_cd_rules	2012-03-24 22:59:42.595889830 -0500
@@ -3,7 +3,8 @@
 # This script is run if an optical drive lacks a rule for persistent naming.
 #
 # It adds symlinks for optical drives based on the device class determined
-# by cdrom_id and used ID_PATH to identify the device.
+# by cdrom_id and uses ID_PATH or ID_SERIAL or ID_MODEL and ID_REVISION to
+# identify the device.
 
 # (C) 2006 Marco d'Itri <md@Linux.IT>
 #
@@ -105,18 +106,57 @@
 choose_rules_file
 
 link_num=$(find_next_available 'cdrom[0-9]*')
+[ "$link_num" = "" ] && link_num=0
 
 match="SUBSYSTEM==\"block\", ENV{ID_CDROM}==\"?*\", $RULE"
 
 comment="$ID_MODEL ($ID_PATH)"
-
         write_rule "$match" "cdrom$link_num" "$comment"
-[ "$ID_CDROM_CD_R" -o "$ID_CDROM_CD_RW" ] && \
-        write_rule "$match" "cdrw$link_num"
-[ "$ID_CDROM_DVD" ] && \
-        write_rule "$match" "dvd$link_num"
-[ "$ID_CDROM_DVD_R" -o "$ID_CDROM_DVD_RW" -o "$ID_CDROM_DVD_RAM" ] && \
-        write_rule "$match" "dvdrw$link_num"
+        if [ "$(find_all_rules 'SYMLINK+=' cdrom)" = "" ]; then
+                write_rule "$match" "cdrom"
+        fi
+
+        if [ "$ID_CDROM_CD_R" ]; then
+                       write_rule "$match" "cdr$link_num"
+                if [ "$(find_all_rules 'SYMLINK+=' cdr)" = "" ]; then
+                        write_rule "$match" "cdr"
+                fi
+
+                write_rule "$match" "cdwriter$link_num"
+                if [ "$(find_all_rules 'SYMLINK+=' cdwriter)" = "" ]; then
+                        write_rule "$match" "cdwriter"
+                fi
+
+                if [ "$ID_CDROM_CD_RW" ]; then
+                        write_rule "$match" "cdrw$link_num"
+                        if [ "$(find_all_rules 'SYMLINK+=' cdrw)" = "" ]; then
+                                write_rule "$match" "cdrw"
+                        fi
+                fi
+
+                if [ "$(find_all_rules 'SYMLINK+=' writer)" = "" ]; then
+                        write_rule "$match" "writer"
+                fi
+        fi
+
+        if [  "$ID_CDROM_DVD" ]; then
+                write_rule "$match" "dvd$link_num"
+                if [ "$(find_all_rules 'SYMLINK+=' dvd)" = "" ]; then
+                        write_rule "$match" "dvd"
+                fi
+
+                if [ "$ID_CDROM_DVD_R" -o "$ID_CDROM_DVD_RW" -o "$ID_CDROM_DVD_RAM" ]; then
+                        write_rule "$match" "dvdrw$link_num"
+                        if [ "$(find_all_rules 'SYMLINK+=' dvdrw)" = "" ]; then
+                                write_rule "$match" "dvdrw"
+                        fi
+
+                        write_rule "$match" "dvdwriter$link_num"
+                        if [ "$(find_all_rules 'SYMLINK+=' dvdwriter)" = "" ]; then
+                                write_rule "$match" "dvdwriter"
+                        fi
+                fi
+        fi
 echo >> $RULES_FILE
 
 unlock_rules_file