From: Kay Sievers Date: Tue, 3 Apr 2012 19:08:04 +0000 (+0200) Subject: import udev repository X-Git-Tag: v183~456 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=19c5f19d69bb5f520fa7213239490c55de06d99d import udev repository --- 19c5f19d69bb5f520fa7213239490c55de06d99d diff --cc src/udev/.gitignore index 000000000,000000000..fa3500ba9 new file mode 100644 --- /dev/null +++ b/src/udev/.gitignore @@@ -1,0 -1,0 +1,40 @@@ ++*~ ++*.o ++*.a ++*.lo ++*.la ++.libs ++.deps ++.dirstamp ++Makefile ++Makefile.in ++/aclocal.m4 ++/autom4te.cache ++/config.h ++/config.h.in ++/config.log ++/config.status ++/config.guess ++/config.sub ++/libtool ++/ltmain.sh ++/install-sh ++/missing ++/configure ++/stamp-h1 ++/depcomp ++/gtk-doc.make ++/build-aux ++/udev-test-install ++/udevd ++/udevadm ++/test-udev ++/test-libudev ++/accelerometer ++/ata_id ++/cdrom_id ++/collect ++/mtd_probe ++/v4l_id ++/keymap ++/scsi_id diff --cc src/udev/.vimrc index 000000000,000000000..366fbdca4 new file mode 100644 --- /dev/null +++ b/src/udev/.vimrc @@@ -1,0 -1,0 +1,4 @@@ ++" 'set exrc' in ~/.vimrc will read .vimrc from the current directory ++set tabstop=8 ++set shiftwidth=8 ++set expandtab diff --cc src/udev/COPYING index 000000000,d159169d1..d159169d1 mode 000000,100644..100644 --- a/src/udev/COPYING +++ b/src/udev/COPYING diff --cc src/udev/ChangeLog index 000000000,dd5813826..dd5813826 mode 000000,100644..100644 --- a/src/udev/ChangeLog +++ b/src/udev/ChangeLog diff --cc src/udev/INSTALL index 000000000,0a34e77df..0a34e77df mode 000000,100644..100644 --- a/src/udev/INSTALL +++ b/src/udev/INSTALL diff --cc src/udev/Makefile.am index 000000000,000000000..1c7f86b08 new file mode 100644 --- /dev/null +++ b/src/udev/Makefile.am @@@ -1,0 -1,0 +1,712 @@@ ++# Copyright (C) 2008-2012 Kay Sievers ++# Copyright (C) 2009 Diego Elio 'Flameeyes' Pettenò ++ ++SUBDIRS = . ++ ++ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} ++ ++AM_MAKEFLAGS = --no-print-directory ++ ++LIBUDEV_CURRENT=13 ++LIBUDEV_REVISION=2 ++LIBUDEV_AGE=13 ++ ++LIBGUDEV_CURRENT=1 ++LIBGUDEV_REVISION=1 ++LIBGUDEV_AGE=1 ++ ++AM_CPPFLAGS = \ ++ -include $(top_builddir)/config.h \ ++ -I$(top_srcdir)/src \ ++ -DSYSCONFDIR=\""$(sysconfdir)"\" \ ++ -DPKGLIBEXECDIR=\""$(libexecdir)/udev"\" ++ ++AM_CFLAGS = \ ++ ${my_CFLAGS} \ ++ -fvisibility=hidden \ ++ -ffunction-sections \ ++ -fdata-sections ++ ++AM_LDFLAGS = \ ++ -Wl,--gc-sections \ ++ -Wl,--as-needed ++ ++DISTCHECK_CONFIGURE_FLAGS = \ ++ --enable-debug \ ++ --enable-rule_generator \ ++ --enable-floppy \ ++ --with-selinux \ ++ --enable-gtk-doc \ ++ --with-systemdsystemunitdir=$$dc_install_base/$(systemdsystemunitdir) ++ ++BUILT_SOURCES = ++EXTRA_DIST = ++CLEANFILES = ++INSTALL_EXEC_HOOKS = ++INSTALL_DATA_HOOKS = ++UNINSTALL_EXEC_HOOKS = ++DISTCHECK_HOOKS = ++DISTCLEAN_LOCAL_HOOKS = ++ ++udevhomedir = $(libexecdir)/udev ++udevhome_SCRIPTS = ++dist_udevhome_SCRIPTS = ++dist_udevhome_DATA = ++dist_man_MANS = ++ ++SED_PROCESS = \ ++ $(AM_V_GEN)$(MKDIR_P) $(dir $@) && $(SED) \ ++ -e 's,@VERSION\@,$(VERSION),g' \ ++ -e 's,@prefix\@,$(prefix),g' \ ++ -e 's,@rootprefix\@,$(rootprefix),g' \ ++ -e 's,@exec_prefix\@,$(exec_prefix),g' \ ++ -e 's,@libdir\@,$(libdir),g' \ ++ -e 's,@includedir\@,$(includedir),g' \ ++ -e 's,@bindir\@,$(bindir),g' \ ++ -e 's,@pkglibexecdir\@,$(libexecdir)/udev,g' \ ++ < $< > $@ || rm $@ ++ ++%.pc: %.pc.in Makefile ++ $(SED_PROCESS) ++ ++%.rules: %.rules.in Makefile ++ $(SED_PROCESS) ++ ++%.service: %.service.in Makefile ++ $(SED_PROCESS) ++ ++%.sh: %.sh.in Makefile ++ $(SED_PROCESS) ++ $(AM_V_GEN)chmod +x $@ ++ ++%.pl: %.pl.in Makefile ++ $(SED_PROCESS) ++ $(AM_V_GEN)chmod +x $@ ++ ++# ------------------------------------------------------------------------------ ++SUBDIRS += src/docs ++ ++include_HEADERS = src/libudev.h ++lib_LTLIBRARIES = libudev.la ++noinst_LTLIBRARIES = libudev-private.la ++ ++libudev_la_SOURCES =\ ++ src/libudev-private.h \ ++ src/libudev.c \ ++ src/libudev-list.c \ ++ src/libudev-util.c \ ++ src/libudev-device.c \ ++ src/libudev-enumerate.c \ ++ src/libudev-monitor.c \ ++ src/libudev-queue.c ++ ++libudev_la_LDFLAGS = \ ++ $(AM_LDFLAGS) \ ++ -version-info $(LIBUDEV_CURRENT):$(LIBUDEV_REVISION):$(LIBUDEV_AGE) ++ ++libudev_private_la_SOURCES =\ ++ $(libudev_la_SOURCES) \ ++ src/libudev-util-private.c \ ++ src/libudev-device-private.c \ ++ src/libudev-queue-private.c ++ ++if WITH_SELINUX ++libudev_private_la_SOURCES += src/libudev-selinux-private.c ++libudev_private_la_LIBADD = $(SELINUX_LIBS) ++endif ++ ++pkgconfigdir = $(libdir)/pkgconfig ++pkgconfig_DATA = src/libudev.pc ++EXTRA_DIST += src/libudev.pc.in ++CLEANFILES += src/libudev.pc ++ ++EXTRA_DIST += src/COPYING ++# move lib from $(libdir) to $(rootlib_execdir) and update devel link, if needed ++libudev-install-move-hook: ++ if test "$(libdir)" != "$(rootlib_execdir)"; then \ ++ mkdir -p $(DESTDIR)$(rootlib_execdir) && \ ++ so_img_name=$$(readlink $(DESTDIR)$(libdir)/libudev.so) && \ ++ so_img_rel_target_prefix=$$(echo $(libdir) | sed 's,\(^/\|\)[^/][^/]*,..,g') && \ ++ ln -sf $$so_img_rel_target_prefix$(rootlib_execdir)/$$so_img_name $(DESTDIR)$(libdir)/libudev.so && \ ++ mv $(DESTDIR)$(libdir)/libudev.so.* $(DESTDIR)$(rootlib_execdir); \ ++ fi ++ ++libudev-uninstall-move-hook: ++ rm -f $(DESTDIR)$(rootlib_execdir)/libudev.so* ++ ++INSTALL_EXEC_HOOKS += libudev-install-move-hook ++UNINSTALL_EXEC_HOOKS += libudev-uninstall-move-hook ++ ++# ------------------------------------------------------------------------------ ++udev-confdirs: ++ -mkdir -p $(DESTDIR)$(sysconfdir)/udev/rules.d ++ -mkdir -p $(DESTDIR)$(libexecdir)/udev/devices ++ ++INSTALL_DATA_HOOKS += udev-confdirs ++ ++udevrulesdir = $(libexecdir)/udev/rules.d ++dist_udevrules_DATA = \ ++ rules/42-usb-hid-pm.rules \ ++ rules/50-udev-default.rules \ ++ rules/60-persistent-storage-tape.rules \ ++ rules/60-persistent-serial.rules \ ++ rules/60-persistent-input.rules \ ++ rules/60-persistent-alsa.rules \ ++ rules/60-persistent-storage.rules \ ++ rules/75-net-description.rules \ ++ rules/75-tty-description.rules \ ++ rules/78-sound-card.rules \ ++ rules/80-drivers.rules \ ++ rules/95-udev-late.rules ++ ++udevconfdir = $(sysconfdir)/udev ++dist_udevconf_DATA = src/udev.conf ++ ++sharepkgconfigdir = $(datadir)/pkgconfig ++sharepkgconfig_DATA = src/udev.pc ++EXTRA_DIST += src/udev.pc.in ++CLEANFILES += src/udev.pc ++ ++if WITH_SYSTEMD ++dist_systemdsystemunit_DATA = \ ++ src/udev-control.socket \ ++ src/udev-kernel.socket ++ ++systemdsystemunit_DATA = \ ++ src/udev.service \ ++ src/udev-trigger.service \ ++ src/udev-settle.service ++ ++EXTRA_DIST += \ ++ src/udev.service.in \ ++ src/udev-trigger.service.in \ ++ src/udev-settle.service.in ++ ++CLEANFILES += \ ++ src/udev.service \ ++ src/udev-trigger.service \ ++ src/udev-settle.service ++ ++systemd-install-hook: ++ mkdir -p $(DESTDIR)$(systemdsystemunitdir)/sockets.target.wants ++ ln -sf ../udev-control.socket $(DESTDIR)$(systemdsystemunitdir)/sockets.target.wants/udev-control.socket ++ ln -sf ../udev-kernel.socket $(DESTDIR)$(systemdsystemunitdir)/sockets.target.wants/udev-kernel.socket ++ mkdir -p $(DESTDIR)$(systemdsystemunitdir)/basic.target.wants ++ ln -sf ../udev.service $(DESTDIR)$(systemdsystemunitdir)/basic.target.wants/udev.service ++ ln -sf ../udev-trigger.service $(DESTDIR)$(systemdsystemunitdir)/basic.target.wants/udev-trigger.service ++ ++INSTALL_DATA_HOOKS += systemd-install-hook ++endif ++ ++bin_PROGRAMS = \ ++ udevadm ++ ++pkglibexec_PROGRAMS = \ ++ udevd ++ ++udev_common_sources = \ ++ src/udev.h \ ++ src/udev-event.c \ ++ src/udev-watch.c \ ++ src/udev-node.c \ ++ src/udev-rules.c \ ++ src/udev-ctrl.c \ ++ src/udev-builtin.c \ ++ src/udev-builtin-blkid.c \ ++ src/udev-builtin-firmware.c \ ++ src/udev-builtin-hwdb.c \ ++ src/udev-builtin-input_id.c \ ++ src/udev-builtin-kmod.c \ ++ src/udev-builtin-path_id.c \ ++ src/udev-builtin-usb_id.c ++ ++udev_common_CFLAGS = \ ++ $(BLKID_CFLAGS) \ ++ $(KMOD_CFLAGS) ++ ++udev_common_LDADD = \ ++ libudev-private.la \ ++ $(BLKID_LIBS) \ ++ $(KMOD_LIBS) ++ ++udev_common_CPPFLAGS = \ ++ $(AM_CPPFLAGS) \ ++ -DFIRMWARE_PATH="$(FIRMWARE_PATH)" \ ++ -DUSB_DATABASE=\"$(USB_DATABASE)\" -DPCI_DATABASE=\"$(PCI_DATABASE)\" ++ ++udevd_SOURCES = \ ++ $(udev_common_sources) \ ++ src/udevd.c \ ++ src/sd-daemon.h \ ++ src/sd-daemon.c ++udevd_CFLAGS = $(udev_common_CFLAGS) ++udevd_LDADD = $(udev_common_LDADD) ++udevd_CPPFLAGS = $(udev_common_CPPFLAGS) ++ ++udevadm_SOURCES = \ ++ $(udev_common_sources) \ ++ src/udevadm.c \ ++ src/udevadm-info.c \ ++ src/udevadm-control.c \ ++ src/udevadm-monitor.c \ ++ src/udevadm-settle.c \ ++ src/udevadm-trigger.c \ ++ src/udevadm-test.c \ ++ src/udevadm-test-builtin.c ++udevadm_CFLAGS = $(udev_common_CFLAGS) ++udevadm_LDADD = $(udev_common_LDADD) ++udevadm_CPPFLAGS = $(udev_common_CPPFLAGS) ++ ++# ------------------------------------------------------------------------------ ++if ENABLE_MANPAGES ++dist_man_MANS += \ ++ src/udev.7 \ ++ src/udevadm.8 \ ++ src/udevd.8 ++endif ++ ++EXTRA_DIST += \ ++ src/udev.xml \ ++ src/udevadm.xml \ ++ src/udevd.xml ++ ++if HAVE_XSLTPROC ++dist_noinst_DATA = \ ++ src/udev.html \ ++ src/udevadm.html \ ++ src/udevd.html ++ ++src/%.7 src/%.8 : src/%.xml ++ $(AM_V_GEN)$(XSLTPROC) -o $@ -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $< ++ ++src/%.html : src/%.xml ++ $(AM_V_GEN)$(XSLTPROC) -o $@ -nonet http://docbook.sourceforge.net/release/xsl/current/xhtml-1_1/docbook.xsl $< ++endif ++ ++# ------------------------------------------------------------------------------ ++TESTS = \ ++ test/udev-test.pl \ ++ test/rules-test.sh ++ ++check_PROGRAMS = \ ++ test-libudev \ ++ test-udev ++ ++test_libudev_SOURCES = src/test-libudev.c ++test_libudev_LDADD = libudev.la ++ ++test_udev_SOURCES = \ ++ $(udev_common_sources) \ ++ src/test-udev.c ++test_udev_CFLAGS = $(udev_common_CFLAGS) ++test_udev_LDADD = $(udev_common_LDADD) ++test_udev_CPPFLAGS = $(udev_common_CPPFLAGS) ++test_udev_DEPENDENCIES = test/sys ++ ++# packed sysfs test tree ++test/sys: ++ $(AM_V_GEN)mkdir -p test && tar -C test/ -xJf $(top_srcdir)/test/sys.tar.xz ++ ++test-sys-distclean: ++ -rm -rf test/sys ++DISTCLEAN_LOCAL_HOOKS += test-sys-distclean ++ ++EXTRA_DIST += test/sys.tar.xz ++ ++# ------------------------------------------------------------------------------ ++ata_id_SOURCES = src/ata_id/ata_id.c ++ata_id_LDADD = libudev-private.la ++pkglibexec_PROGRAMS += ata_id ++ ++# ------------------------------------------------------------------------------ ++cdrom_id_SOURCES = src/cdrom_id/cdrom_id.c ++cdrom_id_LDADD = libudev-private.la ++pkglibexec_PROGRAMS += cdrom_id ++dist_udevrules_DATA += src/cdrom_id/60-cdrom_id.rules ++ ++# ------------------------------------------------------------------------------ ++collect_SOURCES = src/collect/collect.c ++collect_LDADD = libudev-private.la ++pkglibexec_PROGRAMS += collect ++ ++# ------------------------------------------------------------------------------ ++scsi_id_SOURCES =\ ++ src/scsi_id/scsi_id.c \ ++ src/scsi_id/scsi_serial.c \ ++ src/scsi_id/scsi.h \ ++ src/scsi_id/scsi_id.h ++scsi_id_LDADD = libudev-private.la ++pkglibexec_PROGRAMS += scsi_id ++dist_man_MANS += src/scsi_id/scsi_id.8 ++EXTRA_DIST += src/scsi_id/README ++ ++# ------------------------------------------------------------------------------ ++v4l_id_SOURCES = src/v4l_id/v4l_id.c ++v4l_id_LDADD = libudev-private.la ++pkglibexec_PROGRAMS += v4l_id ++dist_udevrules_DATA += src/v4l_id/60-persistent-v4l.rules ++ ++# ------------------------------------------------------------------------------ ++accelerometer_SOURCES = src/accelerometer/accelerometer.c ++accelerometer_LDADD = libudev-private.la -lm ++pkglibexec_PROGRAMS += accelerometer ++dist_udevrules_DATA += src/accelerometer/61-accelerometer.rules ++ ++# ------------------------------------------------------------------------------ ++if ENABLE_GUDEV ++SUBDIRS += src/gudev/docs ++ ++libgudev_includedir=$(includedir)/gudev-1.0/gudev ++libgudev_include_HEADERS = \ ++ src/gudev/gudev.h \ ++ src/gudev/gudevenums.h \ ++ src/gudev/gudevenumtypes.h \ ++ src/gudev/gudevtypes.h \ ++ src/gudev/gudevclient.h \ ++ src/gudev/gudevdevice.h \ ++ src/gudev/gudevenumerator.h ++ ++lib_LTLIBRARIES += libgudev-1.0.la ++ ++pkgconfig_DATA += src/gudev/gudev-1.0.pc ++EXTRA_DIST += src/gudev/gudev-1.0.pc.in ++CLEANFILES += src/gudev/gudev-1.0.pc ++ ++libgudev_1_0_la_SOURCES = \ ++ src/gudev/gudevenums.h \ ++ src/gudev/gudevenumtypes.h \ ++ src/gudev/gudevenumtypes.h\ ++ src/gudev/gudevtypes.h \ ++ src/gudev/gudevclient.h \ ++ src/gudev/gudevclient.c \ ++ src/gudev/gudevdevice.h \ ++ src/gudev/gudevdevice.c \ ++ src/gudev/gudevenumerator.h \ ++ src/gudev/gudevenumerator.c \ ++ src/gudev/gudevprivate.h ++ ++nodist_libgudev_1_0_la_SOURCES = \ ++ src/gudev/gudevmarshal.h \ ++ src/gudev/gudevmarshal.c \ ++ src/gudev/gudevenumtypes.h \ ++ src/gudev/gudevenumtypes.c ++BUILT_SOURCES += $(nodist_libgudev_1_0_la_SOURCES) ++ ++libgudev_1_0_la_CPPFLAGS = \ ++ $(AM_CPPFLAGS) \ ++ -I$(top_builddir)/src\ ++ -I$(top_srcdir)/src\ ++ -I$(top_builddir)/src/gudev \ ++ -I$(top_srcdir)/src/gudev \ ++ -D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT \ ++ -D_GUDEV_COMPILATION \ ++ -DG_LOG_DOMAIN=\"GUdev\" ++ ++libgudev_1_0_la_CFLAGS = \ ++ -fvisibility=default \ ++ $(GLIB_CFLAGS) ++ ++libgudev_1_0_la_LIBADD = libudev.la $(GLIB_LIBS) ++ ++libgudev_1_0_la_LDFLAGS = \ ++ -version-info $(LIBGUDEV_CURRENT):$(LIBGUDEV_REVISION):$(LIBGUDEV_AGE) \ ++ -export-dynamic -no-undefined \ ++ -export-symbols-regex '^g_udev_.*' ++ ++EXTRA_DIST += \ ++ src/gudev/COPYING \ ++ src/gudev/gudevmarshal.list \ ++ src/gudev/gudevenumtypes.h.template \ ++ src/gudev/gudevenumtypes.c.template \ ++ src/gudev/gjs-example.js \ ++ src/gudev/seed-example-enum.js \ ++ src/gudev/seed-example.js ++ ++src/gudev/gudevmarshal.h: src/gudev/gudevmarshal.list ++ $(AM_V_GEN)glib-genmarshal $< --prefix=g_udev_marshal --header > $@ ++ ++src/gudev/gudevmarshal.c: src/gudev/gudevmarshal.list ++ $(AM_V_GEN)echo "#include \"gudevmarshal.h\"" > $@ && \ ++ glib-genmarshal $< --prefix=g_udev_marshal --body >> $@ ++ ++src/gudev/gudevenumtypes.h: src/gudev/gudevenumtypes.h.template src/gudev/gudevenums.h ++ $(AM_V_GEN)glib-mkenums --template $^ > \ ++ $@.tmp && mv $@.tmp $@ ++ ++src/gudev/gudevenumtypes.c: src/gudev/gudevenumtypes.c.template src/gudev/gudevenums.h ++ $(AM_V_GEN)glib-mkenums --template $^ > \ ++ $@.tmp && mv $@.tmp $@ ++ ++if ENABLE_INTROSPECTION ++src/gudev/GUdev-1.0.gir: libgudev-1.0.la $(G_IR_SCANNER) ++ $(AM_V_GEN)$(G_IR_SCANNER) -v \ ++ --warn-all \ ++ --namespace GUdev \ ++ --nsversion=1.0 \ ++ --include=GObject-2.0 \ ++ --library=gudev-1.0 \ ++ --library-path=$(top_builddir)/src \ ++ --library-path=$(top_builddir)/src/gudev \ ++ --output $@ \ ++ --pkg=glib-2.0 \ ++ --pkg=gobject-2.0 \ ++ --pkg-export=gudev-1.0 \ ++ --c-include=gudev/gudev.h \ ++ -I$(top_srcdir)/src/\ ++ -I$(top_builddir)/src/\ ++ -D_GUDEV_COMPILATION \ ++ -D_GUDEV_WORK_AROUND_DEV_T_BUG \ ++ $(top_srcdir)/src/gudev/gudev.h \ ++ $(top_srcdir)/src/gudev/gudevtypes.h \ ++ $(top_srcdir)/src/gudev/gudevenums.h \ ++ $(or $(wildcard $(top_builddir)/src/gudev/gudevenumtypes.h),$(top_srcdir)/src/gudev/gudevenumtypes.h) \ ++ $(top_srcdir)/src/gudev/gudevclient.h \ ++ $(top_srcdir)/src/gudev/gudevdevice.h \ ++ $(top_srcdir)/src/gudev/gudevenumerator.h \ ++ $(top_srcdir)/src/gudev/gudevclient.c \ ++ $(top_srcdir)/src/gudev/gudevdevice.c \ ++ $(top_srcdir)/src/gudev/gudevenumerator.c ++ ++src/gudev/GUdev-1.0.typelib: src/gudev/GUdev-1.0.gir $(G_IR_COMPILER) ++ $(AM_V_GEN)g-ir-compiler $< -o $@ ++ ++girdir = $(GIRDIR) ++gir_DATA = src/gudev/GUdev-1.0.gir ++ ++typelibsdir = $(GIRTYPELIBDIR) ++typelibs_DATA = src/gudev/GUdev-1.0.typelib ++ ++CLEANFILES += $(gir_DATA) $(typelibs_DATA) ++endif # ENABLE_INTROSPECTION ++ ++# move lib from $(libdir) to $(rootlib_execdir) and update devel link, if needed ++libgudev-install-move-hook: ++ if test "$(libdir)" != "$(rootlib_execdir)"; then \ ++ mkdir -p $(DESTDIR)$(rootlib_execdir) && \ ++ so_img_name=$$(readlink $(DESTDIR)$(libdir)/libgudev-1.0.so) && \ ++ so_img_rel_target_prefix=$$(echo $(libdir) | sed 's,\(^/\|\)[^/][^/]*,..,g') && \ ++ ln -sf $$so_img_rel_target_prefix$(rootlib_execdir)/$$so_img_name $(DESTDIR)$(libdir)/libgudev-1.0.so && \ ++ mv $(DESTDIR)$(libdir)/libgudev-1.0.so.* $(DESTDIR)$(rootlib_execdir); \ ++ fi ++ ++libgudev-uninstall-move-hook: ++ rm -f $(DESTDIR)$(rootlib_execdir)/libgudev-1.0.so* ++ ++INSTALL_EXEC_HOOKS += libgudev-install-move-hook ++UNINSTALL_EXEC_HOOKS += libgudev-uninstall-move-hook ++endif ++ ++# ------------------------------------------------------------------------------ ++if ENABLE_KEYMAP ++keymap_SOURCES = src/keymap/keymap.c ++keymap_CPPFLAGS = $(AM_CPPFLAGS) -I src/keymap ++nodist_keymap_SOURCES = \ ++ src/keymap/keys-from-name.h \ ++ src/keymap/keys-to-name.h ++BUILT_SOURCES += $(nodist_keymap_SOURCES) ++ ++pkglibexec_PROGRAMS += keymap ++dist_doc_DATA = src/keymap/README.keymap.txt ++ ++dist_udevrules_DATA += \ ++ src/keymap/95-keymap.rules \ ++ src/keymap/95-keyboard-force-release.rules ++ ++dist_udevhome_SCRIPTS += src/keymap/findkeyboards ++udevhome_SCRIPTS += src/keymap/keyboard-force-release.sh ++ ++EXTRA_DIST += \ ++ src/keymap/check-keymaps.sh \ ++ src/keymap/keyboard-force-release.sh.in ++ ++CLEANFILES += \ ++ src/keymap/keys.txt \ ++ src/keymap/keys-from-name.gperf \ ++ src/keymap/keyboard-force-release.sh ++ ++udevkeymapdir = $(libexecdir)/udev/keymaps ++dist_udevkeymap_DATA = \ ++ src/keymap/keymaps/acer \ ++ src/keymap/keymaps/acer-aspire_5720 \ ++ src/keymap/keymaps/acer-aspire_8930 \ ++ src/keymap/keymaps/acer-aspire_5920g \ ++ src/keymap/keymaps/acer-aspire_6920 \ ++ src/keymap/keymaps/acer-travelmate_c300 \ ++ src/keymap/keymaps/asus \ ++ src/keymap/keymaps/compaq-e_evo \ ++ src/keymap/keymaps/dell \ ++ src/keymap/keymaps/dell-latitude-xt2 \ ++ src/keymap/keymaps/everex-xt5000 \ ++ src/keymap/keymaps/fujitsu-amilo_li_2732 \ ++ src/keymap/keymaps/fujitsu-amilo_pa_2548 \ ++ src/keymap/keymaps/fujitsu-amilo_pro_edition_v3505 \ ++ src/keymap/keymaps/fujitsu-amilo_pro_v3205 \ ++ src/keymap/keymaps/fujitsu-amilo_si_1520 \ ++ src/keymap/keymaps/fujitsu-esprimo_mobile_v5 \ ++ src/keymap/keymaps/fujitsu-esprimo_mobile_v6 \ ++ src/keymap/keymaps/genius-slimstar-320 \ ++ src/keymap/keymaps/hewlett-packard \ ++ src/keymap/keymaps/hewlett-packard-2510p_2530p \ ++ src/keymap/keymaps/hewlett-packard-compaq_elitebook \ ++ src/keymap/keymaps/hewlett-packard-pavilion \ ++ src/keymap/keymaps/hewlett-packard-presario-2100 \ ++ src/keymap/keymaps/hewlett-packard-tablet \ ++ src/keymap/keymaps/hewlett-packard-tx2 \ ++ src/keymap/keymaps/ibm-thinkpad-usb-keyboard-trackpoint \ ++ src/keymap/keymaps/inventec-symphony_6.0_7.0 \ ++ src/keymap/keymaps/lenovo-3000 \ ++ src/keymap/keymaps/lenovo-ideapad \ ++ src/keymap/keymaps/lenovo-thinkpad-usb-keyboard-trackpoint \ ++ src/keymap/keymaps/lenovo-thinkpad_x6_tablet \ ++ src/keymap/keymaps/lenovo-thinkpad_x200_tablet \ ++ src/keymap/keymaps/lg-x110 \ ++ src/keymap/keymaps/logitech-wave \ ++ src/keymap/keymaps/logitech-wave-cordless \ ++ src/keymap/keymaps/logitech-wave-pro-cordless \ ++ src/keymap/keymaps/maxdata-pro_7000 \ ++ src/keymap/keymaps/medion-fid2060 \ ++ src/keymap/keymaps/medionnb-a555 \ ++ src/keymap/keymaps/micro-star \ ++ src/keymap/keymaps/module-asus-w3j \ ++ src/keymap/keymaps/module-ibm \ ++ src/keymap/keymaps/module-lenovo \ ++ src/keymap/keymaps/module-sony \ ++ src/keymap/keymaps/module-sony-old \ ++ src/keymap/keymaps/module-sony-vgn \ ++ src/keymap/keymaps/olpc-xo \ ++ src/keymap/keymaps/onkyo \ ++ src/keymap/keymaps/oqo-model2 \ ++ src/keymap/keymaps/samsung-other \ ++ src/keymap/keymaps/samsung-90x3a \ ++ src/keymap/keymaps/samsung-sq1us \ ++ src/keymap/keymaps/samsung-sx20s \ ++ src/keymap/keymaps/toshiba-satellite_a100 \ ++ src/keymap/keymaps/toshiba-satellite_a110 \ ++ src/keymap/keymaps/toshiba-satellite_m30x \ ++ src/keymap/keymaps/zepto-znote ++ ++udevkeymapforcereldir = $(libexecdir)/udev/keymaps/force-release ++dist_udevkeymapforcerel_DATA = \ ++ src/keymap/force-release-maps/dell-touchpad \ ++ src/keymap/force-release-maps/hp-other \ ++ src/keymap/force-release-maps/samsung-other \ ++ src/keymap/force-release-maps/samsung-90x3a \ ++ src/keymap/force-release-maps/common-volume-keys ++ ++src/keymap/keys.txt: $(INCLUDE_PREFIX)/linux/input.h ++ $(AM_V_at)mkdir -p src/keymap ++ $(AM_V_GEN)$(AWK) '/^#define.*KEY_[^ ]+[ \t]+[0-9]/ { if ($$2 != "KEY_MAX") { print $$2 } }' < $< | sed 's/^KEY_COFFEE$$/KEY_SCREENLOCK/' > $@ ++ ++src/keymap/keys-from-name.gperf: src/keymap/keys.txt ++ $(AM_V_GEN)$(AWK) 'BEGIN{ print "struct key { const char* name; unsigned short id; };"; print "%null-strings"; print "%%";} { print $$1 ", " $$1 }' < $< > $@ ++ ++src/keymap/keys-from-name.h: src/keymap/keys-from-name.gperf Makefile ++ $(AM_V_GEN)$(GPERF) -L ANSI-C -t --ignore-case -N lookup_key -H hash_key_name -p -C < $< > $@ ++ ++src/keymap/keys-to-name.h: src/keymap/keys.txt Makefile ++ $(AM_V_GEN)$(AWK) 'BEGIN{ print "const char* const key_names[KEY_CNT] = { "} { print "[" $$1 "] = \"" $$1 "\"," } END{print "};"}' < $< > $@ ++ ++keymaps-distcheck-hook: src/keymap/keys.txt ++ $(top_srcdir)/src/keymap/check-keymaps.sh $(top_srcdir) $^ ++DISTCHECK_HOOKS += keymaps-distcheck-hook ++endif ++ ++if ENABLE_MTD_PROBE ++# ------------------------------------------------------------------------------ ++mtd_probe_SOURCES = \ ++ src/mtd_probe/mtd_probe.c \ ++ src/mtd_probe/mtd_probe.h \ ++ src/mtd_probe/probe_smartmedia.c ++mtd_probe_CPPFLAGS = $(AM_CPPFLAGS) ++dist_udevrules_DATA += src/mtd_probe/75-probe_mtd.rules ++pkglibexec_PROGRAMS += mtd_probe ++endif ++ ++# ------------------------------------------------------------------------------ ++if ENABLE_RULE_GENERATOR ++dist_udevhome_SCRIPTS += \ ++ src/rule_generator/write_cd_rules \ ++ src/rule_generator/write_net_rules ++ ++dist_udevhome_DATA += \ ++ src/rule_generator/rule_generator.functions ++ ++dist_udevrules_DATA += \ ++ src/rule_generator/75-cd-aliases-generator.rules \ ++ src/rule_generator/75-persistent-net-generator.rules ++endif ++ ++# ------------------------------------------------------------------------------ ++if ENABLE_FLOPPY ++create_floppy_devices_SOURCES = src/floppy/create_floppy_devices.c ++create_floppy_devices_LDADD = libudev-private.la ++pkglibexec_PROGRAMS += create_floppy_devices ++dist_udevrules_DATA += src/floppy/60-floppy.rules ++endif ++ ++# ------------------------------------------------------------------------------ ++clean-local: ++ rm -rf udev-test-install ++ ++distclean-local: ++ rm -rf autom4te.cache ++ ++EXTRA_DIST += \ ++ $(TESTS) \ ++ test/rule-syntax-check.py ++ ++CLEANFILES += \ ++ $(BUILT_SOURCES) ++ ++install-exec-hook: $(INSTALL_EXEC_HOOKS) ++ ++install-data-hook: $(INSTALL_DATA_HOOKS) ++ ++uninstall-hook: $(UNINSTALL_EXEC_HOOKS) ++ ++distcheck-hook: $(DISTCHECK_HOOKS) ++ ++distclean-local: $(DISTCLEAN_LOCAL_HOOKS) ++ ++# ------------------------------------------------------------------------------ ++PREVIOUS_VERSION = `expr $(VERSION) - 1` ++changelog: ++ @ head -1 ChangeLog | grep -q "to v$(PREVIOUS_VERSION)" ++ @ mv ChangeLog ChangeLog.tmp ++ @ echo "Summary of changes from v$(PREVIOUS_VERSION) to v$(VERSION)" >> ChangeLog ++ @ echo "============================================" >> ChangeLog ++ @ echo >> ChangeLog ++ @ git log --pretty=short $(PREVIOUS_VERSION)..HEAD | git shortlog >> ChangeLog ++ @ echo >> ChangeLog ++ @ cat ChangeLog ++ @ cat ChangeLog.tmp >> ChangeLog ++ @ rm ChangeLog.tmp ++ ++test-install: ++ rm -rf $(PWD)/udev-test-install/ ++ make DESTDIR=$(PWD)/udev-test-install install ++ tree $(PWD)/udev-test-install/ ++ ++git-release: ++ head -1 ChangeLog | grep -q "to v$(VERSION)" ++ head -1 NEWS | grep -q "udev $(VERSION)" ++ git commit -a -m "release $(VERSION)" ++ git tag -m "udev $(VERSION)" -s $(VERSION) ++ git gc --prune=0 ++ ++git-sync: ++ git push ++ git push --tags ++ ++tar-sync: ++ rm -f udev-$(VERSION).tar.sign ++ xz -d -c udev-$(VERSION).tar.xz | gpg --armor --detach-sign --output udev-$(VERSION).tar.sign ++ kup put udev-$(VERSION).tar.xz udev-$(VERSION).tar.sign /pub/linux/utils/kernel/hotplug/ ++ ++doc-sync: ++ for i in src/*.html; do rm -f $$i.sign; gpg --armor --detach-sign --output=$$i.sign $$i; done ++ for i in src/*.html; do echo $$i; kup put $$i $$i.sign /pub/linux/utils/kernel/hotplug/udev/; done ++ for i in src/docs/html/*.{html,css,png}; do rm -f $$i.sign; gpg --armor --detach-sign --output=$$i.sign $$i; done ++ for i in src/docs/html/*.{html,css,png}; do echo $$i; kup put $$i $$i.sign /pub/linux/utils/kernel/hotplug/libudev/; done ++ for i in src/gudev/docs/html/*.{html,css,png}; do rm -f $$i.sign; gpg --armor --detach-sign --output=$$i.sign $$i; done ++ for i in src/gudev/docs/html/*.{html,css,png}; do echo $$i; kup put $$i $$i.sign /pub/linux/utils/kernel/hotplug/gudev/; done diff --cc src/udev/NEWS index 000000000,000000000..f4f6f4e32 new file mode 100644 --- /dev/null +++ b/src/udev/NEWS @@@ -1,0 -1,0 +1,1735 @@@ ++udev 182 ++======== ++Rules files in /etc/udev/rules.s/ with the same name as rules files in ++/run/udev/rules.d/ now always have precedence. The stack of files is now: ++/usr/lib (package), /run (runtime, auto-generated), /etc (admin), while ++the later ones override the earlier ones. In other words: the admin has ++always the last say. ++ ++USB auto-suspend is now enabled by default for some built-in USB HID ++devices. ++ ++/dev/disk/by-path/ links are no longer created for ATA devices behind ++an 'ATA transport class', the logic to extract predictable numbers does ++not exist in the kernel at this moment. ++ ++/dev/disk/by-id/scsi-* compatibility links are no longer created for ++ATA devices, they have their own ata-* prefix. ++ ++The s390 rule to set mode == 0666 for /dev/z90crypt is is removed from ++the udev tree and will be part of s390utils (or alternatively could be ++done by the kernel driver itself). ++ ++The udev-acl tool is no longer provided, it will be part of a future ++ConsoleKit release. On systemd systems, advanced ConsoleKit and udev-acl ++functionality are provided by systemd. ++ ++udev 181 ++======== ++Require kmod version 5. ++ ++Provide /dev/cdrom symlink for /dev/sr0. ++ ++udev 180 ++======== ++Fix for ID_PART_ENTRY_* property names, added by the blkid built-in. The ++fix is needed for udisk2 to operate properly. ++ ++Fix for skipped rule execution when the kernel has removed the device ++node in /dev again, before the event was even started. The fix is needed ++to run device-mapper/LVM events properly. ++ ++Fix for the man page installation, which was skipped when xsltproc was not ++installed. ++ ++udev 179 ++======== ++Bugfix for $name resolution, which broke at least some keymap handling. ++ ++udev 178 ++======== ++Bugfix for the firmware loading behavior with kernel modules which ++try to load firmware in the module_init() path. The blocked event ++runs into a timout now, which should allow the firmware to be loaded. ++ ++Bugfix for a wrong DEVNAME= export, which breaks at least the udev-acl ++tool. ++ ++Bugfix for missing ID_ properties for GPT partitions. ++ ++The RUN+="socket:.." option is deprecated and should not be used. A warning ++during rules parsing is printed now. Services which listen to udev events, ++need to subscribe to the netlink messages with libudev and not let udev block ++in the rules execution until the message is delivered. ++ ++udev 177 ++======== ++Bugfix for rule_generator instalation. ++ ++udev 176 ++======== ++The 'devtmpfs' filesystem is required now, udev will not create or delete ++device nodes anymore, it only adjusts permissions and ownership of device ++nodes and maintains additional symlinks. ++ ++A writable /run directory (ususally tmpfs) is required now for a fully ++functional udev, there is no longer a fallback to /dev/.udev. ++ ++The default 'configure' install locations have changed. Packages for systems ++with the historic / vs. /usr split need to be adapted, otherwise udev will ++be installed in /usr and not work properly. Example configuration options ++to install things the traditional way are in INSTALL. ++ ++The default install location of the 'udevadm' tool moved from 'sbin' ++to /usr/bin. Some tools expect udevadm in 'sbin', a symlink to udevadm ++needs to be manually created if needed, or --bindir=/sbin be specified. ++ ++The expected value of '--libexecdir=' has changed and must no longer contain ++the 'udev' directory. ++ ++Kernel modules are now loaded directly by linking udev to 'libkmod'. The ++'modprobe' tool is no longer executed by udev. ++ ++The 'blkid' tool is no longer executed from udev rules. Udev links ++directly to libblkid now. ++ ++Firmware is loaded natively by udev now, the external 'firmware' binary ++is no longer used. ++ ++All built-in tools can be listed and tested with 'udevadm test-builtin'. ++ ++The 'udevadm control --reload-rules' option has been renamed to '--reload'. ++It now also reloads the kernel module configuration. ++ ++The systemd socket files use PassCredentials=yes, which is available in ++systemd version 38. ++ ++The udev build system only creates a .xz tarball now. ++ ++All tabs in the source code used for indentation are replaced by spaces now. :) ++ ++udev 175 ++======== ++Bugfixes. ++ ++udev 174 ++======== ++Bugfixes. ++ ++The udev daemon moved to /lib/udev/udevd. Non-systemd init systems ++and non-dracut initramfs image generators need to change the init ++scripts. Alternatively the udev build needs to move udevd back to ++/sbin or create a symlink in /sbin, which is not done by default. ++ ++The path_id, usb_id, input_id tools are built-in commands now and ++the stand-alone tools do not exist anymore. Static lists of file in ++initramfs generators need to be updated. For testing, the commands ++can still be executed standalone with 'udevadm test-builtin '. ++ ++The fusectl filesystem is no longer mounted directly from udev. ++Systemd systems will take care of mounting fusectl and configfs ++now. Non-systemd systems need to ship their own rule if they ++need these filesystems auto-mounted. ++ ++The long deprecated keys: SYSFS=, ID=, BUS= have been removed. ++ ++The support for 'udevadm trigger --type=failed, and the ++RUN{fail_event_on_error} attribute was removed. ++ ++The udev control socket is now created in /run/udev/control ++and no longer as an abstract namespace one. ++ ++The rules to create persistent network interface and cdrom link ++rules automatically in /etc/udev/rules.d/ have been disabled by ++default. Explicit configuration will be required for these use ++cases, udev will no longer try to write any persistent system ++configuration from a device hotplug path. ++ ++udev 173 ++======== ++Bugfixes. ++ ++The udev-acl extra is no longer enabled by default now. To enable it, ++--enable-udev_acl needs to be given at ./configure time. On systemd ++systems, the udev-acl rules prevent it from running as the functionality ++has moved to systemd. ++ ++udev 172 ++======== ++Bugfixes. ++ ++Udev now enables kernel media-presence polling if available. Part ++of udisks optical drive tray-handling moved to cdrom_id: The tray ++is locked as soon as a media is detected to enable the receiving ++of media-eject-request events. Media-eject-request events will ++eject the media. ++ ++Libudev enumerate is now able to enumerate a subtree of a given ++device. ++ ++The mobile-action-modeswitch modeswitch tool was deleted. The ++functionality is provided by usb_modeswitch now. ++ ++udev 171 ++======== ++Bugfixes. ++ ++The systemd service files require systemd version 28. The systemd ++socket activation make it possible now to start 'udevd' and 'udevadm ++trigger' in parallel. ++ ++udev 170 ++======== ++Fix bug in control message handling, which can lead to a failing ++udevadm control --exit. Thanks to Jürg Billeter for help tracking ++it down. ++ ++udev 169 ++======== ++Bugfixes. ++ ++We require at least Linux kernel 2.6.32 now. Some platforms might ++require a later kernel that supports accept4() and similar, or ++need to backport the trivial syscall wiring to the older kernels. ++ ++The hid2hci tool moved to the bluez package and was removed. ++ ++Many of the extras can be --enable/--disabled at ./configure ++time. The --disable-extras option was removed. Some extras have ++been disabled by default. The current options and their defaults ++can be checked with './configure --help'. ++ ++udev 168 ++======== ++Bugfixes. ++ ++Udev logs a warning now if /run is not writable at udevd ++startup. It will still fall back to /dev/.udev, but this is ++now considered a bug. ++ ++The running udev daemon can now cleanly shut down with: ++ udevadm control --exit ++ ++Udev in initramfs should clean the state of the udev database ++with: udevadm info --cleanup-db which will remove all state left ++behind from events/rules in initramfs. If initramfs uses ++--cleanup-db and device-mapper/LVM, the rules in initramfs need ++to add OPTIONS+="db_persist" for all dm devices. This will ++prevent removal of the udev database for these devices. ++ ++Spawned programs by PROGRAM/IMPORT/RUN now have a hard timeout of ++120 seconds per process. If that timeout is reached the spawned ++process will be killed. The event timeout can be overwritten with ++udev rules. ++ ++If systemd is used, udev gets now activated by netlink data. ++Systemd will bind the netlink socket which will buffer all data. ++If needed, such setup allows a seemless update of the udev daemon, ++where no event can be lost during a udevd update/restart. ++Packages need to make sure to: systemctl stop udev.socket udev.service ++or 'mask' udev.service during the upgrade to prevent any unwanted ++auto-spawning of udevd. ++This version of udev conflicts with systemd version below 25. The ++unchanged service files will not wirk correctly. ++ ++udev 167 ++======== ++Bugfixes. ++ ++The udev runtime data moved from /dev/.udev/ to /run/udev/. The ++/run mountpoint is supposed to be a tmpfs mounted during early boot, ++available and writable to for all tools at any time during bootup, ++it replaces /var/run/, which should become a symlink some day. ++ ++If /run does not exist, or is not writable, udev will fall back using ++/dev/.udev/. ++ ++On systemd systems with initramfs and LVM used, packagers must ++make sure, that the systemd and initramfs versions match. The initramfs ++needs to create the /run mountpoint for udev to store the data, and ++mount this tmpfs to /run in the rootfs, so the that the udev database ++is preserved for the udev version started in the rootfs. ++ ++The command 'udevadm info --convert-db' is gone. The udev daemon ++itself, at startup, converts any old database version if necessary. ++ ++The systemd services files have been reorganized. The udev control ++socket is bound by systemd and passed to the started udev daemon. ++The udev-settle.service is no longer active by default. Services which ++can not handle hotplug setups properly need to actively pull it in, to ++act like a barrier. Alternatively the settle service can be unconditionally ++'systemctl'enabled, and act like a barrier for basic.target. ++ ++The fstab_import callout is no longer built or installed. Udev ++should not be used to mount, does not watch changes to fstab, and ++should not mirror fstab values in the udev database. ++ ++udev 166 ++======== ++Bugfixes. ++ ++New and updated keymaps. ++ ++udev 165 ++======== ++Bugfixes. ++ ++The udev database has changed, After installation of a new udev ++version, 'udevadm info --convert-db' should be called, to let the new ++udev/libudev version read the already stored data. ++ ++udevadm now supports quoting of property values, and prefixing of ++key names: ++ $ udevadm info --export --export-prefix=MY_ --query=property -n sda ++ MY_MAJOR='259' ++ MY_MINOR='0' ++ MY_DEVNAME='/dev/sda' ++ MY_DEVTYPE='disk' ++ ... ++ ++libudev now supports: ++ udev_device_get_is_initialized() ++ udev_enumerate_add_match_is_initialized() ++to be able to skip devices the kernel has created , but udev has ++not already handled. ++ ++libudev now supports: ++ udev_device_get_usec_since_initialized() ++to retrieve the "age" of a udev device record. ++ ++GUdev supports a more generic GUdevEnumerator class, udev TAG ++handling, device initialization and timestamp now. ++ ++The counterpart of /sys/dev/{char,block}/$major:$minor, ++/dev/{char,block}/$major:$minor symlinks are now unconditionally ++created, even when no rule files exist. ++ ++New and updated keymaps. ++ ++udev 164 ++======== ++Bugfixes. ++ ++GUdev moved from /usr to /. ++ ++udev 163 ++======== ++Bugfixes. ++ ++udev 162 ++======== ++Bugfixes. ++ ++Persistent network naming rules are disabled inside of Qemu/KVM now. ++ ++New and updated keymaps. ++ ++Udev gets unconditionally enabled on systemd installations now. There ++is no longer the need to to run 'systemctl enable udev.service'. ++ ++udev 161 ++======== ++Bugfixes. ++ ++udev 160 ++======== ++Bugfixes. ++ ++udev 159 ++======== ++Bugfixes. ++ ++New and fixed keymaps. ++ ++Install systemd service files if applicable. ++ ++udev 158 ++======== ++Bugfixes. ++ ++All distribution specific rules are removed from the udev source tree, ++most of them are no longer needed. The Gentoo rules which allow to support ++older kernel versions, which are not covered by the default rules anymore ++has moved to rules/misc/30-kernel-compat.rules. ++ ++udev 157 ++======== ++Bugfixes. ++ ++The option --debug-trace and the environemnt variable UDEVD_MAX_CHILDS= ++was removed from udevd. ++ ++Udevd now checks the kernel commandline for the following variables: ++ udev.log-priority= ++ udev.children-max= ++ udev.exec-delay= ++to help debuging coldplug setups where the loading of a kernel ++module crashes the system. ++ ++The subdirectory in the source tree rules/packages has been renamed to ++rules/arch, anc contains only architecture specific rules now. ++ ++udev 156 ++======== ++Bugfixes. ++ ++udev 155 ++======== ++Bugfixes. ++ ++Now the udev daemon itself, does on startup: ++ - copy the content of /lib/udev/devices to /dev ++ - create the standard symlinks like /dev/std{in,out,err}, ++ /dev/core, /dev/fd, ... ++ - use static node information provided by kernel modules ++ and creates these nodes to allow module on-demand loading ++ - possibly apply permissions to all ststic nodes from udev ++ rules which are annotated to match a static node ++ ++The default mode for a device node is 0600 now to match the kernel ++created devtmpfs defaults. If GROUP= is specified and no MODE= is ++given the default will be 0660. ++ ++udev 154 ++======== ++Bugfixes. ++ ++Udev now gradually starts to pass control over the primary device nodes ++and their names to the kernel, and will in the end only manage the ++permissions of the node, and possibly create additional symlinks. ++As a first step NAME="" will be ignored, and NAME= setings with names ++other than the kernel provided name will result in a logged warning. ++Kernels that don't provide device names, or devtmpfs is not used, will ++still work as they did before, but it is strongly recommended to use ++only the same names for the primary device node as the recent kernel ++provides for all devices. ++ ++udev 153 ++======== ++Fix broken firmware loader search path. ++ ++udev 152 ++======== ++Bugfixes. ++ ++"udevadm trigger" defaults to "change" events now instead of "add" ++events. The "udev boot script" might need to add "--action=add" to ++the trigger command if not already there, in case the initial coldplug ++events are expected as "add" events. ++ ++The option "all_partitons" was removed from udev. This should not be ++needed for usual hardware. Udev can not safely make assumptions ++about non-existing partition major/minor numbers, and therefore no ++longer provide this unreliable and unsafe option. ++ ++The option "ignore_remove" was removed from udev. With devtmpfs ++udev passed control over device nodes to the kernel. This option ++should not be needed, or can not work as advertised. Neither ++udev nor the kernel will remove device nodes which are copied from ++the /lib/udev/devices/ directory. ++ ++All "add|change" matches are replaced by "!remove" in the rules and ++in the udev logic. All types of events will update possible symlinks ++and permissions, only "remove" is handled special now. ++ ++The modem modeswitch extra was removed and the external usb_modeswitch ++program should be used instead. ++ ++New and fixed keymaps. ++ ++udev 151 ++======== ++Bugfixes. ++ ++udev 150 ++======== ++Bugfixes. ++ ++Kernels with SYSFS_DEPRECATED=y are not supported since a while. Many users ++depend on the current sysfs layout and the information not available in the ++deprecated layout. All remaining support for the deprecated sysfs layout is ++removed now. ++ ++udev 149 ++======== ++Fix for a possible endless loop in the new input_id program. ++ ++udev 148 ++======== ++Bugfixes. ++ ++The option "ignore_device" does no longer exist. There is no way to ++ignore an event, as libudev events can not be suppressed by rules. ++It only prevented RUN keys from being executed, which results in an ++inconsistent behavior in current setups. ++ ++BUS=, SYSFS{}=, ID= are long deprecated and should be SUBSYSTEM(S)=, ++ATTR(S){}=, KERNEL(S)=. It will cause a warning once for every rule ++file from now on. ++ ++The support for the deprecated IDE devices has been removed from the ++default set of rules. Distros who still care about non-libata drivers ++need to add the rules to the compat rules file. ++ ++The ID_CLASS property on input devices has been replaced by the more accurate ++set of flags ID_INPUT_{KEYBOARD,KEY,MOUSE,TOUCHPAD,TABLET,JOYSTICK}. These are ++determined by the new "input_id" prober now. Some devices, such as touchpads, ++can have several classes. So if you previously had custom udev rules which e. g. ++checked for ENV{ID_CLASS}=="kbd", you need to replace this with ++ENV{ID_INPUT_KEYBOARD}=="?*". ++ ++udev 147 ++======== ++Bugfixes. ++ ++To support DEVPATH strings larger than the maximum file name length, the ++private udev database format has changed. If some software still reads the ++private files in /dev/.udev/, which it shouldn't, now it's time to fix it. ++Please do not port anything to the new format again, everything in /dev/.udev ++is and always was private to udev, and may and will change any time without ++prior notice. ++ ++Multiple devices claiming the same names in /dev are limited to symlinks ++only now. Mixing identical symlink names and node names is not supported. ++This reduces the amount of data in the database significantly. ++ ++NAME="%k" causes a warning now. It's is and always was completely superfluous. ++It will break kernel supplied DEVNAMEs and therefore it needs to be removed ++from all rules. ++ ++Most NAME= instructions got removed. Kernel 2.6.31 supplies the needed names ++if they are not the default. To support older kernels, the NAME= rules need to ++be added to the compat rules file. ++ ++Symlinks to udevadm with the old command names are no longer resolved to ++the udevadm commands. ++ ++The udev-acl tool got adopted to changes in ConsoleKit. Version 0.4.1 is ++required now. ++ ++The option "last_rule" does no longer exist. Its use breaks too many ++things which expect to be run from independent later rules, and is an idication ++that something needs to be fixed properly instead. ++ ++The gudev API is no longer marked as experimental, ++G_UDEV_API_IS_SUBJECT_TO_CHANGE is no longer needed. The gudev introspection ++is enabled by default now. Various projects already depend on introspection ++information to bind dynamic languages to the gudev interfaces. ++ ++udev 146 ++======== ++Bugfixes. ++ ++The udevadm trigger "--retry-failed" option, which is replaced since quite ++a while by "--type=failed" is removed. ++ ++The failed tracking was not working at all for a few releases. The RUN ++option "ignore_error" is replaced by a "fail_event_on_error" option, and the ++default is not to track any failing RUN executions. ++ ++New keymaps, new modem, hid2hci updated. ++ ++udev 145 ++======== ++Fix possible crash in udevd when worker processes are busy, rules are ++changed at the same time, and workers get killed to reload the rules. ++ ++udev 144 ++======== ++Bugfixes. ++ ++Properties set with ENV{.FOO}="bar" are marked private by starting the ++name with a '.'. They will not be stored in the database, and not be ++exported with the event. ++ ++Firmware files are looked up in: ++ /lib/firmware/updates/$(uname -r) ++ /lib/firmware/updates ++ /lib/firmware/$(uname -r) ++ /lib/firmware" ++now. ++ ++ATA devices switched the property from ID_BUS=scsi to ID_BUS=ata. ++ata_id, instead of scsi_id, is the default tool now for ATA devices. ++ ++udev 143 ++======== ++Bugfixes. ++ ++The configure options have changed because another library needs to be ++installed in a different location. Instead of exec_prefix and udev_prefix, ++libdir, rootlibdir and libexecdir are used. The Details are explained in ++the README file. ++ ++Event processes now get re-used after they handled an event. This reduces ++the number of forks and the pressure on the CPU significantly, because ++cloned event processes no longer cause page faults in the main daemon. ++After the events have settled, a few worker processes stay around for ++future events, all others get cleaned up. ++ ++To be able to use signalfd(), udev depends on kernel version 2.6.25 now. ++Also inotify support is mandatory now to run udev. ++ ++The format of the queue exported by the udev damon has changed. There is ++no longer a /dev/.udev/queue/ directory. The current event queue can be ++accessed with udevadm settle and libudedv. ++ ++Libudev does not have the unstable API header anymore. From now on, ++incompatible changes will be handled by bumping the library major version. ++ ++To build udev from the git tree gtk-doc is needed now. The tarballs will ++build without it and contain the pre-built documentation. An online copy ++is available here: ++ http://www.kernel.org/pub/linux/utils/kernel/hotplug/libudev/ ++ ++The tools from the udev-extras repository have been merged into the main ++udev repository. Some of the extras have larger external dependencies, and ++they can be disabled with the configure switch --disable-extras. ++ ++udev 142 ++======== ++Bugfixes. ++ ++The program vol_id and the library libvolume_id are removed from the ++repository. Libvolume_id is merged with libblkid from the util-linux-ng ++package. Persistent disk links for label and uuid depend on the ++util-linux-ng version (2.15) of blkid now. Older versions of blkid ++can not be used with udev. ++ ++Libudev allows to subscribe to udev events. To prevent unwanted messages ++to be delivered, and waking up the subscribing process, a filter can be ++installed, to drop messages inside a kernel socket filter. The filters ++match on the : properties of the device. ++ This is part of the ongoing effort to replace HAL, and switch current ++users over to directly use libudev. ++ Libudev is still marked as experimental, and its interface might ++eventually change if needed, but no major changes of the currently exported ++interface are expected anymore, and a first stable release should happen ++soon. ++ ++A too old kernel (2.6.21) or a kernel with CONFIG_SYSFS_DEPRECATED ++is not supported since while and udevd will log an error message at ++startup. It should still be able to boot-up, but advanced rules and system ++services which depend on the information not available in the old sysfs ++format will fail to work correctly. ++ ++DVB device naming is supplied by the kernel now. In case older kernels ++need to be supported, the old shell script should be added to a compat ++rules file. ++ ++udev 141 ++======== ++Bugfixes. ++ ++The processed udev events get send back to the netlink socket. Libudev ++provides access to these events. This is work-in-progress, to replace ++the DeviceKit daemon functionality directly with libudev. There are ++upcoming kernel changes to allow non-root users to subcribe to these ++events. ++ ++udev 140 ++======== ++Bugfixes. ++ ++"udevadm settle" now optionally accepts a range of events to wait for, ++instead of waiting for "all" events. ++ ++udev 139 ++======== ++Bugfixes. ++ ++The installed watch for block device metadata changes is now removed ++during event hadling, because some (broken) tools may be called from udev ++rules and (wrongly) open the device with write access. After the finished ++event handling the watch is restored. ++ ++udev 138 ++======== ++Bugfixes. ++ ++Device nodes can be watched for changes with inotify with OPTIONS="watch". ++If closed after being opened for writing, a "change" uevent will occur. ++/dev/disk/by-{label,uuid}/* symlinks will be automatically updated. ++ ++udev 137 ++======== ++Bugfixes. ++ ++The udevadm test command has no longer a --force option, nodes and symlinks ++are always updated with a test run now. ++ ++The udevd daemon can be started with --resolve-names=never to avoid all user ++and group lookups (e.g. in cut-down systems) or --resolve-names=late to ++lookup user and groups every time events are handled. ++ ++udev 136 ++======== ++Bugfixes. ++ ++We are currently merging the Ubuntu rules in the udev default rules, ++and get one step closer to provide a common Linux /dev setup, regarding ++device names, symlinks, and default device permissions. On udev startup, ++we now expect the following groups to be resolvable to their ids with ++glibc's getgrnam(): ++ disk, cdrom, floppy, tape, audio, video, lp, tty, dialout, kmem. ++LDAP setups need to make sure, that these groups are always resolvable at ++bootup, with only the rootfs mounted, and without network access available. ++ ++Some systems may need to add some new, currently not used groups, or need ++to add some users to new groups, but the cost of this change is minimal, ++compared to the pain the current, rather random, differences between the ++various distributions cause for upstream projects and third-party vendors. ++ ++In general, "normal" users who log into a machine should never be a member ++of any such group, but the device-access should be managed by dynamic ACLs, ++which get added and removed for the specific users on login/logout and ++session activity/inactivity. These groups are only provided for custom setups, ++and mainly system services, to allow proper privilege separation. ++A video-streaming daemon uid would be a member of "audio" and "video", to get ++access to the sound and video devices, but no "normal" user should ever belong ++to the "audio" group, because he could listen to the built-in microphone with ++any ssh-session established from the other side of the world. ++ ++/dev/serial/by-{id,path}/ now contains links for ttyUSB devices, ++which do not depend on the kernel device name. As usual, unique ++devices - only a single one per product connected, or a real ++USB serial number in the device - are always found with the same ++name in the by-id/ directory. ++Completely identical devices may overwrite their names in by-id/ ++and can only be found reliably in the by-path/ directory. Devices ++specified by by-path/ must not change their connection, like the ++USB port number they are plugged in, to keep their name. ++ ++To support some advanced features, Linux 2.6.22 is the oldest supported ++version now. The kernel config with enabled SYSFS_DEPRECATED is no longer ++supported. Older kernels should still work, and devices nodes should be ++reliably created, but some rules and libudev will not work correctly because ++the old kernels do not provide the expected information or interfaces. ++ ++udev 135 ++======== ++Bugfixes. ++ ++Fix for a possible segfault while swapping network interface names in udev ++versions 131-134. ++ ++udev 134 ++======== ++Bugfixes. ++ ++The group "video" is part of the default rules now. ++ ++udev 133 ++======== ++Bugfix for kernels using SYSFS_DEPRECATED* option and finding parent ++block devices in some cases. No common distro uses this option anymore, ++and we do not get enough testing for this and recent udev versions. If ++this option is not needed to run some old distro with a new kernel, ++it should be disabled in the kernel config. ++ ++Bugfix for the $links substitution variable, which may crash if no links ++are created. This should not happen in usual setups because we always ++create /dev/{block,char}/ links. ++ ++The strings of the parsed rules, which are kept in memory, no longer ++contain duplicate entries, or duplicate tails of strings. This, and the ++new rules parsing/matching code reduces the total in-memory size of ++a huge distro rule sets to 0.08 MB, compared to the 1.2MB of udev ++version 130. ++ ++The export of DEVTYPE=disk/partition got removed from the default ++rules. This value is available from the kernel. The pnp shell script ++modprobe hack is removed from the default rules. ACPI devices have _proper_ ++modalias support and take care of the same functionality. ++Installations which support old kernels, but install current default ++udev rules may want to add that to the compat rules file. ++ ++Libvolume_id now always probes for all known filesystems, and does not ++stop at the first match. Some filesystems are marked as "exclusive probe", ++and if any other filesytem type matches at the same time, libvolume_id ++will, by default, not return any probing result. This is intended to prevent ++mis-detection with conflicting left-over signatures found from earlier ++file system formats. That way, we no longer depend on the probe-order ++in case of multiple competing signatures. In some setups the kernel allows ++to mount a volume with just the old filesystem signature still in place. ++This may damage the new filesystem and cause data-loss, just by mounting ++it. Because volume_id can not decide which one the correct signature is, ++the wrong signatures need to be removed manually from the volume, or the ++volume needs to be reformatted, to enable filesystem detection and possible ++auto-mounting. ++ ++udev 132 ++======== ++Fix segfault if compiled without optimization and dbg() does not get ++compiled out and uses variables which are not available. ++ ++udev 131 ++======== ++Bugfixes. (And maybe new bugs. :)) ++ ++The rule matching engine got converted from a rule list to a token ++array which reduced the in-memory rules representation of a full ++featured distros with thousends of udev rules from 1.2MB to 0.12 MB. ++Limits like 5 ENV and ATTR matches, and one single instance for most ++other keys per rule are gone. ++ ++The NAME assignment is no longer special cased. If later rules assign ++a NAME value again, the former value will be overwritten. As usual ++for most other keys, the NAME value can be protected by doing a final ++assignment with NAME:="". ++ ++All udev code now uses libudev, which is also exported. The library ++is still under development, marked as experimental, and its interface ++may change as long as the DeviceKit integration is not finished. ++ ++Many thanks to Alan Jenkins for his continuous help, and finding and ++optimizing some of the computing expensive parts. ++ ++udev 130 ++======== ++Bugfixes. ++ ++Kernel devices and device nodes are connected now by reverse indizes in ++/sys and /dev. A device number retrieved by a stat() or similar, the ++kernel device directory can be found by looking up: ++ /sys/dev/{block,char}/: ++and the device node of the same device by looking up: ++ /dev/{block,char}/: ++ ++udev 129 ++======== ++Fix recently introduced bug, which caused a compilation without large ++file support, where vol_id does not recognize raid signatures at the end ++of a volume. ++ ++Firewire disks now create both, by-id/scsi-* and by-id/ieee-* links. ++Seems some kernel versions prevent the creation of the ieee-* links, ++so people used the scsi-* link which disappeared now. ++ ++More libudev work. Almost all udevadm functionality comes from libudev ++now. ++ ++udevadm trigger has a new option --type, which allows to trigger events ++for "devices", for "subsystems", or "failed" devices. The old option ++--retry-failed" still works, but is no longer mentioned in the man page. ++ ++udev 128 ++======== ++Bugfixes. ++ ++The udevadm info --device-id-of-file= output has changed to use ++the obvious format. Possible current users should use the --export ++option which is not affected. ++ ++The old udev commands symlinks to udevadm are not installed, if ++these symlinks are used, a warning is printed. ++ ++udev 127 ++======== ++Bugfixes. ++ ++Optical drive's media is no longer probed for raid signatures, ++reading the end of the device causes some devices to malfunction. ++Also the offset of the last session found is used now to probe ++for the filesystem. ++ ++The volume_id library got a major version number update to 1, ++some deprecated functions are removed. ++ ++A shared library "libudev" gets installed now to provide access ++to udev device information. DeviceKit, the successor of HAL, will ++need this library to access the udev database and search sysfs for ++devices. ++The library is currently in an experimental state, also the API is ++expected to change, as long as the DeviceKit integration is not ++finished. ++ ++udev 126 ++======== ++We use ./configure now. See INSTALL for details. Current ++options are: ++ --prefix= ++ "/usr" - prefix for man pages, include files ++ --exec-prefix= ++ "" - the root filesystem, prefix for libs and binaries ++ --sysconfdir= ++ "/etc" ++ --with-libdir-name= ++ "lib" - directory name for libraries, not a path name ++ multilib 64bit systems may use "lib64" instead of "lib" ++ --enable-debug ++ compile-in verbose debug messages ++ --disable-logging ++ disable all logging and compile-out all log strings ++ --with-selinux ++ link against SELInux libraries, to set the expected context ++ for created files ++ ++In the default rules, the group "disk" gets permissions 0660 instead ++of 0640. One small step closer to unify distro rules. Some day, all ++distros hopefully end up with the same set of rules. ++ ++No symlinks to udevadm are installed anymore, if they are still needed, ++they should be provided by the package. ++ ++udev 125 ++======== ++Bugfixes. ++ ++Default udev rules, which are not supposed to be edited by the user, should ++be placed in /lib/udev/rules.d/ now, to make it clear that they are private to ++the udev package and will be replaced with an update. Udev will pick up rule ++files from: ++ /lib/udev/rules.d/ - default installed rules ++ /etc/udev/rules.d/ - user rules + on-the-fly generated rules ++ /dev/.udev/rules.d/ - temporary non-persistent rules created after bootup ++It does not matter in which directory a rule file lives, all files are sorted ++in lexical order. ++ ++To help creating /dev/root, we have now: ++ $ udevadm info --export --export-prefix="ROOT_" --device-id-of-file=/ ++ ROOT_MAJOR=8 ++ ROOT_MINOR=5 ++In case the current --device-id-of-file is already used, please switch to ++the --export format version, it saves the output parsing and the old ++format will be changed to use ':' as a separator, like the format in the ++sysfs 'dev' file. ++ ++udev 124 ++======== ++Fix cdrom_id to properly recognize blank media. ++ ++udev 123 ++======== ++Bugfixes. ++ ++Tape drive id-data is queried from /dev/bsg/* instead of the tape ++nodes. This avoids rewinding tapes on open(). ++ ++udev 122 ++======== ++Bugfixes. ++ ++The symlinks udevcontrol and udevtrigger are no longer installed by ++the Makefile. ++ ++The scsi_id program does not depend on sysfs anymore. It can speak ++SGv4 now, so /dev/bsg/* device nodes can be used, to query SCSI device ++data, which should solve some old problems with tape devices, where ++we better do not open all tape device nodes to identify the device. ++ ++udev 121 ++======== ++Many bugfixes. ++ ++The cdrom_id program is replaced by an advanced version, which can ++detect most common device types, and also properties of the inserted ++media. This is part of moving some basic functionality from HAL into ++udev (and the kernel). ++ ++udev 120 ++======== ++Bugfixes. ++ ++The last WAIT_FOR_SYSFS rule is removed from the default rules. ++ ++The symlinks to udevadm for the debugging tools: udevmonitor and ++udevtest are no longer created. ++ ++The symlinks to the udevadm man page for the old tool names are ++no longer created. ++ ++Abstract namespace sockets paths in RUN+="socket:@" rules, ++should be prefixed with '@' to indicate that the path is not a ++real file. ++ ++udev 119 ++======== ++Bugfixes. ++ ++udev 118 ++======== ++Bugfixes. ++ ++Udevstart is removed from the tree, it did not get installed for ++a long time now, and is long replaced by trigger and settle. ++ ++udev 117 ++======== ++Bugfixes. ++ ++All udev tools are merged into a single binary called udevadm. ++The old names of the tools are built-in commands in udevadm now. ++Symlinks to udevadm, with the names of the old tools, provide ++the same functionality as the standalone tools. There is also ++only a single udevadm.8 man page left for all tools. ++ ++Tools like mkinitramfs should be checked, if they need to include ++udevadm in the list of files. ++ ++udev 116 ++======== ++Bugfixes. ++ ++udev 115 ++======== ++Bugfixes. ++ ++The etc/udev/rules.d/ directory now contains a default set of basic ++udev rules. This initial version is the result of a rules file merge ++of Fedora and openSUSE. For these both distros only a few specific ++rules are left in their own file, named after the distro. Rules which ++are optionally installed, because they are only valid for a specific ++architecture, or rules for subsystems which are not always used are ++in etc/udev/packages/. ++ ++udev 114 ++======== ++Bugfixes. ++ ++Dynamic rules can be created in /dev/.udev/rules.d/ to trigger ++actions by dynamically created rules. ++ ++SYMLINK=="" matches agains the entries in the list of ++currently defined symlinks. The links are not created in the ++filesystem at that point in time, but the values can be matched. ++ ++RUN{ignore_error}+="" will ignore any exit code from the ++program and not record as a failed event. ++ ++udev 113 ++======== ++Bugfixes. ++ ++Final merge of patches/features from the Ubuntu package. ++ ++udev 112 ++======== ++Bugfixes. ++ ++Control characters in filesystem label strings are no longer silenty ++removed, but hex-encoded, to be able to uniquely identify the device ++by its symlink in /dev/disk/by-label/. ++If libvolume_id is used by mount(8), LABEL= will work as expected, ++if slashes or other characters are used in the label string. ++ ++To test the existence of a file, TEST=="" and TEST!="" ++can be specified now. The TEST key accepts an optional mode mask ++TEST{0100}=="". ++ ++Scsi_id now supports a mode without expecting scsi-specific sysfs ++entries to allow the extraction of cciss-device persistent properties. ++ ++udev 111 ++======== ++Bugfixes. ++ ++In the future, we may see uuid's which are just simple character ++strings (see the DDF Raid Specification). For that reason vol_id now ++exports ID_FS_UUID_SAFE, just like ID_FS_LABEL_SAFE. For things like ++the creation of symlinks, the *_SAFE values ensure, that no control ++or whitespace characters are used in the filename. ++ ++Possible users of libvolume_id, please use the volume_id_get_* functions. ++The public struct will go away in a future release of the library. ++ ++udev 110 ++======== ++Bugfixes. ++ ++Removal of useless extras/eventrecorder.sh. ++ ++udev 109 ++======== ++Bugfixes. ++ ++udev 108 ++======== ++Bugfixes. ++ ++The directory multiplexer for dev.d/ and hotplug.d are finally removed ++from the udev package. ++ ++udev 107 ++======== ++Bugfixes. ++ ++Symlinks can have priorities now, the priority is assigned to the device ++and specified with OPTIONS="link_priority=100". Devices with higher ++priorities overwrite the symlinks of devices with lower priorities. ++If the device that currently owns the link, goes away, the symlink ++will be removed, and recreated, pointing to the next device with the ++highest actual priority. This should make /dev/disk/by-{label,uuid,id} ++more reliable, if multiple devices contain the same metadata and overwrite ++these symlinks. ++ ++The dasd_id program is removed from the udev tree, and dasdinfo, with the ++needed rules, are part of the s390-tools now. ++ ++Please add KERNEL=="[0-9]*:[0-9]*" to the scsi wait-for-sysfs rule, ++we may get the scsi sysfs mess fixed some day, and this will only catch ++the devices we are looking for. ++ ++USB serial numbers for storage devices have the target:lun now appended, ++to make it possibble to distinguish broken multi-lun devices with all ++the same SCSI identifiers. ++ ++Note: The extra "run_directory" which searches and executes stuff in ++/etc/hotplug.d/ and /etc/dev.d/ is long deprecated, and will be removed ++with the next release. Make sure, that you don't use it anymore, or ++provides your own implementation of that inefficient stuff. ++We are tired of reports about a "slow udev", because these directories ++contain stuff, that runs with _every_ event, instead of using rules, ++that run programs only for the matching events. ++ ++udev 106 ++======== ++Bugfixes. ++ ++udev 105 ++======== ++Bugfixes. ++ ++DRIVER== will match only for devices that actually have a real ++driver. DRIVERS== must be used, if parent devices should be ++included in the match. ++ ++Libvolume_id's "linux_raid" detection needed another fix. ++ ++udev 104 ++======== ++Bugfixes. ++ ++udev 103 ++======== ++Add additional check to volume_id detection of via_raid, cause ++some company decided to put a matching pattern all over the empty ++storage area of their music players. ++ ++udev 102 ++======== ++Fix path_id for SAS devices. ++ ++udev 101 ++======== ++The udev daemon can be started with --debug-trace now, which will ++execute all events serialized to get a chance to catch a possible ++action that crashes the box. ++ ++A warning is logged, if PHYSDEV* keys, the "device" link, or a parent ++device attribute like $attr{../file} is used, only WAIT_FOR_SYSFS rules ++are excluded from the warning. Referencing parent attributes directly ++may break when something in the kernel driver model changes. Udev will ++just find the attribute by walking up the parent chain. ++ ++Udevtrigger now sorts the list of devices depending on the device ++dependency, so a "usb" device is triggered after the parent "pci" ++device. ++ ++udev 100 ++======== ++Revert persistent-storage ata-serial '_' '-' replacement. ++ ++udev 099 ++======== ++Bugfixes. ++ ++Udevtrigger can now filter the list of devices to be triggered. Matches ++for subsystems or sysfs attributes can be specified. ++ ++The entries in /dev/.udev/queue and /dev/.udev/failed have changed to ++zero-sized files to avoid pointing to /sys and confuse broken tools which ++scan the /dev directory. To retry failed events, udevtrigger --retry-failed ++should be used now. ++ ++The rules and scripts to create udev rules for persistent network ++devices and optical drives are in the extras/rules_generator directory ++now. If you use something similar, please consider replacing your own ++version with this, to share the support effort. The rule_generator ++installs its own rules into /etc/udev/rules.d. ++ ++The cdrom_id tool installs its own rule now in /etc/udev/rules.d, cause ++the rule_generator depends on cdrom_id to be called in an earlier rule. ++ ++udev 098 ++======== ++Bugfixes. ++ ++Renaming of some key names (the old names still work): ++BUS -> SUBSYSTEMS, ID -> KERNELS, SYSFS -> ATTRS, DRIVER -> DRIVERS. ++(The behavior of the key DRIVER will change soon in one of the next ++releases, to match only the event device, please switch to DRIVERS ++instead. If DRIVER is used, it will behave like DRIVERS, but an error ++is logged. ++With the new key names, we have a more consistent and simpler scheme. ++We can match the properties of the event device only, with: KERNEL, ++SUBSYSTEM, ATTR, DRIVER. Or include all the parent devices in the match, ++with: KERNELS, SUBSYSTEMS, ATTRS, DRIVERS. ID, BUS, SYSFS, DRIVER are no ++longer mentioned in the man page and should be switched in the rule ++files. ++ ++ATTR{file}="value" can be used now, to write to a sysfs file of the ++event device. Instead of: ++ ..., SYSFS{type}=="0|7|14", RUN+="/bin/sh -c 'echo 60 > /sys$$DEVPATH/timeout'" ++we now can do: ++ ..., ATTR{type}=="0|7|14", ATTR{timeout}="60" ++ ++All the PHYSDEV* keys are deprecated and will be removed from a ++future kernel: ++ PHYDEVPATH - is the path of a parent device and should not be ++ needed at all. ++ PHYSDEVBUS - is just a SUBSYSTEM value of a parent, and can be ++ matched with SUBSYSTEMS== ++ PHYSDEVDRIVER - for bus devices it is available as ENV{DRIVER}. ++ Newer kernels will have DRIVER in the environment, ++ for older kernels udev puts in. Class device will ++ no longer carry this property of a parent and ++ DRIVERS== can be used to match such a parent value. ++Note that ENV{DRIVER} is only available for a few bus devices, where ++the driver is already bound at device event time. On coldplug, the ++events for a lot devices are already bound to a driver, and they will have ++that value set. But on hotplug, at the time the kernel creates the device, ++it can't know what driver may claim the device after that, therefore ++in most cases it will be empty. ++ ++Failed events should now be re-triggered with: ++ udevtrigger --retry-failed. ++Please switch to this command, so we keep the details of the /dev/.udev/failed/ ++files private to the udev tools. We may need to switch the current symlink ++target, cause some obviously broken tools try to scan all files in /dev ++including /dev/.udev/, find the links to /sys and end up stat()'ing sysfs files ++million times. This takes ages on slow boxes. ++ ++The udevinfo attribute walk (-a) now works with giving a device node ++name (-n) instead of a devpath (-p). The query now always works, also when ++no database file was created by udev. ++ ++The built-in /etc/passwd /etc/group parser is removed, we always depend on ++getpwnam() and getgrnam() now. One of the next releases will depend on ++fnmatch() and may use getopt_long(). ++ ++udev 097 ++======== ++Bugfixes and small improvements. ++ ++udev 096 ++======== ++Fix path_id for recent kernels. ++ ++udev 095 ++======== ++%e is finally gone. ++ ++Added support for swapping network interface names, by temporarily ++renaming the device and wait for the target name to become free. ++ ++udev 094 ++======== ++The built-in MODALIAS key and substitution is removed. ++ ++udev 093 ++======== ++The binary firmware helper is replaced by the usual simple ++shell script. Udevsend is removed from the tree. ++ ++udev 092 ++======== ++Bugfix release. ++ ++udev 091 ++======== ++Some more keys require the correct use of '==' and '=' depending ++on the kind of operation beeing an assignment or a match. Rules ++with invalid operations are skipped and logged to syslog. Please ++test with udevtest if the parsing of your rules throws errors and ++fix possibly broken rules. ++ ++udev 090 ++======== ++Provide "udevsettle" to wait for all current udev events to finish. ++It also watches the current kernel netlink queue by comparing the ++even sequence number to make sure that there are no current pending ++events that have not already arrived in the daemon. ++ ++udev 089 ++======== ++Fix rule to skip persistent rules for removable IDE devices, which ++also skipped optical IDE drives. ++ ++All *_id program are installed in /lib/udev/ by default now. ++ ++No binary is stripped anymore as this should be done in the ++packaging process and not at build time. ++ ++libvolume_id is provided as a shared library now and vol_id is ++linked against it. Also one of the next HAL versions will require ++this library, and the HAL build process will also require the ++header file to be installed. The copy of the same code in HAL will ++be removed to have only a single copy left on the system. ++ ++udev 088 ++======== ++Add persistent links for SCSI tapes. The rules file is renamed ++to 60-persistent-storage.rules. ++ ++Create persistent path for usb devices. Can be used for all sorts ++of devices that can't be distinguished by other properties like ++multiple identical keyboards and mice connected to the same box. ++ ++Provide "udevtrigger" program to request events on coldplug. The ++shell script is much too slow with thousends of devices. ++ ++udev 087 ++======== ++Fix persistent disk rules to exclude removable IDE drives. ++ ++Warn if %e, $modalias or MODALIAS is used. ++ ++udev 086 ++======== ++Fix queue export, which wasn't correct for subsequent add/remove ++events for the same device. ++ ++udev 085 ++======== ++Fix cramfs detection on big endian. ++ ++Make WAIT_FOR_SYSFS usable in "normal" rules and silent if the whole ++device goes away. ++ ++udev 084 ++======== ++If BUS== and SYSFS{}== have been used in the same rule, the sysfs ++attributes were only checked at the parent device that matched the ++by BUS requested subsystem. Fix it to also look at the device we ++received the event for. ++ ++Build variable CROSS has changed to CROSS_COMPILE to match the kernel ++build name. ++ ++udev 083 ++======== ++Fix a bug where NAME="" would prevent RUN from beeing executed. ++ ++RUN="/bin/program" does not longer automatically add the subsystem ++as the first parameter. This is from the days of /sbin/hotplug ++which is dead now and it's just confusing to need to add a space at ++the end of the program name to prevent this. ++If you use rules that need the subsystem as the first parameter, ++like the old "udev_run_hotlugd" and "udev_run_devd", add the subsystem ++to the key like RUN+="/bin/program $env{SUBSYSTEM}". ++ ++udev 082 ++======== ++The udev man page has moved to udev(7) as it does not describe a command ++anymore. The programs udev, udevstart and udevsend are no longer installed ++by default and must be copied manually, if they should be installed or ++included in a package. ++ ++Fix a bug where "ignore_device" could run earlier collected RUN keys before ++the ignore rule was applied. ++ ++More preparation for future sysfs changes. usb_id and scsi_id no longer ++depend on a magic order of devices in the /devices chain. Specific devices ++should be requested by their subsytem. ++ ++This will always find the scsi parent device without depending on a specific ++path position: ++ dev = sysfs_device_get(devpath); ++ dev_usb = sysfs_device_get_parent_with_subsystem(dev, "scsi"); ++ ++The "device" link in the current sysfs layout will be automatically ++_resolved_ as a parent and in the new sysfs layout it will just _be_ the ++parent in the devpath. If a device is requested by it's symlink, like all ++class devices in the new sysfs layout will look like, it gets automatically ++resolved and substituted with the real devpath and not the symlink path. ++ ++Note: ++A similar logic must be applied to _all_ sysfs users, including ++scripts, that search along parent devices in sysfs. The explicit use of ++the "device" link must be avoided. With the future sysfs layout all ++DEVPATH's will start with /devices/ and have a "subsystem" symlink poiting ++back to the "class" or the "bus". The layout of the parent devices in ++/devices is not necessarily expected to be stable across kernel releases and ++searching for parents by their subsystem should make sysfs users tolerant ++for changed parent chains. ++ ++udev 081 ++======== ++Prepare udev to work with the experimental kernel patch, that moves ++/sys/class devices to /sys/devices and /sys/block to /sys/class/block. ++ ++Clarify BUS, ID, $id usage and fix $id behavior. This prepares for ++moving the class devices to /sys/devices. ++ ++Thanks again to Marco for help finding a hopefully nice compromise ++to make %b simpler and working again. ++ ++udev 080 ++======== ++Complete removal of libsysfs, replaced by simple helper functions ++which are much simpler and a bit faster. The udev daemon operatesentirely ++on event parameters and does not use sysfs for simple rules anymore. ++Please report any new bugs/problems, that may be caused by this big ++change. They will be fixed immediately. ++ ++The enumeration format character '%e' is deprecated and will be ++removed sometimes from a future udev version. It never worked correctly ++outside of udevstart, so we can't use it with the new parallel ++coldplug. A simple enumeration is as useless as the devfs naming ++scheme, just get rid of both if you still use it. ++ ++MODALIAS and $modalias is not needed and will be removed from one of ++the next udev versions, replace it in all rules with ENV{MODALIAS} or ++the sysfs "modalias" value. ++ ++Thanks a lot to Marco for all his help on finding and fixing bugs. ++ ++udev 079 ++======== ++Let scsi_id request libata drive serial numbers from page 0x80. ++ ++Renamed etc/udev/persistent.rules to persistent-disk.rules and ++added /dev/disk/by-name/* for device mapper device names. ++ ++Removed %e from the man page. It never worked reliably outside ++of udevstart and udevstart is no longer recommended to use. ++ ++udev 078 ++======== ++Symlinks are now exported to the event environment. Hopefully it's no ++longer needed to run udevinfo from an event process, like it was ++mentioned on the hotplug list: ++ UDEV [1134776873.702967] add@/block/sdb ++ ... ++ DEVNAME=/dev/sdb ++ DEVLINKS=/dev/disk/by-id/usb-IBM_Memory_Key_0218B301030027E8 /dev/disk/by-path/usb-0218B301030027E8:0:0:0 ++ ++udev 077 ++======== ++Fix a problem if udevsend is used as the hotplug handler and tries to use ++syslog, which causes a "vc" event loop. 2.6.15 will make udevsend obsolete ++and this kind of problems will hopefully go away soon. ++ ++udev 076 ++======== ++All built-in logic to work around bad sysfs timing is removed with this ++version. The need to wait for sysfs files is almost fixed with a kernel ++version that doesn't work with this udev version anyway. Until we fix ++the timing of the "bus" link creation, the former integrated logic should ++be emulated by a rule placed before all other rules: ++ ACTION=="add", DEVPATH=="/devices/*", ENV{PHYSDEVBUS}=="?*", WAIT_FOR_SYSFS="bus" ++ ++The option "udev_db" does no longer exist. All udev state will be in ++/$udev_root/.udev/ now, there is no longer an option to set this ++to anything else. ++If the init script or something else used this value, just depend on ++this hardcoded path. But remember _all_content_ of this directory is ++still private to udev and can change at any time. ++ ++Default location for rule sripts and helper programs is now: /lib/udev/. ++Everything that is not useful on the commandline should go into this ++directory. Some of the helpers in the extras folder are installed there ++now. The rules need to be changed, to find the helpers there. ++ ++Also /lib/udev/devices is recommended as a directory where packages or ++the user can place real device nodes, which get copied over to /dev at ++every boot. This should replace the various solutions with custom config ++files. ++ ++Udevsend does no longer start the udev daemon. This must be done with ++the init script that prepares /dev on tmpfs and creates the initial nodes, ++before starting the daemon. ++ ++udev 075 ++======== ++Silent a too verbose error logging for the old hotplug.d/ dev.d/ ++emulation. ++ ++The copy of klibc is removed. A systemwide installed version of klibc ++should be used to build a klibc udev now. ++ ++udev 074 ++======== ++NAME="" will not create any nodes, but execute RUN keys. To completely ++ignore an event the OPTION "ignore_device" should be used. ++ ++After removal of the reorder queue, events with a TIMEOUT can be executed ++without any queuing now. ++ ++udev 073 ++======== ++Fixed bug in udevd, if inotify is not available. We depend on netlink ++uevents now, kernels without that event source will not work with that ++version of udev anymore. ++ ++udev 072 ++======== ++The rule parsing happens now in the daemon once at startup, all udev ++event processes inherit the already parsed rules from the daemon. ++It is shipped with SUSE10.0 and reduces heavily the system load at ++startup. The option to save precompiled rules and let the udev process ++pick the them up is removed, as it's no longer needed. ++ ++Kernel 2.6.15 will have symlinks at /class/input pointing to the real ++device. Libsysfs is changed to "translate" the requested link into the ++real device path, as it would happen with the hotplug event. Otherwise ++device removal and the udev database will not work. ++ ++Using 'make STRIPCMD=' will leave the binaries unstripped for debugging ++and packaging. ++ ++A few improvements for vol_id, the filesytem probing code. ++ ++udev 071 ++======== ++Fix a stupid typo in extras/run_directory for "make install". ++ ++scsi_id creates the temporary devnode now in /dev for usage with a ++non-writable /tmp directory. ++ ++The uevent kernel socket buffer can carry app. 50.000 events now, ++let's see who can break this again. :) ++ ++The upcoming kernel will have a new input driver core integration. ++Some class devices are now symlinks to the real device. libsysfs ++needs a fix for this to work correctly. Udevstart of older udev ++versions will _not_ create these devices! ++ ++udev 070 ++======== ++Fix a 'install' target in the Makefile, that prevents EXTRAS from ++beeing installed. ++ ++udev 069 ++======== ++A bunch of mostly trivial bugfixes. From now on no node name or ++symlink name can contain any character than plain whitelisted ascii ++characters or validated utf8 byte-streams. This is needed for the ++/dev/disk/by-label/* links, because we import untrusted data and ++export it to the filesystem. ++ ++udev 068 ++======== ++More bugfixes. If udevd was started from the kernel, we don't ++have stdin/stdout/stderr, which broke the forked tools in some ++situations. ++ ++udev 067 ++======== ++Bugfix. udevstart event ordering was broken for a long time. ++The new run_program() uncovered it, because /dev/null was not ++available while we try to run external programs. ++Now udevstart should create it before we run anything. ++ ++udev 066 ++======== ++Minor bugfixes and some distro rules updates. If you don't have the ++persistent disk rules in /dev/disk/by-*/* on your distro, just ++grab it from here. :) ++ ++udev 065 ++======== ++We can use socket communication now to pass events from udev to ++other programs: ++ RUN+="socket:/org/freedesktop/hal/udev_event" ++will pass the whole udev event to the HAL daemon without the need ++for a forked helper. (See ChangeLog for udevmonitor, as an example) ++ ++udev 064 ++======== ++Mostly bugfixes and see ChangeLog. ++ ++The test for the existence of an environment value should be ++switched from: ++ ENV{KEY}=="*" to ENV{KEY}=="?*" ++because "*" will not fail anymore, if the key does not exist or ++is empty. ++ ++udev 063 ++======== ++Bugfixes and a few tweaks described in the ChangeLog. ++ ++udev 062 ++======== ++Mostly a Bugfix release. ++ ++Added WAIT_FOR_SYSFS="" to be able to fight against the sysfs ++timing with custom rules. ++ ++udev 061 ++======== ++We changed the internal rule storage format. Our large rule files took ++2 MB of RAM, with the change we are down to 99kB. ++ ++If the device-node has been created with default name and no symlink or ++options are to remenber, it is not longer stored in the udevdb. HAL will ++need to be updated to work correctly with that change. ++ ++To overrride optimization flags, OPTFLAGS may be used now. ++ ++udev 060 ++======== ++Bugfix release. ++ ++udev 059 ++======== ++Major changes happened with this release. The goal is to take over the ++complete kernel-event handling and provide a more efficient way to dispatch ++kernel events. Replacing most of the current shell script logic and the ++kernel forked helper with a netlink-daemon and a rule-based event handling. ++ ++o udevd listens to netlink events now. The first valid netlink event ++ will make udevd ignore any message from udevsend that contains a ++ SEQNUM, to avoid duplicate events. The forked events can be disabled ++ with: ++ echo "" > /proc/sys/kernel/hotplug ++ For full support, the broken input-subsytem needs to be fixed, not to ++ bypass the driver core. ++ ++o /etc/dev.d/ + /etc/hotplug.d/ directory multiplexing is completely ++ removed from udev itself and must be emulated by calling small ++ helper binaries provided in the extras folder: ++ make EXTRAS=extras/run_directory/ ++ will build udev_run_devd and udev_run_hotplugd, which can be called ++ from a rule if needed: ++ RUN+="/sbin/udev_run_hotplugd" ++ The recommended way to handle this is to convert all the calls from ++ the directories to explicit udev rules and get completely rid of the ++ multiplexing. (To catch a ttyUSB event, you now no longer need to ++ fork and exit 300 tty script instances you are not interested in, it ++ is just one rule that matches exactly the device.) ++ ++o udev handles now _all_ events not just events for class and block ++ devices, this way it is possible to control the complete event ++ behavior with udev rules. Especially useful for rules like: ++ ACTION="add", DEVPATH="/devices/*", MODALIAS=="?*", RUN+="/sbin/modprobe $modalias" ++ ++o As used in the modalias rule, udev supports now textual ++ substitution placeholder along with the usual format chars. This ++ needs to be documented, for now it's only visible in udev_rules_parse.c. ++ ++o The rule keys support now more operations. This is documented in the ++ man page. It is possible to add values to list-keys like the SYMLINK ++ and RUN list with KEY+="value" and to clear the list by assigning KEY="". ++ Also "final"-assignments are supported by using KEY:="value", which will ++ prevent changing the key by any later rule. ++ ++o kernel 2.6.12 has the "detached_state" attribute removed from ++ sysfs, which was used to recognize sysfs population. We switched that ++ to wait for the "bus" link, which is only available in kernels after 2.6.11. ++ Running this udev version on older kernels may cause a short delay for ++ some events. ++ ++o To provide infrastructure for persistent device naming, the id programs: ++ scsi_id, vol_id (former udev_volume_id), and ata_id (new) are able now ++ to export the probed data in environment key format: ++ pim:~ # /sbin/ata_id --export /dev/hda ++ ID_MODEL=HTS726060M9AT00 ++ ID_SERIAL=MRH401M4G6UM9B ++ ID_REVISION=MH4OA6BA ++ ++ The following rules: ++ KERNEL="hd*[!0-9]", IMPORT="/sbin/ata_id --export $tempnode" ++ KERNEL="hd*[!0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_MODEL}_$env{ID_SERIAL}" ++ ++ Will create: ++ kay@pim:~> tree /dev/disk ++ /dev/disk ++ |-- by-id ++ | |-- HTS726060M9AT00_MRH401M4G6UM9B -> ../../hda ++ | `-- IBM-Memory_Key -> ../../sda ++ |-- by-label ++ | |-- swap -> ../../hda1 ++ | |-- date -> ../../sda1 ++ | `-- home -> ../../hda3 ++ `-- by-uuid ++ |-- 2E08712B0870F2E7 -> ../../hda3 ++ |-- 9352cfef-7687-47bc-a2a3-34cf136f72e1 -> ../../hda1 ++ |-- E845-7A89 -> ../../sda1 ++ `-- b2a61681-3812-4f13-a4ff-920d70604299 -> ../../hda2 ++ ++ The IMPORT= operation will import these keys in the environment and make ++ it available for later PROGRAM= and RUN= executed programs. The keys are ++ also stored in the udevdb and can be queried from there with one of the ++ next udev versions. ++ ++o A few binaries are silently added to the repository, which can be used ++ to replay kernel events from initramfs instead of using coldplug. udevd ++ can be instructed now to queue-up events while the stored events from ++ initramfs are filled into the udevd-queue. This code is still under ++ development and there is no documentation now besides the code itself. ++ The additional binaries get compiled, but are not installed by default. ++ ++o There is also a temporary fix for a performance problem where too many ++ events happen in parallel and every event needs to parse the rules. ++ udev can now read precompiled rules stored on disk. This is likely to be ++ replaced by a more elegant solution in a future udev version. ++ ++udev 058 ++======== ++With kernel version 2.6.12, the sysfs file "detached_state" was removed. ++Fix for libsysfs not to expect this file was added. ++ ++udev 057 ++======== ++All rules are applied now, but only the first matching rule with a NAME-key ++will be applied. All later rules with NAME-key are completely ignored. This ++way system supplied symlinks or permissions gets applied to user-defined ++naming rules. ++ ++Note: ++Please check your rules setup, if you may need to add OPTIONS="last_rule" ++to some rules, to keep the old behavior. ++ ++The rules are read on "remove"-events too. That makes is possible to match ++with keys that are available on remove (KERNEL, SUBSYSTEM, ID, ENV, ...) to ++instruct udev to ignore an event (OPTIONS="ignore_device"). ++The new ACTION-key may be used to let a rule act only at a "remove"-event. ++ ++The new RUN-key supports rule-based execution of programs after device-node ++handling. This is meant as a general replacement for the dev.d/-directories ++to give fine grained control over the execution of programs. ++ ++The %s{}-sysfs format char replacement values are searched at any of the ++devices in the device chain now, not only at the class-device. ++ ++We support log priority levels now. The value udev_log in udev.conf is used ++to determine what is printed to syslog. This makes it possible to ++run a version with compiled-in debug messages in a production environment ++which is sometimes needed to find a bug. ++It is still possible to supress the inclusion of _any_ syslog usage with ++USE_LOG=false to create the smallest possible binaries if needed. ++The configured udev_log value can be overridden with the environment variable ++UDEV_LOG. ++ ++udev 056 ++======== ++Possible use of a system-wide klibc: ++ make USE_KLIBC=true KLCC=/usr/bin/klcc all ++will link against an external klibc and our own version will be ignored. ++ ++udev 055 ++======== ++We support an unlimited count of symlinks now. ++ ++If USE_STATIC=true is passed to a glibc build, we link statically and use ++a built-in userdb parser to resolve user and group names. ++ ++The PLACE= key is gone. It can be replaced by an ID= for a long time, because ++we walk up the chain of physical devices to find a match. ++ ++The KEY="" format supports '=', '==', '!=,' , '+=' now. This makes it ++easy to skip certain attribute matches without composing rules with weird ++character class negations like: ++ KERNEL="[!s][!c][!d]*" ++this can now be replaced with: ++ KERNEL!="scd*" ++The current simple '=' is still supported, and should work as it does today, ++but existing rules should be converted if possible, to be better readable. ++ ++We have new ENV{}== key now, to match against a maximum of 5 environment ++variables. ++ ++udevstart is its own binary again, because we don't need co carry this araound ++with every forked event. diff --cc src/udev/README index 000000000,000000000..38459c6b2 new file mode 100644 --- /dev/null +++ b/src/udev/README @@@ -1,0 -1,0 +1,101 @@@ ++udev - Linux userspace device management ++ ++Integrating udev in the system has complex dependencies and may differ from ++distribution to distribution. A system may not be able to boot up or work ++reliably without a properly installed udev version. The upstream udev project ++does not recommend replacing a distro's udev installation with the upstream ++version. ++ ++The upstream udev project's set of default rules may require a most recent ++kernel release to work properly. ++ ++Tools and rules shipped by udev are not public API and may change at any time. ++Never call any private tool in /usr/lib/udev from any external application; it ++might just go away in the next release. Access to udev information is only offered ++by udevadm and libudev. Tools and rules in /usr/lib/udev and the entire contents ++of the /run/udev directory are private to udev and do change whenever needed. ++ ++Requirements: ++ - Version 2.6.34 of the Linux kernel with sysfs, procfs, signalfd, inotify, ++ unix domain sockets, networking and hotplug enabled ++ ++ - Some architectures might need a later kernel, that supports accept4(), ++ or need to backport the accept4() syscall wiring in the kernel. ++ ++ - These options are required: ++ CONFIG_DEVTMPFS=y ++ CONFIG_HOTPLUG=y ++ CONFIG_INOTIFY_USER=y ++ CONFIG_NET=y ++ CONFIG_PROC_FS=y ++ CONFIG_SIGNALFD=y ++ CONFIG_SYSFS=y ++ CONFIG_SYSFS_DEPRECATED*=n ++ CONFIG_UEVENT_HELPER_PATH="" ++ ++ - These options might be needed: ++ CONFIG_BLK_DEV_BSG=y (SCSI devices) ++ CONFIG_TMPFS_POSIX_ACL=y (user ACLs for device nodes) ++ ++ - The /dev directory needs the 'devtmpfs' filesystem mounted. ++ Udev only manages the permissions and ownership of the ++ kernel-provided device nodes, and possibly creates additional symlinks. ++ ++ - Udev requires /run to be writable, which is usually done by mounting a ++ 'tmpfs' filesystem. ++ ++ - This version of udev does not work properly with the CONFIG_SYSFS_DEPRECATED* ++ option enabled. ++ ++ - The deprecated hotplug helper /sbin/hotplug should be disabled in the ++ kernel configuration, it is not needed today, and may render the system ++ unusable because the kernel may create too many processes in parallel ++ so that the system runs out-of-memory. ++ ++ - The proc filesystem must be mounted on /proc, and the sysfs filesystem must ++ be mounted at /sys. No other locations are supported by a standard ++ udev installation. ++ ++ - The default rule sset requires the following group names resolvable at udev startup: ++ disk, cdrom, floppy, tape, audio, video, lp, tty, dialout, and kmem. ++ Especially in LDAP setups, it is required that getgrnam() be able to resolve ++ these group names with only the rootfs mounted and while no network is ++ available. ++ ++ - Some udev extras have external dependencies like: ++ libglib2, usbutils, pciutils, and gperf. ++ All these extras can be disabled with configure options. ++ ++Setup: ++ - The udev daemon should be started to handle device events sent by the kernel. ++ During bootup, the events for already existing devices can be replayed, so ++ that they are configured by udev. The systemd service files contain the ++ needed commands to start the udev daemon and the coldplug sequence. ++ ++ - Restarting the daemon never applies any rules to existing devices. ++ ++ - New/changed rule files are picked up automatically; there is usually no ++ daemon restart or signal needed. ++ ++Operation: ++ - Based on events the kernel sends out on device creation/removal, udev ++ creates/removes device nodes and symlinks in the /dev directory. ++ ++ - All kernel events are matched against a set of specified rules, which ++ possibly hook into the event processing and load required kernel ++ modules to set up devices. For all devices, the kernel exports a major/minor ++ number; if needed, udev creates a device node with the default kernel ++ device name. If specified, udev applies permissions/ownership to the device ++ node, creates additional symlinks pointing to the node, and executes ++ programs to handle the device. ++ ++ - The events udev handles, and the information udev merges into its device ++ database, can be accessed with libudev: ++ http://www.kernel.org/pub/linux/utils/kernel/hotplug/libudev/ ++ http://www.kernel.org/pub/linux/utils/kernel/hotplug/gudev/ ++ ++For more details about udev and udev rules, see the udev man pages: ++ http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev/ ++ ++Please direct any comment/question to the linux-hotplug mailing list at: ++ linux-hotplug@vger.kernel.org diff --cc src/udev/TODO index 000000000,000000000..8b8b9c8f8 new file mode 100644 --- /dev/null +++ b/src/udev/TODO @@@ -1,0 -1,0 +1,22 @@@ ++ - find a way to tell udev to not cancel firmware ++ requests in initramfs ++ ++ - scsi_id -> sg3_utils? ++ ++ - make gtk-doc optional like kmod ++ ++ - move /usr/lib/udev/devices/ to tmpfiles ++ ++ - trigger --subsystem-match=usb/usb_device ++ ++ - kill rules_generator ++ ++ - have a $attrs{} ? ++ ++ - remove RUN+="socket:" ++ ++ - libudev.so.1 ++ - symbol versioning ++ - return object with *_unref() ++ - udev_monitor_from_socket() ++ - udev_queue_get_failed_list_entry() diff --cc src/udev/autogen.sh index 000000000,000000000..55ee03afd new file mode 100755 --- /dev/null +++ b/src/udev/autogen.sh @@@ -1,0 -1,0 +1,44 @@@ ++#!/bin/sh -e ++ ++if [ -f .git/hooks/pre-commit.sample -a ! -f .git/hooks/pre-commit ] ; then ++ cp -p .git/hooks/pre-commit.sample .git/hooks/pre-commit && \ ++ chmod +x .git/hooks/pre-commit && \ ++ echo "Activated pre-commit hook." ++fi ++ ++gtkdocize ++autoreconf --install --symlink ++ ++libdir() { ++ echo $(cd $1/$(gcc -print-multi-os-directory); pwd) ++} ++ ++args="$args \ ++--prefix=/usr \ ++--sysconfdir=/etc \ ++--libdir=$(libdir /usr/lib) \ ++--with-selinux \ ++--enable-gtk-doc" ++ ++if [ -L /bin ]; then ++args="$args \ ++--libexecdir=/usr/lib \ ++--with-systemdsystemunitdir=/usr/lib/systemd/system \ ++" ++else ++args="$args \ ++--with-rootprefix= \ ++---with-rootlibdir=$(libdir /lib) \ ++--bindir=/sbin \ ++--libexecdir=/lib \ ++--with-systemdsystemunitdir=/lib/systemd/system \ ++" ++fi ++ ++echo ++echo "----------------------------------------------------------------" ++echo "Initialized build system. For a common configuration please run:" ++echo "----------------------------------------------------------------" ++echo ++echo "./configure CFLAGS='-g -O1' $args" ++echo diff --cc src/udev/configure.ac index 000000000,000000000..b31b62f28 new file mode 100644 --- /dev/null +++ b/src/udev/configure.ac @@@ -1,0 -1,0 +1,242 @@@ ++AC_PREREQ(2.60) ++AC_INIT([udev], ++ [182], ++ [linux-hotplug@vger.kernel.org], ++ [udev], ++ [http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html]) ++AC_CONFIG_SRCDIR([src/udevd.c]) ++AC_CONFIG_AUX_DIR([build-aux]) ++AM_INIT_AUTOMAKE([check-news foreign 1.11 -Wall -Wno-portability silent-rules tar-pax no-dist-gzip dist-xz subdir-objects]) ++AC_USE_SYSTEM_EXTENSIONS ++AC_SYS_LARGEFILE ++AC_CONFIG_MACRO_DIR([m4]) ++AM_SILENT_RULES([yes]) ++LT_INIT([disable-static]) ++AC_PROG_AWK ++AC_PROG_SED ++AC_PROG_MKDIR_P ++GTK_DOC_CHECK(1.10) ++AC_PREFIX_DEFAULT([/usr]) ++ ++AC_PATH_PROG([XSLTPROC], [xsltproc]) ++AM_CONDITIONAL(HAVE_XSLTPROC, test x"$XSLTPROC" != x) ++ ++AC_SEARCH_LIBS([clock_gettime], [rt], [], [AC_MSG_ERROR([POSIX RT library not found])]) ++ ++PKG_CHECK_MODULES(BLKID, blkid >= 2.20) ++ ++PKG_CHECK_MODULES(KMOD, libkmod >= 5) ++ ++AC_ARG_WITH([rootprefix], ++ AS_HELP_STRING([--with-rootprefix=DIR], [rootfs directory prefix for config files and kernel modules]), ++ [], [with_rootprefix=${ac_default_prefix}]) ++AC_SUBST([rootprefix], [$with_rootprefix]) ++ ++AC_ARG_WITH([rootlibdir], ++ AS_HELP_STRING([--with-rootlibdir=DIR], [rootfs directory to install shared libraries]), ++ [], [with_rootlibdir=$libdir]) ++AC_SUBST([rootlib_execdir], [$with_rootlibdir]) ++ ++AC_ARG_WITH([selinux], ++ AS_HELP_STRING([--with-selinux], [enable SELinux support]), ++ [], [with_selinux=no]) ++AS_IF([test "x$with_selinux" = "xyes"], [ ++ LIBS_save=$LIBS ++ AC_CHECK_LIB(selinux, getprevcon, ++ [], ++ AC_MSG_ERROR([SELinux selected but libselinux not found])) ++ LIBS=$LIBS_save ++ SELINUX_LIBS="-lselinux -lsepol" ++ AC_DEFINE(WITH_SELINUX, [1] ,[SELinux support.]) ++]) ++AC_SUBST([SELINUX_LIBS]) ++AM_CONDITIONAL(WITH_SELINUX, [test "x$with_selinux" = "xyes"]) ++ ++AC_ARG_ENABLE([debug], ++ AS_HELP_STRING([--enable-debug], [enable debug messages @<:@default=disabled@:>@]), ++ [], [enable_debug=no]) ++AS_IF([test "x$enable_debug" = "xyes"], [ AC_DEFINE(ENABLE_DEBUG, [1], [Debug messages.]) ]) ++ ++AC_ARG_ENABLE([logging], ++ AS_HELP_STRING([--disable-logging], [disable system logging @<:@default=enabled@:>@]), ++ [], enable_logging=yes) ++AS_IF([test "x$enable_logging" = "xyes"], [ AC_DEFINE(ENABLE_LOGGING, [1], [System logging.]) ]) ++ ++AC_ARG_ENABLE([manpages], ++ AS_HELP_STRING([--disable-manpages], [disable man pages @<:@default=enabled@:>@]), ++ [], enable_manpages=yes) ++AM_CONDITIONAL([ENABLE_MANPAGES], [test "x$enable_manpages" = "xyes"]) ++ ++if test "x$cross_compiling" = "xno" ; then ++ AC_CHECK_FILES([/usr/share/pci.ids], [pciids=/usr/share/pci.ids]) ++ AC_CHECK_FILES([/usr/share/hwdata/pci.ids], [pciids=/usr/share/hwdata/pci.ids]) ++ AC_CHECK_FILES([/usr/share/misc/pci.ids], [pciids=/usr/share/misc/pci.ids]) ++fi ++ ++AC_ARG_WITH(usb-ids-path, ++ [AS_HELP_STRING([--with-usb-ids-path=DIR], [Path to usb.ids file])], ++ [USB_DATABASE=${withval}], ++ [if test -n "$usbids" ; then ++ USB_DATABASE="$usbids" ++ else ++ PKG_CHECK_MODULES(USBUTILS, usbutils >= 0.82) ++ AC_SUBST([USB_DATABASE], [$($PKG_CONFIG --variable=usbids usbutils)]) ++ fi]) ++AC_MSG_CHECKING([for USB database location]) ++AC_MSG_RESULT([$USB_DATABASE]) ++AC_SUBST(USB_DATABASE) ++ ++AC_ARG_WITH(pci-ids-path, ++ [AS_HELP_STRING([--with-pci-ids-path=DIR], [Path to pci.ids file])], ++ [PCI_DATABASE=${withval}], ++ [if test -n "$pciids" ; then ++ PCI_DATABASE="$pciids" ++ else ++ AC_MSG_ERROR([pci.ids not found, try --with-pci-ids-path=]) ++ fi]) ++AC_MSG_CHECKING([for PCI database location]) ++AC_MSG_RESULT([$PCI_DATABASE]) ++AC_SUBST(PCI_DATABASE) ++ ++AC_ARG_WITH(firmware-path, ++ AS_HELP_STRING([--with-firmware-path=DIR[[[:DIR[...]]]]], ++ [Firmware search path (default=ROOTPREFIX/lib/firmware/updates:ROOTPREFIX/lib/firmware)]), ++ [], [with_firmware_path="$rootprefix/lib/firmware/updates:$rootprefix/lib/firmware"]) ++OLD_IFS=$IFS ++IFS=: ++for i in $with_firmware_path; do ++ if test "x${FIRMWARE_PATH}" = "x"; then ++ FIRMWARE_PATH="\\\"${i}/\\\"" ++ else ++ FIRMWARE_PATH="${FIRMWARE_PATH}, \\\"${i}/\\\"" ++ fi ++done ++IFS=$OLD_IFS ++AC_SUBST([FIRMWARE_PATH], [$FIRMWARE_PATH]) ++ ++AC_ARG_WITH([systemdsystemunitdir], ++ AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]), ++ [], [with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)]) ++AS_IF([test "x$with_systemdsystemunitdir" != "xno"], [ AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir]) ]) ++AM_CONDITIONAL(WITH_SYSTEMD, [test -n "$with_systemdsystemunitdir" -a "x$with_systemdsystemunitdir" != "xno" ]) ++ ++# ------------------------------------------------------------------------------ ++# GUdev - libudev gobject interface ++# ------------------------------------------------------------------------------ ++AC_ARG_ENABLE([gudev], ++ AS_HELP_STRING([--disable-gudev], [disable Gobject libudev support @<:@default=enabled@:>@]), ++ [], [enable_gudev=yes]) ++AS_IF([test "x$enable_gudev" = "xyes"], [ PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.22.0 gobject-2.0 >= 2.22.0]) ]) ++ ++AC_ARG_ENABLE([introspection], ++ AS_HELP_STRING([--disable-introspection], [disable GObject introspection @<:@default=enabled@:>@]), ++ [], [enable_introspection=yes]) ++AS_IF([test "x$enable_introspection" = "xyes"], [ ++ PKG_CHECK_MODULES([INTROSPECTION], [gobject-introspection-1.0 >= 0.6.2]) ++ AC_DEFINE([ENABLE_INTROSPECTION], [1], [enable GObject introspection support]) ++ AC_SUBST([G_IR_SCANNER], [$($PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0)]) ++ AC_SUBST([G_IR_COMPILER], [$($PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0)]) ++ AC_SUBST([G_IR_GENERATE], [$($PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0)]) ++ AC_SUBST([GIRDIR], [$($PKG_CONFIG --define-variable=datadir=${datadir} --variable=girdir gobject-introspection-1.0)]) ++ AC_SUBST([GIRTYPELIBDIR], [$($PKG_CONFIG --define-variable=libdir=${libdir} --variable=typelibdir gobject-introspection-1.0)]) ++]) ++AM_CONDITIONAL([ENABLE_INTROSPECTION], [test "x$enable_introspection" = "xyes"]) ++AM_CONDITIONAL([ENABLE_GUDEV], [test "x$enable_gudev" = "xyes"]) ++ ++# ------------------------------------------------------------------------------ ++# keymap - map custom hardware's multimedia keys ++# ------------------------------------------------------------------------------ ++AC_ARG_ENABLE([keymap], ++ AS_HELP_STRING([--disable-keymap], [disable keymap fixup support @<:@default=enabled@:>@]), ++ [], [enable_keymap=yes]) ++AS_IF([test "x$enable_keymap" = "xyes"], [ ++ AC_PATH_PROG([GPERF], [gperf]) ++ if test -z "$GPERF"; then ++ AC_MSG_ERROR([gperf is needed]) ++ fi ++ ++ AC_CHECK_HEADER([linux/input.h], [:], AC_MSG_ERROR([kernel headers not found])) ++ AC_SUBST([INCLUDE_PREFIX], [$(echo '#include ' | eval $ac_cpp -E - | sed -n '/linux\/input.h/ {s:.*"\(.*\)/linux/input.h".*:\1:; p; q}')]) ++]) ++AM_CONDITIONAL([ENABLE_KEYMAP], [test "x$enable_keymap" = "xyes"]) ++ ++# ------------------------------------------------------------------------------ ++# mtd_probe - autoloads FTL module for mtd devices ++# ------------------------------------------------------------------------------ ++AC_ARG_ENABLE([mtd_probe], ++ AS_HELP_STRING([--disable-mtd_probe], [disable MTD support @<:@default=enabled@:>@]), ++ [], [enable_mtd_probe=yes]) ++AM_CONDITIONAL([ENABLE_MTD_PROBE], [test "x$enable_mtd_probe" = "xyes"]) ++ ++# ------------------------------------------------------------------------------ ++# rule_generator - persistent network and optical device rule generator ++# ------------------------------------------------------------------------------ ++AC_ARG_ENABLE([rule_generator], ++ AS_HELP_STRING([--enable-rule_generator], [enable persistent network + cdrom links support @<:@default=disabled@:>@]), ++ [], [enable_rule_generator=no]) ++AM_CONDITIONAL([ENABLE_RULE_GENERATOR], [test "x$enable_rule_generator" = "xyes"]) ++ ++# ------------------------------------------------------------------------------ ++# create_floppy_devices - historical floppy kernel device nodes (/dev/fd0h1440, ...) ++# ------------------------------------------------------------------------------ ++AC_ARG_ENABLE([floppy], ++ AS_HELP_STRING([--enable-floppy], [enable legacy floppy support @<:@default=disabled@:>@]), ++ [], [enable_floppy=no]) ++AM_CONDITIONAL([ENABLE_FLOPPY], [test "x$enable_floppy" = "xyes"]) ++ ++my_CFLAGS="-Wall \ ++-Wmissing-declarations -Wmissing-prototypes \ ++-Wnested-externs -Wpointer-arith \ ++-Wpointer-arith -Wsign-compare -Wchar-subscripts \ ++-Wstrict-prototypes -Wshadow \ ++-Wformat-security -Wtype-limits" ++AC_SUBST([my_CFLAGS]) ++ ++AC_CONFIG_HEADERS(config.h) ++AC_CONFIG_FILES([ ++ Makefile ++ src/docs/Makefile ++ src/docs/version.xml ++ src/gudev/docs/Makefile ++ src/gudev/docs/version.xml ++]) ++ ++AC_OUTPUT ++AC_MSG_RESULT([ ++ $PACKAGE $VERSION ++ ======== ++ ++ prefix: ${prefix} ++ rootprefix: ${rootprefix} ++ sysconfdir: ${sysconfdir} ++ bindir: ${bindir} ++ libdir: ${libdir} ++ rootlibdir: ${rootlib_execdir} ++ libexecdir: ${libexecdir} ++ datarootdir: ${datarootdir} ++ mandir: ${mandir} ++ includedir: ${includedir} ++ include_prefix: ${INCLUDE_PREFIX} ++ systemdsystemunitdir: ${systemdsystemunitdir} ++ firmware path: ${FIRMWARE_PATH} ++ usb.ids: ${USB_DATABASE} ++ pci.ids: ${PCI_DATABASE} ++ ++ compiler: ${CC} ++ cflags: ${CFLAGS} ++ ldflags: ${LDFLAGS} ++ xsltproc: ${XSLTPROC} ++ gperf: ${GPERF} ++ ++ logging: ${enable_logging} ++ debug: ${enable_debug} ++ selinux: ${with_selinux} ++ ++ man pages ${enable_manpages} ++ gudev: ${enable_gudev} ++ gintrospection: ${enable_introspection} ++ keymap: ${enable_keymap} ++ mtd_probe: ${enable_mtd_probe} ++ rule_generator: ${enable_rule_generator} ++ floppy: ${enable_floppy} ++]) diff --cc src/udev/m4/.gitignore index 000000000,000000000..0ca2c0372 new file mode 100644 --- /dev/null +++ b/src/udev/m4/.gitignore @@@ -1,0 -1,0 +1,4 @@@ ++libtool.m4 ++lt*m4 ++gtk-doc.m4 ++ diff --cc src/udev/rules/42-usb-hid-pm.rules index 000000000,d5d5897c3..d5d5897c3 mode 000000,100644..100644 --- a/src/udev/rules/42-usb-hid-pm.rules +++ b/src/udev/rules/42-usb-hid-pm.rules diff --cc src/udev/rules/50-udev-default.rules index 000000000,5ad787fc7..5ad787fc7 mode 000000,100644..100644 --- a/src/udev/rules/50-udev-default.rules +++ b/src/udev/rules/50-udev-default.rules diff --cc src/udev/rules/60-persistent-alsa.rules index 000000000,8154e2dbb..8154e2dbb mode 000000,100644..100644 --- a/src/udev/rules/60-persistent-alsa.rules +++ b/src/udev/rules/60-persistent-alsa.rules diff --cc src/udev/rules/60-persistent-input.rules index 000000000,fb798ddb0..fb798ddb0 mode 000000,100644..100644 --- a/src/udev/rules/60-persistent-input.rules +++ b/src/udev/rules/60-persistent-input.rules diff --cc src/udev/rules/60-persistent-serial.rules index 000000000,2948200c5..2948200c5 mode 000000,100644..100644 --- a/src/udev/rules/60-persistent-serial.rules +++ b/src/udev/rules/60-persistent-serial.rules diff --cc src/udev/rules/60-persistent-storage-tape.rules index 000000000,f2eabd92a..f2eabd92a mode 000000,100644..100644 --- a/src/udev/rules/60-persistent-storage-tape.rules +++ b/src/udev/rules/60-persistent-storage-tape.rules diff --cc src/udev/rules/60-persistent-storage.rules index 000000000,b74821edd..b74821edd mode 000000,100644..100644 --- a/src/udev/rules/60-persistent-storage.rules +++ b/src/udev/rules/60-persistent-storage.rules diff --cc src/udev/rules/75-net-description.rules index 000000000,ce57d48e8..ce57d48e8 mode 000000,100644..100644 --- a/src/udev/rules/75-net-description.rules +++ b/src/udev/rules/75-net-description.rules diff --cc src/udev/rules/75-tty-description.rules index 000000000,2e63e140c..2e63e140c mode 000000,100644..100644 --- a/src/udev/rules/75-tty-description.rules +++ b/src/udev/rules/75-tty-description.rules diff --cc src/udev/rules/78-sound-card.rules index 000000000,e56444189..e56444189 mode 000000,100644..100644 --- a/src/udev/rules/78-sound-card.rules +++ b/src/udev/rules/78-sound-card.rules diff --cc src/udev/rules/80-drivers.rules index 000000000,38ebfeb0e..38ebfeb0e mode 000000,100644..100644 --- a/src/udev/rules/80-drivers.rules +++ b/src/udev/rules/80-drivers.rules diff --cc src/udev/rules/95-udev-late.rules index 000000000,eca0faa5c..eca0faa5c mode 000000,100644..100644 --- a/src/udev/rules/95-udev-late.rules +++ b/src/udev/rules/95-udev-late.rules diff --cc src/udev/src/.gitignore index 000000000,000000000..beb8604bc new file mode 100644 --- /dev/null +++ b/src/udev/src/.gitignore @@@ -1,0 -1,0 +1,5 @@@ ++*.[78] ++*.html ++udev.pc ++libudev.pc ++udev*.service diff --cc src/udev/src/COPYING index 000000000,d2e31278b..d2e31278b mode 000000,100644..100644 --- a/src/udev/src/COPYING +++ b/src/udev/src/COPYING diff --cc src/udev/src/accelerometer/61-accelerometer.rules index 000000000,a6a2bfd08..a6a2bfd08 mode 000000,100644..100644 --- a/src/udev/src/accelerometer/61-accelerometer.rules +++ b/src/udev/src/accelerometer/61-accelerometer.rules diff --cc src/udev/src/accelerometer/accelerometer.c index 000000000,bc9715b26..bc9715b26 mode 000000,100644..100644 --- a/src/udev/src/accelerometer/accelerometer.c +++ b/src/udev/src/accelerometer/accelerometer.c diff --cc src/udev/src/ata_id/ata_id.c index 000000000,846a73b54..846a73b54 mode 000000,100644..100644 --- a/src/udev/src/ata_id/ata_id.c +++ b/src/udev/src/ata_id/ata_id.c diff --cc src/udev/src/cdrom_id/60-cdrom_id.rules index 000000000,6eaf76a72..6eaf76a72 mode 000000,100644..100644 --- a/src/udev/src/cdrom_id/60-cdrom_id.rules +++ b/src/udev/src/cdrom_id/60-cdrom_id.rules diff --cc src/udev/src/cdrom_id/cdrom_id.c index 000000000,f90d52ec9..f90d52ec9 mode 000000,100644..100644 --- a/src/udev/src/cdrom_id/cdrom_id.c +++ b/src/udev/src/cdrom_id/cdrom_id.c diff --cc src/udev/src/collect/collect.c index 000000000,076fe479e..076fe479e mode 000000,100644..100644 --- a/src/udev/src/collect/collect.c +++ b/src/udev/src/collect/collect.c diff --cc src/udev/src/docs/.gitignore index 000000000,dca700a99..dca700a99 mode 000000,100644..100644 --- a/src/udev/src/docs/.gitignore +++ b/src/udev/src/docs/.gitignore diff --cc src/udev/src/docs/Makefile.am index 000000000,07d06eb14..07d06eb14 mode 000000,100644..100644 --- a/src/udev/src/docs/Makefile.am +++ b/src/udev/src/docs/Makefile.am diff --cc src/udev/src/docs/libudev-docs.xml index 000000000,b7feb4552..b7feb4552 mode 000000,100644..100644 --- a/src/udev/src/docs/libudev-docs.xml +++ b/src/udev/src/docs/libudev-docs.xml diff --cc src/udev/src/docs/libudev-sections.txt index 000000000,15c3e934b..15c3e934b mode 000000,100644..100644 --- a/src/udev/src/docs/libudev-sections.txt +++ b/src/udev/src/docs/libudev-sections.txt diff --cc src/udev/src/docs/libudev.types index 000000000,e69de29bb..e69de29bb mode 000000,100644..100644 --- a/src/udev/src/docs/libudev.types +++ b/src/udev/src/docs/libudev.types diff --cc src/udev/src/docs/version.xml.in index 000000000,d78bda934..d78bda934 mode 000000,100644..100644 --- a/src/udev/src/docs/version.xml.in +++ b/src/udev/src/docs/version.xml.in diff --cc src/udev/src/floppy/60-floppy.rules index 000000000,53e4a9e59..53e4a9e59 mode 000000,100644..100644 --- a/src/udev/src/floppy/60-floppy.rules +++ b/src/udev/src/floppy/60-floppy.rules diff --cc src/udev/src/floppy/create_floppy_devices.c index 000000000,f71ef0d80..f71ef0d80 mode 000000,100644..100644 --- a/src/udev/src/floppy/create_floppy_devices.c +++ b/src/udev/src/floppy/create_floppy_devices.c diff --cc src/udev/src/gudev/.gitignore index 000000000,d20fa523e..d20fa523e mode 000000,100644..100644 --- a/src/udev/src/gudev/.gitignore +++ b/src/udev/src/gudev/.gitignore diff --cc src/udev/src/gudev/COPYING index 000000000,da97db2bd..da97db2bd mode 000000,100644..100644 --- a/src/udev/src/gudev/COPYING +++ b/src/udev/src/gudev/COPYING diff --cc src/udev/src/gudev/docs/.gitignore index 000000000,8eada6d40..8eada6d40 mode 000000,100644..100644 --- a/src/udev/src/gudev/docs/.gitignore +++ b/src/udev/src/gudev/docs/.gitignore diff --cc src/udev/src/gudev/docs/Makefile.am index 000000000,cfe696c50..cfe696c50 mode 000000,100644..100644 --- a/src/udev/src/gudev/docs/Makefile.am +++ b/src/udev/src/gudev/docs/Makefile.am diff --cc src/udev/src/gudev/docs/gudev-docs.xml index 000000000,f876c3bc0..f876c3bc0 mode 000000,100644..100644 --- a/src/udev/src/gudev/docs/gudev-docs.xml +++ b/src/udev/src/gudev/docs/gudev-docs.xml diff --cc src/udev/src/gudev/docs/gudev-sections.txt index 000000000,213e1a746..213e1a746 mode 000000,100644..100644 --- a/src/udev/src/gudev/docs/gudev-sections.txt +++ b/src/udev/src/gudev/docs/gudev-sections.txt diff --cc src/udev/src/gudev/docs/gudev.types index 000000000,a89857a04..a89857a04 mode 000000,100644..100644 --- a/src/udev/src/gudev/docs/gudev.types +++ b/src/udev/src/gudev/docs/gudev.types diff --cc src/udev/src/gudev/docs/version.xml.in index 000000000,d78bda934..d78bda934 mode 000000,100644..100644 --- a/src/udev/src/gudev/docs/version.xml.in +++ b/src/udev/src/gudev/docs/version.xml.in diff --cc src/udev/src/gudev/gjs-example.js index 000000000,5586fd6a6..5586fd6a6 mode 000000,100755..100755 --- a/src/udev/src/gudev/gjs-example.js +++ b/src/udev/src/gudev/gjs-example.js diff --cc src/udev/src/gudev/gudev-1.0.pc.in index 000000000,058262d76..058262d76 mode 000000,100644..100644 --- a/src/udev/src/gudev/gudev-1.0.pc.in +++ b/src/udev/src/gudev/gudev-1.0.pc.in diff --cc src/udev/src/gudev/gudev.h index 000000000,a31346081..a31346081 mode 000000,100644..100644 --- a/src/udev/src/gudev/gudev.h +++ b/src/udev/src/gudev/gudev.h diff --cc src/udev/src/gudev/gudevclient.c index 000000000,2b94102ac..2b94102ac mode 000000,100644..100644 --- a/src/udev/src/gudev/gudevclient.c +++ b/src/udev/src/gudev/gudevclient.c diff --cc src/udev/src/gudev/gudevclient.h index 000000000,b425d03d4..b425d03d4 mode 000000,100644..100644 --- a/src/udev/src/gudev/gudevclient.h +++ b/src/udev/src/gudev/gudevclient.h diff --cc src/udev/src/gudev/gudevdevice.c index 000000000,62a26f99b..62a26f99b mode 000000,100644..100644 --- a/src/udev/src/gudev/gudevdevice.c +++ b/src/udev/src/gudev/gudevdevice.c diff --cc src/udev/src/gudev/gudevdevice.h index 000000000,d4873bad0..d4873bad0 mode 000000,100644..100644 --- a/src/udev/src/gudev/gudevdevice.h +++ b/src/udev/src/gudev/gudevdevice.h diff --cc src/udev/src/gudev/gudevenumerator.c index 000000000,db0907462..db0907462 mode 000000,100644..100644 --- a/src/udev/src/gudev/gudevenumerator.c +++ b/src/udev/src/gudev/gudevenumerator.c diff --cc src/udev/src/gudev/gudevenumerator.h index 000000000,3fddccf57..3fddccf57 mode 000000,100644..100644 --- a/src/udev/src/gudev/gudevenumerator.h +++ b/src/udev/src/gudev/gudevenumerator.h diff --cc src/udev/src/gudev/gudevenums.h index 000000000,c3a0aa874..c3a0aa874 mode 000000,100644..100644 --- a/src/udev/src/gudev/gudevenums.h +++ b/src/udev/src/gudev/gudevenums.h diff --cc src/udev/src/gudev/gudevenumtypes.c.template index 000000000,fc30b39e2..fc30b39e2 mode 000000,100644..100644 --- a/src/udev/src/gudev/gudevenumtypes.c.template +++ b/src/udev/src/gudev/gudevenumtypes.c.template diff --cc src/udev/src/gudev/gudevenumtypes.h.template index 000000000,d0ab3393e..d0ab3393e mode 000000,100644..100644 --- a/src/udev/src/gudev/gudevenumtypes.h.template +++ b/src/udev/src/gudev/gudevenumtypes.h.template diff --cc src/udev/src/gudev/gudevmarshal.list index 000000000,7e665999e..7e665999e mode 000000,100644..100644 --- a/src/udev/src/gudev/gudevmarshal.list +++ b/src/udev/src/gudev/gudevmarshal.list diff --cc src/udev/src/gudev/gudevprivate.h index 000000000,8866f52b8..8866f52b8 mode 000000,100644..100644 --- a/src/udev/src/gudev/gudevprivate.h +++ b/src/udev/src/gudev/gudevprivate.h diff --cc src/udev/src/gudev/gudevtypes.h index 000000000,888482783..888482783 mode 000000,100644..100644 --- a/src/udev/src/gudev/gudevtypes.h +++ b/src/udev/src/gudev/gudevtypes.h diff --cc src/udev/src/gudev/seed-example-enum.js index 000000000,66206ad80..66206ad80 mode 000000,100755..100755 --- a/src/udev/src/gudev/seed-example-enum.js +++ b/src/udev/src/gudev/seed-example-enum.js diff --cc src/udev/src/gudev/seed-example.js index 000000000,e2ac324d2..e2ac324d2 mode 000000,100755..100755 --- a/src/udev/src/gudev/seed-example.js +++ b/src/udev/src/gudev/seed-example.js diff --cc src/udev/src/keymap/.gitignore index 000000000,4567584f4..4567584f4 mode 000000,100644..100644 --- a/src/udev/src/keymap/.gitignore +++ b/src/udev/src/keymap/.gitignore diff --cc src/udev/src/keymap/95-keyboard-force-release.rules index 000000000,03d56e8aa..03d56e8aa mode 000000,100644..100644 --- a/src/udev/src/keymap/95-keyboard-force-release.rules +++ b/src/udev/src/keymap/95-keyboard-force-release.rules diff --cc src/udev/src/keymap/95-keymap.rules index 000000000,bbf311a17..bbf311a17 mode 000000,100644..100644 --- a/src/udev/src/keymap/95-keymap.rules +++ b/src/udev/src/keymap/95-keymap.rules diff --cc src/udev/src/keymap/README.keymap.txt index 000000000,52d50ed2d..52d50ed2d mode 000000,100644..100644 --- a/src/udev/src/keymap/README.keymap.txt +++ b/src/udev/src/keymap/README.keymap.txt diff --cc src/udev/src/keymap/check-keymaps.sh index 000000000,405168c66..405168c66 mode 000000,100755..100755 --- a/src/udev/src/keymap/check-keymaps.sh +++ b/src/udev/src/keymap/check-keymaps.sh diff --cc src/udev/src/keymap/findkeyboards index 000000000,9ce27429b..9ce27429b mode 000000,100755..100755 --- a/src/udev/src/keymap/findkeyboards +++ b/src/udev/src/keymap/findkeyboards diff --cc src/udev/src/keymap/force-release-maps/common-volume-keys index 000000000,3a7654d73..3a7654d73 mode 000000,100644..100644 --- a/src/udev/src/keymap/force-release-maps/common-volume-keys +++ b/src/udev/src/keymap/force-release-maps/common-volume-keys diff --cc src/udev/src/keymap/force-release-maps/dell-touchpad index 000000000,18e9bdee6..18e9bdee6 mode 000000,100644..100644 --- a/src/udev/src/keymap/force-release-maps/dell-touchpad +++ b/src/udev/src/keymap/force-release-maps/dell-touchpad diff --cc src/udev/src/keymap/force-release-maps/hp-other index 000000000,662137009..662137009 mode 000000,100644..100644 --- a/src/udev/src/keymap/force-release-maps/hp-other +++ b/src/udev/src/keymap/force-release-maps/hp-other diff --cc src/udev/src/keymap/force-release-maps/samsung-90x3a index 000000000,65707effb..65707effb mode 000000,100644..100644 --- a/src/udev/src/keymap/force-release-maps/samsung-90x3a +++ b/src/udev/src/keymap/force-release-maps/samsung-90x3a diff --cc src/udev/src/keymap/force-release-maps/samsung-other index 000000000,c51123a0b..c51123a0b mode 000000,100644..100644 --- a/src/udev/src/keymap/force-release-maps/samsung-other +++ b/src/udev/src/keymap/force-release-maps/samsung-other diff --cc src/udev/src/keymap/keyboard-force-release.sh.in index 000000000,dd040cebc..dd040cebc mode 000000,100755..100755 --- a/src/udev/src/keymap/keyboard-force-release.sh.in +++ b/src/udev/src/keymap/keyboard-force-release.sh.in diff --cc src/udev/src/keymap/keymap.c index 000000000,92ec67b3a..92ec67b3a mode 000000,100644..100644 --- a/src/udev/src/keymap/keymap.c +++ b/src/udev/src/keymap/keymap.c diff --cc src/udev/src/keymap/keymaps/acer index 000000000,4e7c297de..4e7c297de mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/acer +++ b/src/udev/src/keymap/keymaps/acer diff --cc src/udev/src/keymap/keymaps/acer-aspire_5720 index 000000000,1496d63a5..1496d63a5 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/acer-aspire_5720 +++ b/src/udev/src/keymap/keymaps/acer-aspire_5720 diff --cc src/udev/src/keymap/keymaps/acer-aspire_5920g index 000000000,633c4e854..633c4e854 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/acer-aspire_5920g +++ b/src/udev/src/keymap/keymaps/acer-aspire_5920g diff --cc src/udev/src/keymap/keymaps/acer-aspire_6920 index 000000000,699c954b4..699c954b4 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/acer-aspire_6920 +++ b/src/udev/src/keymap/keymaps/acer-aspire_6920 diff --cc src/udev/src/keymap/keymaps/acer-aspire_8930 index 000000000,fb27bfb4f..fb27bfb4f mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/acer-aspire_8930 +++ b/src/udev/src/keymap/keymaps/acer-aspire_8930 diff --cc src/udev/src/keymap/keymaps/acer-travelmate_c300 index 000000000,bfef4cf86..bfef4cf86 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/acer-travelmate_c300 +++ b/src/udev/src/keymap/keymaps/acer-travelmate_c300 diff --cc src/udev/src/keymap/keymaps/asus index 000000000,2a5995f98..2a5995f98 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/asus +++ b/src/udev/src/keymap/keymaps/asus diff --cc src/udev/src/keymap/keymaps/compaq-e_evo index 000000000,5fbc573aa..5fbc573aa mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/compaq-e_evo +++ b/src/udev/src/keymap/keymaps/compaq-e_evo diff --cc src/udev/src/keymap/keymaps/dell index 000000000,4f907b3ee..4f907b3ee mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/dell +++ b/src/udev/src/keymap/keymaps/dell diff --cc src/udev/src/keymap/keymaps/dell-latitude-xt2 index 000000000,39872f559..39872f559 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/dell-latitude-xt2 +++ b/src/udev/src/keymap/keymaps/dell-latitude-xt2 diff --cc src/udev/src/keymap/keymaps/everex-xt5000 index 000000000,4823a832f..4823a832f mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/everex-xt5000 +++ b/src/udev/src/keymap/keymaps/everex-xt5000 diff --cc src/udev/src/keymap/keymaps/fujitsu-amilo_li_2732 index 000000000,9b8b36a17..9b8b36a17 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/fujitsu-amilo_li_2732 +++ b/src/udev/src/keymap/keymaps/fujitsu-amilo_li_2732 diff --cc src/udev/src/keymap/keymaps/fujitsu-amilo_pa_2548 index 000000000,f7b0c5244..f7b0c5244 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/fujitsu-amilo_pa_2548 +++ b/src/udev/src/keymap/keymaps/fujitsu-amilo_pa_2548 diff --cc src/udev/src/keymap/keymaps/fujitsu-amilo_pro_edition_v3505 index 000000000,d2e38cbb2..d2e38cbb2 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/fujitsu-amilo_pro_edition_v3505 +++ b/src/udev/src/keymap/keymaps/fujitsu-amilo_pro_edition_v3505 diff --cc src/udev/src/keymap/keymaps/fujitsu-amilo_pro_v3205 index 000000000,43e3199d5..43e3199d5 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/fujitsu-amilo_pro_v3205 +++ b/src/udev/src/keymap/keymaps/fujitsu-amilo_pro_v3205 diff --cc src/udev/src/keymap/keymaps/fujitsu-amilo_si_1520 index 000000000,1419bd9b5..1419bd9b5 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/fujitsu-amilo_si_1520 +++ b/src/udev/src/keymap/keymaps/fujitsu-amilo_si_1520 diff --cc src/udev/src/keymap/keymaps/fujitsu-esprimo_mobile_v5 index 000000000,d3d056b36..d3d056b36 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/fujitsu-esprimo_mobile_v5 +++ b/src/udev/src/keymap/keymaps/fujitsu-esprimo_mobile_v5 diff --cc src/udev/src/keymap/keymaps/fujitsu-esprimo_mobile_v6 index 000000000,52c70c50c..52c70c50c mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/fujitsu-esprimo_mobile_v6 +++ b/src/udev/src/keymap/keymaps/fujitsu-esprimo_mobile_v6 diff --cc src/udev/src/keymap/keymaps/genius-slimstar-320 index 000000000,d0a3656dd..d0a3656dd mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/genius-slimstar-320 +++ b/src/udev/src/keymap/keymaps/genius-slimstar-320 diff --cc src/udev/src/keymap/keymaps/hewlett-packard index 000000000,4461fa2ce..4461fa2ce mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/hewlett-packard +++ b/src/udev/src/keymap/keymaps/hewlett-packard diff --cc src/udev/src/keymap/keymaps/hewlett-packard-2510p_2530p index 000000000,41ad2e9b5..41ad2e9b5 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/hewlett-packard-2510p_2530p +++ b/src/udev/src/keymap/keymaps/hewlett-packard-2510p_2530p diff --cc src/udev/src/keymap/keymaps/hewlett-packard-compaq_elitebook index 000000000,42007c548..42007c548 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/hewlett-packard-compaq_elitebook +++ b/src/udev/src/keymap/keymaps/hewlett-packard-compaq_elitebook diff --cc src/udev/src/keymap/keymaps/hewlett-packard-pavilion index 000000000,3d3cefc8e..3d3cefc8e mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/hewlett-packard-pavilion +++ b/src/udev/src/keymap/keymaps/hewlett-packard-pavilion diff --cc src/udev/src/keymap/keymaps/hewlett-packard-presario-2100 index 000000000,1df39dcbd..1df39dcbd mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/hewlett-packard-presario-2100 +++ b/src/udev/src/keymap/keymaps/hewlett-packard-presario-2100 diff --cc src/udev/src/keymap/keymaps/hewlett-packard-tablet index 000000000,d19005ab9..d19005ab9 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/hewlett-packard-tablet +++ b/src/udev/src/keymap/keymaps/hewlett-packard-tablet diff --cc src/udev/src/keymap/keymaps/hewlett-packard-tx2 index 000000000,36a690fcf..36a690fcf mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/hewlett-packard-tx2 +++ b/src/udev/src/keymap/keymaps/hewlett-packard-tx2 diff --cc src/udev/src/keymap/keymaps/ibm-thinkpad-usb-keyboard-trackpoint index 000000000,027e50bf8..027e50bf8 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/ibm-thinkpad-usb-keyboard-trackpoint +++ b/src/udev/src/keymap/keymaps/ibm-thinkpad-usb-keyboard-trackpoint diff --cc src/udev/src/keymap/keymaps/inventec-symphony_6.0_7.0 index 000000000,4a8b4ba5a..4a8b4ba5a mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/inventec-symphony_6.0_7.0 +++ b/src/udev/src/keymap/keymaps/inventec-symphony_6.0_7.0 diff --cc src/udev/src/keymap/keymaps/lenovo-3000 index 000000000,5bd165654..5bd165654 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/lenovo-3000 +++ b/src/udev/src/keymap/keymaps/lenovo-3000 diff --cc src/udev/src/keymap/keymaps/lenovo-ideapad index 000000000,fc339839f..fc339839f mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/lenovo-ideapad +++ b/src/udev/src/keymap/keymaps/lenovo-ideapad diff --cc src/udev/src/keymap/keymaps/lenovo-thinkpad-usb-keyboard-trackpoint index 000000000,47e8846a6..47e8846a6 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/lenovo-thinkpad-usb-keyboard-trackpoint +++ b/src/udev/src/keymap/keymaps/lenovo-thinkpad-usb-keyboard-trackpoint diff --cc src/udev/src/keymap/keymaps/lenovo-thinkpad_x200_tablet index 000000000,31ea3b2c7..31ea3b2c7 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/lenovo-thinkpad_x200_tablet +++ b/src/udev/src/keymap/keymaps/lenovo-thinkpad_x200_tablet diff --cc src/udev/src/keymap/keymaps/lenovo-thinkpad_x6_tablet index 000000000,6fd16b566..6fd16b566 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/lenovo-thinkpad_x6_tablet +++ b/src/udev/src/keymap/keymaps/lenovo-thinkpad_x6_tablet diff --cc src/udev/src/keymap/keymaps/lg-x110 index 000000000,ba08cba3f..ba08cba3f mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/lg-x110 +++ b/src/udev/src/keymap/keymaps/lg-x110 diff --cc src/udev/src/keymap/keymaps/logitech-wave index 000000000,caa5d5d31..caa5d5d31 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/logitech-wave +++ b/src/udev/src/keymap/keymaps/logitech-wave diff --cc src/udev/src/keymap/keymaps/logitech-wave-cordless index 000000000,a10dad5e4..a10dad5e4 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/logitech-wave-cordless +++ b/src/udev/src/keymap/keymaps/logitech-wave-cordless diff --cc src/udev/src/keymap/keymaps/logitech-wave-pro-cordless index 000000000,e7aa02206..e7aa02206 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/logitech-wave-pro-cordless +++ b/src/udev/src/keymap/keymaps/logitech-wave-pro-cordless diff --cc src/udev/src/keymap/keymaps/maxdata-pro_7000 index 000000000,c0e4f77af..c0e4f77af mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/maxdata-pro_7000 +++ b/src/udev/src/keymap/keymaps/maxdata-pro_7000 diff --cc src/udev/src/keymap/keymaps/medion-fid2060 index 000000000,5a76c7679..5a76c7679 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/medion-fid2060 +++ b/src/udev/src/keymap/keymaps/medion-fid2060 diff --cc src/udev/src/keymap/keymaps/medionnb-a555 index 000000000,c3b5dfa60..c3b5dfa60 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/medionnb-a555 +++ b/src/udev/src/keymap/keymaps/medionnb-a555 diff --cc src/udev/src/keymap/keymaps/micro-star index 000000000,4a438698e..4a438698e mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/micro-star +++ b/src/udev/src/keymap/keymaps/micro-star diff --cc src/udev/src/keymap/keymaps/module-asus-w3j index 000000000,773e0b3e8..773e0b3e8 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/module-asus-w3j +++ b/src/udev/src/keymap/keymaps/module-asus-w3j diff --cc src/udev/src/keymap/keymaps/module-ibm index 000000000,a92dfa250..a92dfa250 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/module-ibm +++ b/src/udev/src/keymap/keymaps/module-ibm diff --cc src/udev/src/keymap/keymaps/module-lenovo index 000000000,8e3888309..8e3888309 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/module-lenovo +++ b/src/udev/src/keymap/keymaps/module-lenovo diff --cc src/udev/src/keymap/keymaps/module-sony index 000000000,7c000131d..7c000131d mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/module-sony +++ b/src/udev/src/keymap/keymaps/module-sony diff --cc src/udev/src/keymap/keymaps/module-sony-old index 000000000,596a34258..596a34258 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/module-sony-old +++ b/src/udev/src/keymap/keymaps/module-sony-old diff --cc src/udev/src/keymap/keymaps/module-sony-vgn index 000000000,c8ba00151..c8ba00151 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/module-sony-vgn +++ b/src/udev/src/keymap/keymaps/module-sony-vgn diff --cc src/udev/src/keymap/keymaps/olpc-xo index 000000000,34434a121..34434a121 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/olpc-xo +++ b/src/udev/src/keymap/keymaps/olpc-xo diff --cc src/udev/src/keymap/keymaps/onkyo index 000000000,ee864ade4..ee864ade4 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/onkyo +++ b/src/udev/src/keymap/keymaps/onkyo diff --cc src/udev/src/keymap/keymaps/oqo-model2 index 000000000,b7f4851ab..b7f4851ab mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/oqo-model2 +++ b/src/udev/src/keymap/keymaps/oqo-model2 diff --cc src/udev/src/keymap/keymaps/samsung-90x3a index 000000000,8b65eb6d0..8b65eb6d0 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/samsung-90x3a +++ b/src/udev/src/keymap/keymaps/samsung-90x3a diff --cc src/udev/src/keymap/keymaps/samsung-other index 000000000,3ac0c2f10..3ac0c2f10 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/samsung-other +++ b/src/udev/src/keymap/keymaps/samsung-other diff --cc src/udev/src/keymap/keymaps/samsung-sq1us index 000000000,ea2141ef8..ea2141ef8 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/samsung-sq1us +++ b/src/udev/src/keymap/keymaps/samsung-sq1us diff --cc src/udev/src/keymap/keymaps/samsung-sx20s index 000000000,9d954ee41..9d954ee41 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/samsung-sx20s +++ b/src/udev/src/keymap/keymaps/samsung-sx20s diff --cc src/udev/src/keymap/keymaps/toshiba-satellite_a100 index 000000000,22007be71..22007be71 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/toshiba-satellite_a100 +++ b/src/udev/src/keymap/keymaps/toshiba-satellite_a100 diff --cc src/udev/src/keymap/keymaps/toshiba-satellite_a110 index 000000000,142940935..142940935 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/toshiba-satellite_a110 +++ b/src/udev/src/keymap/keymaps/toshiba-satellite_a110 diff --cc src/udev/src/keymap/keymaps/toshiba-satellite_m30x index 000000000,ae8e34941..ae8e34941 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/toshiba-satellite_m30x +++ b/src/udev/src/keymap/keymaps/toshiba-satellite_m30x diff --cc src/udev/src/keymap/keymaps/zepto-znote index 000000000,cf72fda47..cf72fda47 mode 000000,100644..100644 --- a/src/udev/src/keymap/keymaps/zepto-znote +++ b/src/udev/src/keymap/keymaps/zepto-znote diff --cc src/udev/src/libudev-device-private.c index 000000000,13fdb8eb5..13fdb8eb5 mode 000000,100644..100644 --- a/src/udev/src/libudev-device-private.c +++ b/src/udev/src/libudev-device-private.c diff --cc src/udev/src/libudev-device.c index 000000000,10f28b8cd..10f28b8cd mode 000000,100644..100644 --- a/src/udev/src/libudev-device.c +++ b/src/udev/src/libudev-device.c diff --cc src/udev/src/libudev-enumerate.c index 000000000,034d96feb..034d96feb mode 000000,100644..100644 --- a/src/udev/src/libudev-enumerate.c +++ b/src/udev/src/libudev-enumerate.c diff --cc src/udev/src/libudev-list.c index 000000000,4bdef35ae..4bdef35ae mode 000000,100644..100644 --- a/src/udev/src/libudev-list.c +++ b/src/udev/src/libudev-list.c diff --cc src/udev/src/libudev-monitor.c index 000000000,77dc55572..77dc55572 mode 000000,100644..100644 --- a/src/udev/src/libudev-monitor.c +++ b/src/udev/src/libudev-monitor.c diff --cc src/udev/src/libudev-private.h index 000000000,5f5c64a63..5f5c64a63 mode 000000,100644..100644 --- a/src/udev/src/libudev-private.h +++ b/src/udev/src/libudev-private.h diff --cc src/udev/src/libudev-queue-private.c index 000000000,71771950a..71771950a mode 000000,100644..100644 --- a/src/udev/src/libudev-queue-private.c +++ b/src/udev/src/libudev-queue-private.c diff --cc src/udev/src/libudev-queue.c index 000000000,0e82cb6ae..0e82cb6ae mode 000000,100644..100644 --- a/src/udev/src/libudev-queue.c +++ b/src/udev/src/libudev-queue.c diff --cc src/udev/src/libudev-selinux-private.c index 000000000,0f2a617b1..0f2a617b1 mode 000000,100644..100644 --- a/src/udev/src/libudev-selinux-private.c +++ b/src/udev/src/libudev-selinux-private.c diff --cc src/udev/src/libudev-util-private.c index 000000000,08f0ba222..08f0ba222 mode 000000,100644..100644 --- a/src/udev/src/libudev-util-private.c +++ b/src/udev/src/libudev-util-private.c diff --cc src/udev/src/libudev-util.c index 000000000,7e345f0fb..7e345f0fb mode 000000,100644..100644 --- a/src/udev/src/libudev-util.c +++ b/src/udev/src/libudev-util.c diff --cc src/udev/src/libudev.c index 000000000,d954daef6..d954daef6 mode 000000,100644..100644 --- a/src/udev/src/libudev.c +++ b/src/udev/src/libudev.c diff --cc src/udev/src/libudev.h index 000000000,10e098d4f..10e098d4f mode 000000,100644..100644 --- a/src/udev/src/libudev.h +++ b/src/udev/src/libudev.h diff --cc src/udev/src/libudev.pc.in index 000000000,c9a47fc9b..c9a47fc9b mode 000000,100644..100644 --- a/src/udev/src/libudev.pc.in +++ b/src/udev/src/libudev.pc.in diff --cc src/udev/src/mtd_probe/75-probe_mtd.rules index 000000000,c0e083978..c0e083978 mode 000000,100644..100644 --- a/src/udev/src/mtd_probe/75-probe_mtd.rules +++ b/src/udev/src/mtd_probe/75-probe_mtd.rules diff --cc src/udev/src/mtd_probe/mtd_probe.c index 000000000,1aa08d385..1aa08d385 mode 000000,100644..100644 --- a/src/udev/src/mtd_probe/mtd_probe.c +++ b/src/udev/src/mtd_probe/mtd_probe.c diff --cc src/udev/src/mtd_probe/mtd_probe.h index 000000000,2a37ede57..2a37ede57 mode 000000,100644..100644 --- a/src/udev/src/mtd_probe/mtd_probe.h +++ b/src/udev/src/mtd_probe/mtd_probe.h diff --cc src/udev/src/mtd_probe/probe_smartmedia.c index 000000000,b3cdefc63..b3cdefc63 mode 000000,100644..100644 --- a/src/udev/src/mtd_probe/probe_smartmedia.c +++ b/src/udev/src/mtd_probe/probe_smartmedia.c diff --cc src/udev/src/rule_generator/75-cd-aliases-generator.rules index 000000000,e6da0101d..e6da0101d mode 000000,100644..100644 --- a/src/udev/src/rule_generator/75-cd-aliases-generator.rules +++ b/src/udev/src/rule_generator/75-cd-aliases-generator.rules diff --cc src/udev/src/rule_generator/75-persistent-net-generator.rules index 000000000,4f8057347..4f8057347 mode 000000,100644..100644 --- a/src/udev/src/rule_generator/75-persistent-net-generator.rules +++ b/src/udev/src/rule_generator/75-persistent-net-generator.rules diff --cc src/udev/src/rule_generator/rule_generator.functions index 000000000,2eec1b6ab..2eec1b6ab mode 000000,100644..100644 --- a/src/udev/src/rule_generator/rule_generator.functions +++ b/src/udev/src/rule_generator/rule_generator.functions diff --cc src/udev/src/rule_generator/write_cd_rules index 000000000,645b9cd52..645b9cd52 mode 000000,100644..100644 --- a/src/udev/src/rule_generator/write_cd_rules +++ b/src/udev/src/rule_generator/write_cd_rules diff --cc src/udev/src/rule_generator/write_net_rules index 000000000,bcea4b09d..bcea4b09d mode 000000,100644..100644 --- a/src/udev/src/rule_generator/write_net_rules +++ b/src/udev/src/rule_generator/write_net_rules diff --cc src/udev/src/scsi_id/.gitignore index 000000000,6aebddd80..6aebddd80 mode 000000,100644..100644 --- a/src/udev/src/scsi_id/.gitignore +++ b/src/udev/src/scsi_id/.gitignore diff --cc src/udev/src/scsi_id/README index 000000000,9cfe73991..9cfe73991 mode 000000,100644..100644 --- a/src/udev/src/scsi_id/README +++ b/src/udev/src/scsi_id/README diff --cc src/udev/src/scsi_id/scsi.h index 000000000,c423cac57..c423cac57 mode 000000,100644..100644 --- a/src/udev/src/scsi_id/scsi.h +++ b/src/udev/src/scsi_id/scsi.h diff --cc src/udev/src/scsi_id/scsi_id.8 index 000000000,0d4dba914..0d4dba914 mode 000000,100644..100644 --- a/src/udev/src/scsi_id/scsi_id.8 +++ b/src/udev/src/scsi_id/scsi_id.8 diff --cc src/udev/src/scsi_id/scsi_id.c index 000000000,9bb0d7f53..9bb0d7f53 mode 000000,100644..100644 --- a/src/udev/src/scsi_id/scsi_id.c +++ b/src/udev/src/scsi_id/scsi_id.c diff --cc src/udev/src/scsi_id/scsi_id.h index 000000000,828a98305..828a98305 mode 000000,100644..100644 --- a/src/udev/src/scsi_id/scsi_id.h +++ b/src/udev/src/scsi_id/scsi_id.h diff --cc src/udev/src/scsi_id/scsi_serial.c index 000000000,f1d63f40c..f1d63f40c mode 000000,100644..100644 --- a/src/udev/src/scsi_id/scsi_serial.c +++ b/src/udev/src/scsi_id/scsi_serial.c diff --cc src/udev/src/sd-daemon.c index 000000000,000000000..763e079b4 new file mode 100644 --- /dev/null +++ b/src/udev/src/sd-daemon.c @@@ -1,0 -1,0 +1,530 @@@ ++/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ ++ ++/*** ++ Copyright 2010 Lennart Poettering ++ ++ Permission is hereby granted, free of charge, to any person ++ obtaining a copy of this software and associated documentation files ++ (the "Software"), to deal in the Software without restriction, ++ including without limitation the rights to use, copy, modify, merge, ++ publish, distribute, sublicense, and/or sell copies of the Software, ++ and to permit persons to whom the Software is furnished to do so, ++ subject to the following conditions: ++ ++ The above copyright notice and this permission notice shall be ++ included in all copies or substantial portions of the Software. ++ ++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS ++ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ++ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN ++ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE ++ SOFTWARE. ++***/ ++ ++#ifndef _GNU_SOURCE ++#define _GNU_SOURCE ++#endif ++ ++#include ++#include ++#include ++#include ++#ifdef __BIONIC__ ++#include ++#else ++#include ++#endif ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#if defined(__linux__) ++#include ++#endif ++ ++#include "sd-daemon.h" ++ ++#if (__GNUC__ >= 4) ++#ifdef SD_EXPORT_SYMBOLS ++/* Export symbols */ ++#define _sd_export_ __attribute__ ((visibility("default"))) ++#else ++/* Don't export the symbols */ ++#define _sd_export_ __attribute__ ((visibility("hidden"))) ++#endif ++#else ++#define _sd_export_ ++#endif ++ ++_sd_export_ int sd_listen_fds(int unset_environment) { ++ ++#if defined(DISABLE_SYSTEMD) || !defined(__linux__) ++ return 0; ++#else ++ int r, fd; ++ const char *e; ++ char *p = NULL; ++ unsigned long l; ++ ++ if (!(e = getenv("LISTEN_PID"))) { ++ r = 0; ++ goto finish; ++ } ++ ++ errno = 0; ++ l = strtoul(e, &p, 10); ++ ++ if (errno != 0) { ++ r = -errno; ++ goto finish; ++ } ++ ++ if (!p || *p || l <= 0) { ++ r = -EINVAL; ++ goto finish; ++ } ++ ++ /* Is this for us? */ ++ if (getpid() != (pid_t) l) { ++ r = 0; ++ goto finish; ++ } ++ ++ if (!(e = getenv("LISTEN_FDS"))) { ++ r = 0; ++ goto finish; ++ } ++ ++ errno = 0; ++ l = strtoul(e, &p, 10); ++ ++ if (errno != 0) { ++ r = -errno; ++ goto finish; ++ } ++ ++ if (!p || *p) { ++ r = -EINVAL; ++ goto finish; ++ } ++ ++ for (fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + (int) l; fd ++) { ++ int flags; ++ ++ if ((flags = fcntl(fd, F_GETFD)) < 0) { ++ r = -errno; ++ goto finish; ++ } ++ ++ if (flags & FD_CLOEXEC) ++ continue; ++ ++ if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) < 0) { ++ r = -errno; ++ goto finish; ++ } ++ } ++ ++ r = (int) l; ++ ++finish: ++ if (unset_environment) { ++ unsetenv("LISTEN_PID"); ++ unsetenv("LISTEN_FDS"); ++ } ++ ++ return r; ++#endif ++} ++ ++_sd_export_ int sd_is_fifo(int fd, const char *path) { ++ struct stat st_fd; ++ ++ if (fd < 0) ++ return -EINVAL; ++ ++ memset(&st_fd, 0, sizeof(st_fd)); ++ if (fstat(fd, &st_fd) < 0) ++ return -errno; ++ ++ if (!S_ISFIFO(st_fd.st_mode)) ++ return 0; ++ ++ if (path) { ++ struct stat st_path; ++ ++ memset(&st_path, 0, sizeof(st_path)); ++ if (stat(path, &st_path) < 0) { ++ ++ if (errno == ENOENT || errno == ENOTDIR) ++ return 0; ++ ++ return -errno; ++ } ++ ++ return ++ st_path.st_dev == st_fd.st_dev && ++ st_path.st_ino == st_fd.st_ino; ++ } ++ ++ return 1; ++} ++ ++_sd_export_ int sd_is_special(int fd, const char *path) { ++ struct stat st_fd; ++ ++ if (fd < 0) ++ return -EINVAL; ++ ++ if (fstat(fd, &st_fd) < 0) ++ return -errno; ++ ++ if (!S_ISREG(st_fd.st_mode) && !S_ISCHR(st_fd.st_mode)) ++ return 0; ++ ++ if (path) { ++ struct stat st_path; ++ ++ if (stat(path, &st_path) < 0) { ++ ++ if (errno == ENOENT || errno == ENOTDIR) ++ return 0; ++ ++ return -errno; ++ } ++ ++ if (S_ISREG(st_fd.st_mode) && S_ISREG(st_path.st_mode)) ++ return ++ st_path.st_dev == st_fd.st_dev && ++ st_path.st_ino == st_fd.st_ino; ++ else if (S_ISCHR(st_fd.st_mode) && S_ISCHR(st_path.st_mode)) ++ return st_path.st_rdev == st_fd.st_rdev; ++ else ++ return 0; ++ } ++ ++ return 1; ++} ++ ++static int sd_is_socket_internal(int fd, int type, int listening) { ++ struct stat st_fd; ++ ++ if (fd < 0 || type < 0) ++ return -EINVAL; ++ ++ if (fstat(fd, &st_fd) < 0) ++ return -errno; ++ ++ if (!S_ISSOCK(st_fd.st_mode)) ++ return 0; ++ ++ if (type != 0) { ++ int other_type = 0; ++ socklen_t l = sizeof(other_type); ++ ++ if (getsockopt(fd, SOL_SOCKET, SO_TYPE, &other_type, &l) < 0) ++ return -errno; ++ ++ if (l != sizeof(other_type)) ++ return -EINVAL; ++ ++ if (other_type != type) ++ return 0; ++ } ++ ++ if (listening >= 0) { ++ int accepting = 0; ++ socklen_t l = sizeof(accepting); ++ ++ if (getsockopt(fd, SOL_SOCKET, SO_ACCEPTCONN, &accepting, &l) < 0) ++ return -errno; ++ ++ if (l != sizeof(accepting)) ++ return -EINVAL; ++ ++ if (!accepting != !listening) ++ return 0; ++ } ++ ++ return 1; ++} ++ ++union sockaddr_union { ++ struct sockaddr sa; ++ struct sockaddr_in in4; ++ struct sockaddr_in6 in6; ++ struct sockaddr_un un; ++ struct sockaddr_storage storage; ++}; ++ ++_sd_export_ int sd_is_socket(int fd, int family, int type, int listening) { ++ int r; ++ ++ if (family < 0) ++ return -EINVAL; ++ ++ if ((r = sd_is_socket_internal(fd, type, listening)) <= 0) ++ return r; ++ ++ if (family > 0) { ++ union sockaddr_union sockaddr; ++ socklen_t l; ++ ++ memset(&sockaddr, 0, sizeof(sockaddr)); ++ l = sizeof(sockaddr); ++ ++ if (getsockname(fd, &sockaddr.sa, &l) < 0) ++ return -errno; ++ ++ if (l < sizeof(sa_family_t)) ++ return -EINVAL; ++ ++ return sockaddr.sa.sa_family == family; ++ } ++ ++ return 1; ++} ++ ++_sd_export_ int sd_is_socket_inet(int fd, int family, int type, int listening, uint16_t port) { ++ union sockaddr_union sockaddr; ++ socklen_t l; ++ int r; ++ ++ if (family != 0 && family != AF_INET && family != AF_INET6) ++ return -EINVAL; ++ ++ if ((r = sd_is_socket_internal(fd, type, listening)) <= 0) ++ return r; ++ ++ memset(&sockaddr, 0, sizeof(sockaddr)); ++ l = sizeof(sockaddr); ++ ++ if (getsockname(fd, &sockaddr.sa, &l) < 0) ++ return -errno; ++ ++ if (l < sizeof(sa_family_t)) ++ return -EINVAL; ++ ++ if (sockaddr.sa.sa_family != AF_INET && ++ sockaddr.sa.sa_family != AF_INET6) ++ return 0; ++ ++ if (family > 0) ++ if (sockaddr.sa.sa_family != family) ++ return 0; ++ ++ if (port > 0) { ++ if (sockaddr.sa.sa_family == AF_INET) { ++ if (l < sizeof(struct sockaddr_in)) ++ return -EINVAL; ++ ++ return htons(port) == sockaddr.in4.sin_port; ++ } else { ++ if (l < sizeof(struct sockaddr_in6)) ++ return -EINVAL; ++ ++ return htons(port) == sockaddr.in6.sin6_port; ++ } ++ } ++ ++ return 1; ++} ++ ++_sd_export_ int sd_is_socket_unix(int fd, int type, int listening, const char *path, size_t length) { ++ union sockaddr_union sockaddr; ++ socklen_t l; ++ int r; ++ ++ if ((r = sd_is_socket_internal(fd, type, listening)) <= 0) ++ return r; ++ ++ memset(&sockaddr, 0, sizeof(sockaddr)); ++ l = sizeof(sockaddr); ++ ++ if (getsockname(fd, &sockaddr.sa, &l) < 0) ++ return -errno; ++ ++ if (l < sizeof(sa_family_t)) ++ return -EINVAL; ++ ++ if (sockaddr.sa.sa_family != AF_UNIX) ++ return 0; ++ ++ if (path) { ++ if (length <= 0) ++ length = strlen(path); ++ ++ if (length <= 0) ++ /* Unnamed socket */ ++ return l == offsetof(struct sockaddr_un, sun_path); ++ ++ if (path[0]) ++ /* Normal path socket */ ++ return ++ (l >= offsetof(struct sockaddr_un, sun_path) + length + 1) && ++ memcmp(path, sockaddr.un.sun_path, length+1) == 0; ++ else ++ /* Abstract namespace socket */ ++ return ++ (l == offsetof(struct sockaddr_un, sun_path) + length) && ++ memcmp(path, sockaddr.un.sun_path, length) == 0; ++ } ++ ++ return 1; ++} ++ ++_sd_export_ int sd_is_mq(int fd, const char *path) { ++#if !defined(__linux__) ++ return 0; ++#else ++ struct mq_attr attr; ++ ++ if (fd < 0) ++ return -EINVAL; ++ ++ if (mq_getattr(fd, &attr) < 0) ++ return -errno; ++ ++ if (path) { ++ char fpath[PATH_MAX]; ++ struct stat a, b; ++ ++ if (path[0] != '/') ++ return -EINVAL; ++ ++ if (fstat(fd, &a) < 0) ++ return -errno; ++ ++ strncpy(stpcpy(fpath, "/dev/mqueue"), path, sizeof(fpath) - 12); ++ fpath[sizeof(fpath)-1] = 0; ++ ++ if (stat(fpath, &b) < 0) ++ return -errno; ++ ++ if (a.st_dev != b.st_dev || ++ a.st_ino != b.st_ino) ++ return 0; ++ } ++ ++ return 1; ++#endif ++} ++ ++_sd_export_ int sd_notify(int unset_environment, const char *state) { ++#if defined(DISABLE_SYSTEMD) || !defined(__linux__) || !defined(SOCK_CLOEXEC) ++ return 0; ++#else ++ int fd = -1, r; ++ struct msghdr msghdr; ++ struct iovec iovec; ++ union sockaddr_union sockaddr; ++ const char *e; ++ ++ if (!state) { ++ r = -EINVAL; ++ goto finish; ++ } ++ ++ if (!(e = getenv("NOTIFY_SOCKET"))) ++ return 0; ++ ++ /* Must be an abstract socket, or an absolute path */ ++ if ((e[0] != '@' && e[0] != '/') || e[1] == 0) { ++ r = -EINVAL; ++ goto finish; ++ } ++ ++ if ((fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0)) < 0) { ++ r = -errno; ++ goto finish; ++ } ++ ++ memset(&sockaddr, 0, sizeof(sockaddr)); ++ sockaddr.sa.sa_family = AF_UNIX; ++ strncpy(sockaddr.un.sun_path, e, sizeof(sockaddr.un.sun_path)); ++ ++ if (sockaddr.un.sun_path[0] == '@') ++ sockaddr.un.sun_path[0] = 0; ++ ++ memset(&iovec, 0, sizeof(iovec)); ++ iovec.iov_base = (char*) state; ++ iovec.iov_len = strlen(state); ++ ++ memset(&msghdr, 0, sizeof(msghdr)); ++ msghdr.msg_name = &sockaddr; ++ msghdr.msg_namelen = offsetof(struct sockaddr_un, sun_path) + strlen(e); ++ ++ if (msghdr.msg_namelen > sizeof(struct sockaddr_un)) ++ msghdr.msg_namelen = sizeof(struct sockaddr_un); ++ ++ msghdr.msg_iov = &iovec; ++ msghdr.msg_iovlen = 1; ++ ++ if (sendmsg(fd, &msghdr, MSG_NOSIGNAL) < 0) { ++ r = -errno; ++ goto finish; ++ } ++ ++ r = 1; ++ ++finish: ++ if (unset_environment) ++ unsetenv("NOTIFY_SOCKET"); ++ ++ if (fd >= 0) ++ close(fd); ++ ++ return r; ++#endif ++} ++ ++_sd_export_ int sd_notifyf(int unset_environment, const char *format, ...) { ++#if defined(DISABLE_SYSTEMD) || !defined(__linux__) ++ return 0; ++#else ++ va_list ap; ++ char *p = NULL; ++ int r; ++ ++ va_start(ap, format); ++ r = vasprintf(&p, format, ap); ++ va_end(ap); ++ ++ if (r < 0 || !p) ++ return -ENOMEM; ++ ++ r = sd_notify(unset_environment, p); ++ free(p); ++ ++ return r; ++#endif ++} ++ ++_sd_export_ int sd_booted(void) { ++#if defined(DISABLE_SYSTEMD) || !defined(__linux__) ++ return 0; ++#else ++ ++ struct stat a, b; ++ ++ /* We simply test whether the systemd cgroup hierarchy is ++ * mounted */ ++ ++ if (lstat("/sys/fs/cgroup", &a) < 0) ++ return 0; ++ ++ if (lstat("/sys/fs/cgroup/systemd", &b) < 0) ++ return 0; ++ ++ return a.st_dev != b.st_dev; ++#endif ++} diff --cc src/udev/src/sd-daemon.h index 000000000,000000000..fe51159ee new file mode 100644 --- /dev/null +++ b/src/udev/src/sd-daemon.h @@@ -1,0 -1,0 +1,282 @@@ ++/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ ++ ++#ifndef foosddaemonhfoo ++#define foosddaemonhfoo ++ ++/*** ++ Copyright 2010 Lennart Poettering ++ ++ Permission is hereby granted, free of charge, to any person ++ obtaining a copy of this software and associated documentation files ++ (the "Software"), to deal in the Software without restriction, ++ including without limitation the rights to use, copy, modify, merge, ++ publish, distribute, sublicense, and/or sell copies of the Software, ++ and to permit persons to whom the Software is furnished to do so, ++ subject to the following conditions: ++ ++ The above copyright notice and this permission notice shall be ++ included in all copies or substantial portions of the Software. ++ ++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, ++ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF ++ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND ++ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS ++ BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ++ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN ++ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE ++ SOFTWARE. ++***/ ++ ++#include ++#include ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/* ++ Reference implementation of a few systemd related interfaces for ++ writing daemons. These interfaces are trivial to implement. To ++ simplify porting we provide this reference implementation. ++ Applications are welcome to reimplement the algorithms described ++ here if they do not want to include these two source files. ++ ++ The following functionality is provided: ++ ++ - Support for logging with log levels on stderr ++ - File descriptor passing for socket-based activation ++ - Daemon startup and status notification ++ - Detection of systemd boots ++ ++ You may compile this with -DDISABLE_SYSTEMD to disable systemd ++ support. This makes all those calls NOPs that are directly related to ++ systemd (i.e. only sd_is_xxx() will stay useful). ++ ++ Since this is drop-in code we don't want any of our symbols to be ++ exported in any case. Hence we declare hidden visibility for all of ++ them. ++ ++ You may find an up-to-date version of these source files online: ++ ++ http://cgit.freedesktop.org/systemd/systemd/plain/src/systemd/sd-daemon.h ++ http://cgit.freedesktop.org/systemd/systemd/plain/src/sd-daemon.c ++ ++ This should compile on non-Linux systems, too, but with the ++ exception of the sd_is_xxx() calls all functions will become NOPs. ++ ++ See sd-daemon(7) for more information. ++*/ ++ ++#ifndef _sd_printf_attr_ ++#if __GNUC__ >= 4 ++#define _sd_printf_attr_(a,b) __attribute__ ((format (printf, a, b))) ++#else ++#define _sd_printf_attr_(a,b) ++#endif ++#endif ++ ++/* ++ Log levels for usage on stderr: ++ ++ fprintf(stderr, SD_NOTICE "Hello World!\n"); ++ ++ This is similar to printk() usage in the kernel. ++*/ ++#define SD_EMERG "<0>" /* system is unusable */ ++#define SD_ALERT "<1>" /* action must be taken immediately */ ++#define SD_CRIT "<2>" /* critical conditions */ ++#define SD_ERR "<3>" /* error conditions */ ++#define SD_WARNING "<4>" /* warning conditions */ ++#define SD_NOTICE "<5>" /* normal but significant condition */ ++#define SD_INFO "<6>" /* informational */ ++#define SD_DEBUG "<7>" /* debug-level messages */ ++ ++/* The first passed file descriptor is fd 3 */ ++#define SD_LISTEN_FDS_START 3 ++ ++/* ++ Returns how many file descriptors have been passed, or a negative ++ errno code on failure. Optionally, removes the $LISTEN_FDS and ++ $LISTEN_PID file descriptors from the environment (recommended, but ++ problematic in threaded environments). If r is the return value of ++ this function you'll find the file descriptors passed as fds ++ SD_LISTEN_FDS_START to SD_LISTEN_FDS_START+r-1. Returns a negative ++ errno style error code on failure. This function call ensures that ++ the FD_CLOEXEC flag is set for the passed file descriptors, to make ++ sure they are not passed on to child processes. If FD_CLOEXEC shall ++ not be set, the caller needs to unset it after this call for all file ++ descriptors that are used. ++ ++ See sd_listen_fds(3) for more information. ++*/ ++int sd_listen_fds(int unset_environment); ++ ++/* ++ Helper call for identifying a passed file descriptor. Returns 1 if ++ the file descriptor is a FIFO in the file system stored under the ++ specified path, 0 otherwise. If path is NULL a path name check will ++ not be done and the call only verifies if the file descriptor ++ refers to a FIFO. Returns a negative errno style error code on ++ failure. ++ ++ See sd_is_fifo(3) for more information. ++*/ ++int sd_is_fifo(int fd, const char *path); ++ ++/* ++ Helper call for identifying a passed file descriptor. Returns 1 if ++ the file descriptor is a special character device on the file ++ system stored under the specified path, 0 otherwise. ++ If path is NULL a path name check will not be done and the call ++ only verifies if the file descriptor refers to a special character. ++ Returns a negative errno style error code on failure. ++ ++ See sd_is_special(3) for more information. ++*/ ++int sd_is_special(int fd, const char *path); ++ ++/* ++ Helper call for identifying a passed file descriptor. Returns 1 if ++ the file descriptor is a socket of the specified family (AF_INET, ++ ...) and type (SOCK_DGRAM, SOCK_STREAM, ...), 0 otherwise. If ++ family is 0 a socket family check will not be done. If type is 0 a ++ socket type check will not be done and the call only verifies if ++ the file descriptor refers to a socket. If listening is > 0 it is ++ verified that the socket is in listening mode. (i.e. listen() has ++ been called) If listening is == 0 it is verified that the socket is ++ not in listening mode. If listening is < 0 no listening mode check ++ is done. Returns a negative errno style error code on failure. ++ ++ See sd_is_socket(3) for more information. ++*/ ++int sd_is_socket(int fd, int family, int type, int listening); ++ ++/* ++ Helper call for identifying a passed file descriptor. Returns 1 if ++ the file descriptor is an Internet socket, of the specified family ++ (either AF_INET or AF_INET6) and the specified type (SOCK_DGRAM, ++ SOCK_STREAM, ...), 0 otherwise. If version is 0 a protocol version ++ check is not done. If type is 0 a socket type check will not be ++ done. If port is 0 a socket port check will not be done. The ++ listening flag is used the same way as in sd_is_socket(). Returns a ++ negative errno style error code on failure. ++ ++ See sd_is_socket_inet(3) for more information. ++*/ ++int sd_is_socket_inet(int fd, int family, int type, int listening, uint16_t port); ++ ++/* ++ Helper call for identifying a passed file descriptor. Returns 1 if ++ the file descriptor is an AF_UNIX socket of the specified type ++ (SOCK_DGRAM, SOCK_STREAM, ...) and path, 0 otherwise. If type is 0 ++ a socket type check will not be done. If path is NULL a socket path ++ check will not be done. For normal AF_UNIX sockets set length to ++ 0. For abstract namespace sockets set length to the length of the ++ socket name (including the initial 0 byte), and pass the full ++ socket path in path (including the initial 0 byte). The listening ++ flag is used the same way as in sd_is_socket(). Returns a negative ++ errno style error code on failure. ++ ++ See sd_is_socket_unix(3) for more information. ++*/ ++int sd_is_socket_unix(int fd, int type, int listening, const char *path, size_t length); ++ ++/* ++ Helper call for identifying a passed file descriptor. Returns 1 if ++ the file descriptor is a POSIX Message Queue of the specified name, ++ 0 otherwise. If path is NULL a message queue name check is not ++ done. Returns a negative errno style error code on failure. ++*/ ++int sd_is_mq(int fd, const char *path); ++ ++/* ++ Informs systemd about changed daemon state. This takes a number of ++ newline separated environment-style variable assignments in a ++ string. The following variables are known: ++ ++ READY=1 Tells systemd that daemon startup is finished (only ++ relevant for services of Type=notify). The passed ++ argument is a boolean "1" or "0". Since there is ++ little value in signaling non-readiness the only ++ value daemons should send is "READY=1". ++ ++ STATUS=... Passes a single-line status string back to systemd ++ that describes the daemon state. This is free-from ++ and can be used for various purposes: general state ++ feedback, fsck-like programs could pass completion ++ percentages and failing programs could pass a human ++ readable error message. Example: "STATUS=Completed ++ 66% of file system check..." ++ ++ ERRNO=... If a daemon fails, the errno-style error code, ++ formatted as string. Example: "ERRNO=2" for ENOENT. ++ ++ BUSERROR=... If a daemon fails, the D-Bus error-style error ++ code. Example: "BUSERROR=org.freedesktop.DBus.Error.TimedOut" ++ ++ MAINPID=... The main pid of a daemon, in case systemd did not ++ fork off the process itself. Example: "MAINPID=4711" ++ ++ WATCHDOG=1 Tells systemd to update the watchdog timestamp. ++ Services using this feature should do this in ++ regular intervals. A watchdog framework can use the ++ timestamps to detect failed services. ++ ++ Daemons can choose to send additional variables. However, it is ++ recommended to prefix variable names not listed above with X_. ++ ++ Returns a negative errno-style error code on failure. Returns > 0 ++ if systemd could be notified, 0 if it couldn't possibly because ++ systemd is not running. ++ ++ Example: When a daemon finished starting up, it could issue this ++ call to notify systemd about it: ++ ++ sd_notify(0, "READY=1"); ++ ++ See sd_notifyf() for more complete examples. ++ ++ See sd_notify(3) for more information. ++*/ ++int sd_notify(int unset_environment, const char *state); ++ ++/* ++ Similar to sd_notify() but takes a format string. ++ ++ Example 1: A daemon could send the following after initialization: ++ ++ sd_notifyf(0, "READY=1\n" ++ "STATUS=Processing requests...\n" ++ "MAINPID=%lu", ++ (unsigned long) getpid()); ++ ++ Example 2: A daemon could send the following shortly before ++ exiting, on failure: ++ ++ sd_notifyf(0, "STATUS=Failed to start up: %s\n" ++ "ERRNO=%i", ++ strerror(errno), ++ errno); ++ ++ See sd_notifyf(3) for more information. ++*/ ++int sd_notifyf(int unset_environment, const char *format, ...) _sd_printf_attr_(2,3); ++ ++/* ++ Returns > 0 if the system was booted with systemd. Returns < 0 on ++ error. Returns 0 if the system was not booted with systemd. Note ++ that all of the functions above handle non-systemd boots just ++ fine. You should NOT protect them with a call to this function. Also ++ note that this function checks whether the system, not the user ++ session is controlled by systemd. However the functions above work ++ for both user and system services. ++ ++ See sd_booted(3) for more information. ++*/ ++int sd_booted(void); ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif diff --cc src/udev/src/test-libudev.c index 000000000,6161fb3e3..6161fb3e3 mode 000000,100644..100644 --- a/src/udev/src/test-libudev.c +++ b/src/udev/src/test-libudev.c diff --cc src/udev/src/test-udev.c index 000000000,c9712e974..c9712e974 mode 000000,100644..100644 --- a/src/udev/src/test-udev.c +++ b/src/udev/src/test-udev.c diff --cc src/udev/src/udev-builtin-blkid.c index 000000000,e57f03e5a..e57f03e5a mode 000000,100644..100644 --- a/src/udev/src/udev-builtin-blkid.c +++ b/src/udev/src/udev-builtin-blkid.c diff --cc src/udev/src/udev-builtin-firmware.c index 000000000,d212c64b4..d212c64b4 mode 000000,100644..100644 --- a/src/udev/src/udev-builtin-firmware.c +++ b/src/udev/src/udev-builtin-firmware.c diff --cc src/udev/src/udev-builtin-hwdb.c index 000000000,aa996f375..aa996f375 mode 000000,100644..100644 --- a/src/udev/src/udev-builtin-hwdb.c +++ b/src/udev/src/udev-builtin-hwdb.c diff --cc src/udev/src/udev-builtin-input_id.c index 000000000,a062ef7c7..a062ef7c7 mode 000000,100644..100644 --- a/src/udev/src/udev-builtin-input_id.c +++ b/src/udev/src/udev-builtin-input_id.c diff --cc src/udev/src/udev-builtin-kmod.c index 000000000,57e813f86..57e813f86 mode 000000,100644..100644 --- a/src/udev/src/udev-builtin-kmod.c +++ b/src/udev/src/udev-builtin-kmod.c diff --cc src/udev/src/udev-builtin-path_id.c index 000000000,a8559d2dd..a8559d2dd mode 000000,100644..100644 --- a/src/udev/src/udev-builtin-path_id.c +++ b/src/udev/src/udev-builtin-path_id.c diff --cc src/udev/src/udev-builtin-usb_id.c index 000000000,85828e32d..85828e32d mode 000000,100644..100644 --- a/src/udev/src/udev-builtin-usb_id.c +++ b/src/udev/src/udev-builtin-usb_id.c diff --cc src/udev/src/udev-builtin.c index 000000000,5bc5fa68f..5bc5fa68f mode 000000,100644..100644 --- a/src/udev/src/udev-builtin.c +++ b/src/udev/src/udev-builtin.c diff --cc src/udev/src/udev-control.socket index 000000000,f80f77442..f80f77442 mode 000000,100644..100644 --- a/src/udev/src/udev-control.socket +++ b/src/udev/src/udev-control.socket diff --cc src/udev/src/udev-ctrl.c index 000000000,5556f1a77..5556f1a77 mode 000000,100644..100644 --- a/src/udev/src/udev-ctrl.c +++ b/src/udev/src/udev-ctrl.c diff --cc src/udev/src/udev-event.c index 000000000,45dd77ba2..45dd77ba2 mode 000000,100644..100644 --- a/src/udev/src/udev-event.c +++ b/src/udev/src/udev-event.c diff --cc src/udev/src/udev-kernel.socket index 000000000,23fa9d5e1..23fa9d5e1 mode 000000,100644..100644 --- a/src/udev/src/udev-kernel.socket +++ b/src/udev/src/udev-kernel.socket diff --cc src/udev/src/udev-node.c index 000000000,7a01a479e..7a01a479e mode 000000,100644..100644 --- a/src/udev/src/udev-node.c +++ b/src/udev/src/udev-node.c diff --cc src/udev/src/udev-rules.c index 000000000,8a85eae71..8a85eae71 mode 000000,100644..100644 --- a/src/udev/src/udev-rules.c +++ b/src/udev/src/udev-rules.c diff --cc src/udev/src/udev-settle.service.in index 000000000,b0a4964f7..b0a4964f7 mode 000000,100644..100644 --- a/src/udev/src/udev-settle.service.in +++ b/src/udev/src/udev-settle.service.in diff --cc src/udev/src/udev-trigger.service.in index 000000000,cd81945c8..cd81945c8 mode 000000,100644..100644 --- a/src/udev/src/udev-trigger.service.in +++ b/src/udev/src/udev-trigger.service.in diff --cc src/udev/src/udev-watch.c index 000000000,228d18fed..228d18fed mode 000000,100644..100644 --- a/src/udev/src/udev-watch.c +++ b/src/udev/src/udev-watch.c diff --cc src/udev/src/udev.conf index 000000000,f39253eb6..f39253eb6 mode 000000,100644..100644 --- a/src/udev/src/udev.conf +++ b/src/udev/src/udev.conf diff --cc src/udev/src/udev.h index 000000000,bc051c9b6..bc051c9b6 mode 000000,100644..100644 --- a/src/udev/src/udev.h +++ b/src/udev/src/udev.h diff --cc src/udev/src/udev.pc.in index 000000000,0b04c02ef..0b04c02ef mode 000000,100644..100644 --- a/src/udev/src/udev.pc.in +++ b/src/udev/src/udev.pc.in diff --cc src/udev/src/udev.service.in index 000000000,c27eb1baf..c27eb1baf mode 000000,100644..100644 --- a/src/udev/src/udev.service.in +++ b/src/udev/src/udev.service.in diff --cc src/udev/src/udev.xml index 000000000,8eb583a82..8eb583a82 mode 000000,100644..100644 --- a/src/udev/src/udev.xml +++ b/src/udev/src/udev.xml diff --cc src/udev/src/udevadm-control.c index 000000000,cafa21494..cafa21494 mode 000000,100644..100644 --- a/src/udev/src/udevadm-control.c +++ b/src/udev/src/udevadm-control.c diff --cc src/udev/src/udevadm-info.c index 000000000,ee9b59fea..ee9b59fea mode 000000,100644..100644 --- a/src/udev/src/udevadm-info.c +++ b/src/udev/src/udevadm-info.c diff --cc src/udev/src/udevadm-monitor.c index 000000000,5997dd8e1..5997dd8e1 mode 000000,100644..100644 --- a/src/udev/src/udevadm-monitor.c +++ b/src/udev/src/udevadm-monitor.c diff --cc src/udev/src/udevadm-settle.c index 000000000,b168defd9..b168defd9 mode 000000,100644..100644 --- a/src/udev/src/udevadm-settle.c +++ b/src/udev/src/udevadm-settle.c diff --cc src/udev/src/udevadm-test-builtin.c index 000000000,3a49f7ce9..3a49f7ce9 mode 000000,100644..100644 --- a/src/udev/src/udevadm-test-builtin.c +++ b/src/udev/src/udevadm-test-builtin.c diff --cc src/udev/src/udevadm-test.c index 000000000,6275cff89..6275cff89 mode 000000,100644..100644 --- a/src/udev/src/udevadm-test.c +++ b/src/udev/src/udevadm-test.c diff --cc src/udev/src/udevadm-trigger.c index 000000000,3cce23dfb..3cce23dfb mode 000000,100644..100644 --- a/src/udev/src/udevadm-trigger.c +++ b/src/udev/src/udevadm-trigger.c diff --cc src/udev/src/udevadm.c index 000000000,224ece0bb..224ece0bb mode 000000,100644..100644 --- a/src/udev/src/udevadm.c +++ b/src/udev/src/udevadm.c diff --cc src/udev/src/udevadm.xml index 000000000,455ce80ca..455ce80ca mode 000000,100644..100644 --- a/src/udev/src/udevadm.xml +++ b/src/udev/src/udevadm.xml diff --cc src/udev/src/udevd.c index 000000000,170221790..170221790 mode 000000,100644..100644 --- a/src/udev/src/udevd.c +++ b/src/udev/src/udevd.c diff --cc src/udev/src/udevd.xml index 000000000,c516eb979..c516eb979 mode 000000,100644..100644 --- a/src/udev/src/udevd.xml +++ b/src/udev/src/udevd.xml diff --cc src/udev/src/v4l_id/60-persistent-v4l.rules index 000000000,93c5ee8c2..93c5ee8c2 mode 000000,100644..100644 --- a/src/udev/src/v4l_id/60-persistent-v4l.rules +++ b/src/udev/src/v4l_id/60-persistent-v4l.rules diff --cc src/udev/src/v4l_id/v4l_id.c index 000000000,a2a80b5f4..a2a80b5f4 mode 000000,100644..100644 --- a/src/udev/src/v4l_id/v4l_id.c +++ b/src/udev/src/v4l_id/v4l_id.c diff --cc src/udev/test/.gitignore index 000000000,98fa88653..98fa88653 mode 000000,100644..100644 --- a/src/udev/test/.gitignore +++ b/src/udev/test/.gitignore diff --cc src/udev/test/rule-syntax-check.py index 000000000,ff1b63d07..ff1b63d07 mode 000000,100755..100755 --- a/src/udev/test/rule-syntax-check.py +++ b/src/udev/test/rule-syntax-check.py diff --cc src/udev/test/rules-test.sh index 000000000,1e224ff8b..1e224ff8b mode 000000,100755..100755 --- a/src/udev/test/rules-test.sh +++ b/src/udev/test/rules-test.sh diff --cc src/udev/test/sys.tar.xz index 000000000,49ee8027b..49ee8027b mode 000000,100644..100644 Binary files differ diff --cc src/udev/test/udev-test.pl index 000000000,0b379b0d9..0b379b0d9 mode 000000,100755..100755 --- a/src/udev/test/udev-test.pl +++ b/src/udev/test/udev-test.pl