summaryrefslogtreecommitdiff
path: root/libre/mkinitcpio/9001-udev.patch
diff options
context:
space:
mode:
Diffstat (limited to 'libre/mkinitcpio/9001-udev.patch')
-rw-r--r--libre/mkinitcpio/9001-udev.patch52
1 files changed, 52 insertions, 0 deletions
diff --git a/libre/mkinitcpio/9001-udev.patch b/libre/mkinitcpio/9001-udev.patch
new file mode 100644
index 000000000..0de1067a4
--- /dev/null
+++ b/libre/mkinitcpio/9001-udev.patch
@@ -0,0 +1,52 @@
+$ curl https://github.com/archlinux/mkinitcpio/commit/9ee1333a5f3302d7ddb004cf0909c94b4cff60ba.diff
+diff --git a/functions b/functions
+index 9539a60..f95fb92 100644
+--- a/functions
++++ b/functions
+@@ -625,6 +625,46 @@ add_binary() {
+ return 0
+ }
+
++add_udev_rule() {
++ # Add an udev rules file to the initcpio image. Dependencies on binaries
++ # will be discovered and added.
++ # $1: path to rules file (or name of rules file)
++
++ local rules="$1" rule= key= value= binary=
++
++ if [[ ${rules:0:1} != '/' ]]; then
++ rules=$(PATH=/usr/lib/udev/rules.d:/lib/udev/rules.d type -P "$rules")
++ fi
++ if [[ -z $rules ]]; then
++ # complain about not found rules
++ return 1
++ fi
++
++ add_file "$rules" /usr/lib/udev/rules.d/"${rules##*/}"
++
++ while IFS=, read -ra rule; do
++ # skip empty lines, comments
++ [[ -z $rule || $rule = @(+([[:space:]])|#*) ]] && continue
++
++ for pair in "${rule[@]}"; do
++ IFS=' =' read -r key value <<< "$pair"
++ case $key in
++ RUN@({program}|+)|IMPORT{program}|ENV{REMOVE_CMD})
++ # strip quotes
++ binary=${value//[\"\']/}
++ # just take the first word as the binary name
++ binary=${binary%% *}
++ [[ ${binary:0:1} == '$' ]] && continue
++ if [[ ${binary:0:1} != '/' ]]; then
++ binary=$(PATH=/usr/lib/udev:/lib/udev type -P "$binary")
++ fi
++ add_binary "$binary"
++ ;;
++ esac
++ done
++ done <"$rules"
++}
++
+ parse_config() {
+ # parse key global variables set by the config file.
+