1
0
mirror of https://github.com/systemd/systemd.git synced 2024-12-22 17:35:35 +03:00

remove gudev and gtk-doc

The library moved to:
  https://git.gnome.org/browse/libgudev/
This commit is contained in:
Kay Sievers 2015-06-03 00:09:23 +02:00
parent 7e518afab9
commit 2375607039
45 changed files with 7 additions and 3675 deletions

1
.gitignore vendored
View File

@ -38,7 +38,6 @@
/defined
/exported
/exported-*
/gtk-doc.make
/hostnamectl
/install-tree
/journalctl

View File

@ -3,8 +3,8 @@ compiler:
- gcc
before_install:
- sudo apt-get update -qq
- sudo apt-get install autotools-dev automake autoconf libtool libdbus-1-dev libcap-dev libblkid-dev libmount-dev libpam-dev libcryptsetup-dev libaudit-dev libacl1-dev libattr1-dev libselinux-dev liblzma-dev libgcrypt-dev libqrencode-dev libmicrohttpd-dev gtk-doc-tools gperf python2.7-dev
script: ./autogen.sh && ./configure --enable-gtk-doc --enable-gtk-doc-pdf && make V=1 && sudo ./systemd-machine-id-setup && make check && make distcheck
- sudo apt-get install autotools-dev automake autoconf libtool libdbus-1-dev libcap-dev libblkid-dev libmount-dev libpam-dev libcryptsetup-dev libaudit-dev libacl1-dev libattr1-dev libselinux-dev liblzma-dev libgcrypt-dev libqrencode-dev libmicrohttpd-dev gperf python2.7-dev
script: ./autogen.sh && ./configure && make V=1 && sudo ./systemd-machine-id-setup && make check && make distcheck
after_failure: cat test-suite.log
notifications:
irc:

View File

@ -42,10 +42,6 @@ LIBUDEV_CURRENT=7
LIBUDEV_REVISION=3
LIBUDEV_AGE=6
LIBGUDEV_CURRENT=2
LIBGUDEV_REVISION=0
LIBGUDEV_AGE=2
LIBSYSTEMD_CURRENT=7
LIBSYSTEMD_REVISION=0
LIBSYSTEMD_AGE=7
@ -3667,15 +3663,6 @@ src/libsystemd-terminal/unifont-glyph-array.bin: tools/compile-unifont.py $(UNIF
$(AM_V_GEN)$(PYTHON) $< <$(UNIFONT) >$@
# ------------------------------------------------------------------------------
if ENABLE_GTK_DOC
SUBDIRS += \
docs/libudev
noinst_DATA += \
docs/html/libudev \
docs/html/gudev
endif
include_HEADERS += \
src/libudev/libudev.h
@ -3716,17 +3703,12 @@ EXTRA_DIST += \
src/libudev/libudev.pc.in
CLEANFILES += \
docs/html/libudev \
docs/html/gudev
docs/html/libudev
docs/html/libudev:
$(AM_V_at)$(MKDIR_P) $(dir $@)
$(AM_V_LN)$(LN_S) -f ../libudev/html $@
docs/html/gudev:
$(AM_V_at)$(MKDIR_P) $(dir $@)
$(AM_V_LN)$(LN_S) -f ../gudev/html $@
# move lib from $(libdir) to $(rootlibdir) and update devel link, if needed
libudev-install-hook:
libname=libudev.so && $(move-to-rootlibdir)
@ -4122,151 +4104,6 @@ udevlibexec_PROGRAMS += \
dist_udevrules_DATA += \
rules/61-accelerometer.rules
# ------------------------------------------------------------------------------
if ENABLE_GUDEV
if ENABLE_GTK_DOC
SUBDIRS += \
docs/gudev
endif
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
pkgconfiglib_DATA += \
src/gudev/gudev-1.0.pc
libgudev_1_0_la_SOURCES = \
src/gudev/libgudev-1.0.sym \
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 = \
$(AM_CFLAGS) \
-fvisibility=default \
$(GLIB_CFLAGS)
libgudev_1_0_la_LIBADD = \
libudev.la \
$(GLIB_LIBS)
libgudev_1_0_la_LDFLAGS = \
$(AM_LDFLAGS) \
-version-info $(LIBGUDEV_CURRENT):$(LIBGUDEV_REVISION):$(LIBGUDEV_AGE) \
-export-dynamic \
-no-undefined \
-Wl,--version-script=$(top_srcdir)/src/gudev/libgudev-1.0.sym
src/gudev/gudevmarshal.h: src/gudev/gudevmarshal.list
$(AM_V_at)$(MKDIR_P) $(dir $@)
$(AM_V_GEN)glib-genmarshal $< --prefix=g_udev_marshal --header > $@
src/gudev/gudevmarshal.c: src/gudev/gudevmarshal.list
$(AM_V_at)$(MKDIR_P) $(dir $@)
$(AM_V_GEN)echo '#include "gudevmarshal.h"' > $@ && \
glib-genmarshal $< --prefix=g_udev_marshal --body >> $@
src/gudev/gudevenumtypes.%: src/gudev/gudevenumtypes.%.template src/gudev/gudevenums.h
$(AM_V_at)$(MKDIR_P) $(dir $@)
$(AM_V_GEN)glib-mkenums --template $^ > $@
if HAVE_INTROSPECTION
-include $(INTROSPECTION_MAKEFILE)
src/gudev/GUdev-1.0.gir: libgudev-1.0.la
src_gudev_GUdev_1_0_gir_INCLUDES = GObject-2.0
src_gudev_GUdev_1_0_gir_CFLAGS = \
$(AM_CFLAGS) \
$(INCLUDES) \
-D_GUDEV_COMPILATION \
-D_GUDEV_WORK_AROUND_DEV_T_BUG \
-I$(top_srcdir)/src \
-I$(top_builddir)/src \
-I$(top_srcdir)/src/gudev \
-I$(top_builddir)/src/gudev
src_gudev_GUdev_1_0_gir_LIBS = libgudev-1.0.la
src_gudev_GUdev_1_0_gir_SCANNERFLAGS = \
--pkg-export=gudev-1.0 \
--warn-all
src_gudev_GUdev_1_0_gir_FILES = \
src/gudev/gudev.h \
src/gudev/gudevtypes.h \
src/gudev/gudevenums.h \
src/gudev/gudevenumtypes.h \
src/gudev/gudevclient.h \
src/gudev/gudevdevice.h \
src/gudev/gudevenumerator.h \
src/gudev/gudevclient.c \
src/gudev/gudevdevice.c \
src/gudev/gudevenumerator.c
INTROSPECTION_GIRS = src/gudev/GUdev-1.0.gir
INTROSPECTION_SCANNER_ARGS = --c-include=gudev/gudev.h
girdir = $(datadir)/gir-1.0
gir_DATA = \
src/gudev/GUdev-1.0.gir
typelibsdir = $(libdir)/girepository-1.0
typelibs_DATA = \
src/gudev/GUdev-1.0.typelib
CLEANFILES += $(gir_DATA) $(typelibs_DATA)
endif # HAVE_INTROSPECTION
endif
EXTRA_DIST += \
src/gudev/gudev-1.0.pc.in \
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
# ------------------------------------------------------------------------------
mtd_probe_SOURCES = \
src/udev/mtd_probe/mtd_probe.c \
@ -6826,11 +6663,6 @@ DISTCHECK_CONFIGURE_FLAGS += \
--with-python
endif
if ENABLE_GTK_DOC
DISTCHECK_CONFIGURE_FLAGS += \
--enable-gtk-doc
endif
if ENABLE_SPLIT_USR
DISTCHECK_CONFIGURE_FLAGS += \
--enable-split-usr
@ -6895,10 +6727,6 @@ upload: all check dist
.PHONY: doc-sync
doc-sync: all destdir-sphinx
gtkdoc-rebase --html-dir=docs/libudev/html --online
rsync -rlv --delete docs/libudev/html/ --omit-dir-times $(www_target)/libudev/
gtkdoc-rebase --html-dir=docs/gudev/html --online
rsync -rlv --delete docs/gudev/html/ --omit-dir-times $(www_target)/gudev/
rsync -rlv --delete-excluded --include="*.html" --exclude="*" --omit-dir-times man/ $(www_target)/man/
rsync -rlv --delete --omit-dir-times docs/html/python-systemd/ $(www_target)/python-systemd/

1
README
View File

@ -152,7 +152,6 @@ REQUIREMENTS:
libtool
intltool
gperf
gtkdocize (optional)
python (optional)
python-lxml (optional, but required to build the indices)
sphinx (optional)

2
TODO
View File

@ -537,8 +537,6 @@ Features:
* maybe do not install getty@tty1.service symlink in /etc but in /usr?
* re-enable "make check" for gtk-doc (broken for unknown reason)
* fstab: add new mount option x-systemd-after=/foobar/waldo to allow manual dependencies to other mount points
https://bugzilla.redhat.com/show_bug.cgi?id=812826

View File

@ -28,15 +28,6 @@ if [ -f .git/hooks/pre-commit.sample ] && [ ! -f .git/hooks/pre-commit ]; then
echo "Activated pre-commit hook." || :
fi
if which gtkdocize >/dev/null 2>/dev/null; then
gtkdocize --docdir docs/ --flavour no-tmpl
gtkdocargs=--enable-gtk-doc
else
echo "You don't have gtk-doc installed, and thus won't be able to generate the documentation."
rm -f docs/gtk-doc.make
echo 'EXTRA_DIST =' > docs/gtk-doc.make
fi
intltoolize --force --automake
autoreconf --force --install --symlink
@ -48,7 +39,7 @@ args="\
--sysconfdir=/etc \
--localstatedir=/var \
--libdir=$(libdir /usr/lib) \
$gtkdocargs"
"
if [ -f "$topdir/.config.args" ]; then
args="$args $(cat $topdir/.config.args)"

View File

@ -107,22 +107,6 @@ AS_IF([! ln --relative --help > /dev/null 2>&1], [AC_MSG_ERROR([*** ln doesn't s
M4_DEFINES=
# gtkdocize greps for '^GTK_DOC_CHECK', so it needs to be on its own line
m4_ifdef([GTK_DOC_CHECK], [
GTK_DOC_CHECK([1.18],[--flavour no-tmpl])],
[AM_CONDITIONAL([ENABLE_GTK_DOC], [false])
enable_gtk_doc=no])
AS_IF([test "x$enable_gtk_doc" = "xyes" -a "x$XSLTPROC" = x], [
AC_MSG_ERROR([*** GTK doc requested but xsltproc not found])
])
m4_ifdef([GOBJECT_INTROSPECTION_CHECK], [
GOBJECT_INTROSPECTION_CHECK([1.31.1])
], [
AM_CONDITIONAL([HAVE_INTROSPECTION], [false])
enable_introspection=no])
AC_CHECK_TOOL(OBJCOPY, objcopy)
AC_CHECK_TOOL(STRINGS, strings)
AC_CHECK_TOOL(GPERF, gperf)
@ -1293,14 +1277,6 @@ if test "x$enable_myhostname" != "xno"; then
fi
AM_CONDITIONAL(HAVE_MYHOSTNAME, [test "$have_myhostname" = "yes"])
# ------------------------------------------------------------------------------
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 gio-2.0]) ])
AM_CONDITIONAL([ENABLE_GUDEV], [test "x$enable_gudev" = "xyes"])
AS_IF([test "x$enable_gudev" = "xyes"], [ AC_DEFINE(HAVE_GLIB, 1, [Define if glib is available]) ])
# ------------------------------------------------------------------------------
AC_ARG_ENABLE(hwdb, [AC_HELP_STRING([--disable-hwdb], [disable hardware database support])],
enable_hwdb=$enableval, enable_hwdb=yes)
@ -1444,13 +1420,6 @@ AS_IF([test "x${enable_split_usr}" = "xyes"], [
])
AM_CONDITIONAL(ENABLE_SPLIT_USR, [test "x${enable_split_usr}" = "xyes"])
# Work around intltoolize and gtk-doc problems in VPATH builds
AM_CONDITIONAL([ENABLE_GTK_DOC_TESTS], [test "x$0" = "x./configure"],
[Define to do gtk-doc tests])
AS_IF([test "x$0" != "x./configure"], [
AC_SUBST([INTLTOOL_UPDATE], [/bin/true])
])
# QEMU and OVMF UEFI firmware
AS_IF([test x"$cross_compiling" = "xyes"], [], [
AC_PATH_PROG([QEMU], [qemu-system-x86_64])
@ -1505,11 +1474,8 @@ AC_SUBST([rootprefix], [$with_rootprefix])
AC_SUBST([rootlibdir], [$with_rootlibdir])
AC_CONFIG_FILES([
Makefile po/Makefile.in
docs/libudev/Makefile
docs/libudev/version.xml
docs/gudev/Makefile
docs/gudev/version.xml
Makefile
po/Makefile.in
])
AC_OUTPUT
@ -1575,7 +1541,6 @@ AC_MSG_RESULT([
libmount: ${have_libmount}
dbus: ${have_dbus}
nss-myhostname: ${have_myhostname}
gudev: ${enable_gudev}
hwdb: ${enable_hwdb}
gintrospection: ${enable_introspection}
terminal: ${have_terminal}
@ -1583,7 +1548,6 @@ AC_MSG_RESULT([
Python: ${have_python}
Python Headers: ${have_python_devel}
man pages: ${have_manpages}
gtk-doc: ${enable_gtk_doc}
test coverage: ${have_coverage}
Split /usr: ${enable_split_usr}
SysV compatibility: ${SYSTEM_SYSV_COMPAT}

1
docs/.gitignore vendored
View File

@ -1,2 +1 @@
/gtk-doc.make
/html/

19
docs/gudev/.gitignore vendored
View File

@ -1,19 +0,0 @@
/*.bak
/gtk-doc.make
/version.xml
/Makefile
/gudev-overrides.txt
/gudev-decl-list.txt
/gudev-decl.txt
/gudev-undeclared.txt
/gudev-undocumented.txt
/gudev-unused.txt
/gudev.args
/gudev.hierarchy
/gudev.interfaces
/gudev.prerequisites
/gudev.signals
/html/
/xml/
/*.stamp
/tmpl/

View File

@ -1,115 +0,0 @@
## Process this file with automake to produce Makefile.in
# We require automake 1.10 at least.
AUTOMAKE_OPTIONS = 1.10 color-tests
# This is a blank Makefile.am for using gtk-doc.
# Copy this to your project's API docs directory and modify the variables to
# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
# of using the various options.
# The name of the module, e.g. 'glib'.
DOC_MODULE=gudev
# Uncomment for versioned docs and specify the version of the module, e.g. '2'.
#DOC_MODULE_VERSION=2
# The top-level SGML file. You can change this if you want to.
DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.xml
# The directory containing the source code. Relative to $(srcdir).
# gtk-doc will search all .c & .h files beneath here for inline comments
# documenting the functions and macros.
# e.g. DOC_SOURCE_DIR=../../../gtk
DOC_SOURCE_DIR=$(top_srcdir)/src/gudev $(top_builddir)/src/gudev
# Extra options to pass to gtkdoc-scangobj. Not normally needed.
SCANGOBJ_OPTIONS=
# Extra options to supply to gtkdoc-scan.
# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
SCAN_OPTIONS=
# Extra options to supply to gtkdoc-mkdb.
# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml
MKDB_OPTIONS=--xml-mode --output-format=xml --name-space=g_udev
# Extra options to supply to gtkdoc-mktmpl
# e.g. MKTMPL_OPTIONS=--only-section-tmpl
MKTMPL_OPTIONS=
# Extra options to supply to gtkdoc-mkhtml
MKHTML_OPTIONS=--path=$(abs_srcdir) --path=$(abs_builddir)
# Extra options to supply to gtkdoc-fixref. Not normally needed.
# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
FIXXREF_OPTIONS=>/dev/null 2>&1
# Used for dependencies. The docs will be rebuilt if any of these change.
# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
HFILE_GLOB=$(top_srcdir)/src/gudev/*.h
CFILE_GLOB=$(top_srcdir)/src/gudev/*.c
# Extra header to include when scanning, which are not under DOC_SOURCE_DIR
# e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h
EXTRA_HFILES=
# Header files to ignore when scanning. Use base file name, no paths
# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h
IGNORE_HFILES=gudevenumtypes.h gudevmarshal.h
# Images to copy into HTML directory.
# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
HTML_IMAGES=
# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
content_files = version.xml
# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
# These files must be listed here *and* in content_files
# e.g. expand_content_files=running.sgml
expand_content_files=
# Hack, hack. You silly gtk-doc, you must not add CFLAGS multiple
# times when calling gcc; it surely can not work with options that must
# be listed only once.
# Kill CFLAGS here because gtk-doc thinks adding CFLAGS to CC _and_ also
# adding CFLAGS itself again would work.
override CFLAGS=
override LDFLAGS=
# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
# Only needed if you are using gtkdoc-scangobj to dynamically query widget
# signals and properties.
# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
GTKDOC_CFLAGS = \
$(GLIB_CFLAGS) \
-I$(top_srcdir)/src/gudev \
-I$(top_builddir)/src/gudev
GTKDOC_LIBS = \
$(GLIB_LIBS) \
$(top_builddir)/libgudev-1.0.la
# This includes the standard gtk-doc make rules, copied by gtkdocize.
include $(top_srcdir)/docs/gtk-doc.make
# Other files to distribute
# e.g. EXTRA_DIST += version.xml.in
EXTRA_DIST += version.xml.in
# Files not to distribute
# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types
# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt
#DISTCLEANFILES +=
# Comment this out if you want your docs-status tested during 'make check'
if ENABLE_GTK_DOC
if ENABLE_GTK_DOC_TESTS
#TESTS_ENVIRONMENT = cd $(top_srcdir)
#TESTS = $(GTKDOC_CHECK)
endif
endif

View File

@ -1,52 +0,0 @@
<?xml version="1.0"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
[
<!ENTITY version SYSTEM "version.xml">
]>
<book id="index" xmlns:xi="http://www.w3.org/2003/XInclude">
<bookinfo>
<title>GUdev Reference Manual</title>
<releaseinfo>
For version &version; — the latest version of this
documentation can be found at
<ulink role="online-location" url="http://www.freedesktop.org/software/systemd/gudev/">
http://www.freedesktop.org/software/systemd/gudev/
</ulink>.
</releaseinfo>
<copyright>
<year>2009-2012</year>
<holder>David Zeuthen &lt;davidz@redhat.com&gt;</holder>
<holder>Bastien Nocera &lt;hadess@hadess.net&gt;</holder>
</copyright>
</bookinfo>
<chapter id="ref-API">
<title>API Reference</title>
<xi:include href="xml/gudevclient.xml"/>
<xi:include href="xml/gudevdevice.xml"/>
<xi:include href="xml/gudevenumerator.xml"/>
</chapter>
<chapter id="gudev-hierarchy">
<title>Object Hierarchy</title>
<xi:include href="xml/tree_index.sgml"/>
</chapter>
<index id="api-index-full">
<title>API Index</title>
<xi:include href="xml/api-index-full.xml"><xi:fallback /></xi:include>
</index>
<index role="165">
<title>Index of new symbols in 165</title>
<xi:include href="xml/api-index-165.xml"><xi:fallback /></xi:include>
</index>
<index id="api-index-deprecated" role="deprecated">
<title>Index of deprecated API</title>
<xi:include href="xml/api-index-deprecated.xml"><xi:fallback /></xi:include>
</index>
<xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
</book>

View File

@ -1,102 +0,0 @@
<SECTION>
<FILE>gudevclient</FILE>
<TITLE>GUdevClient</TITLE>
GUdevClient
GUdevClientClass
GUdevDeviceType
GUdevDeviceNumber
g_udev_client_new
g_udev_client_query_by_subsystem
g_udev_client_query_by_device_number
g_udev_client_query_by_device_file
g_udev_client_query_by_sysfs_path
g_udev_client_query_by_subsystem_and_name
<SUBSECTION Standard>
G_UDEV_CLIENT
G_UDEV_IS_CLIENT
G_UDEV_TYPE_CLIENT
g_udev_client_get_type
G_UDEV_CLIENT_CLASS
G_UDEV_IS_CLIENT_CLASS
G_UDEV_CLIENT_GET_CLASS
<SUBSECTION Private>
GUdevClientPrivate
</SECTION>
<SECTION>
<FILE>gudevdevice</FILE>
<TITLE>GUdevDevice</TITLE>
GUdevDevice
GUdevDeviceClass
g_udev_device_get_subsystem
g_udev_device_get_devtype
g_udev_device_get_name
g_udev_device_get_number
g_udev_device_get_sysfs_path
g_udev_device_get_driver
g_udev_device_get_action
g_udev_device_get_seqnum
g_udev_device_get_device_type
g_udev_device_get_device_number
g_udev_device_get_device_file
g_udev_device_get_device_file_symlinks
g_udev_device_get_parent
g_udev_device_get_parent_with_subsystem
g_udev_device_get_tags
g_udev_device_get_is_initialized
g_udev_device_get_usec_since_initialized
g_udev_device_get_property_keys
g_udev_device_has_property
g_udev_device_get_property
g_udev_device_get_property_as_int
g_udev_device_get_property_as_uint64
g_udev_device_get_property_as_double
g_udev_device_get_property_as_boolean
g_udev_device_get_property_as_strv
g_udev_device_get_sysfs_attr_keys
g_udev_device_has_sysfs_attr
g_udev_device_get_sysfs_attr
g_udev_device_get_sysfs_attr_as_int
g_udev_device_get_sysfs_attr_as_uint64
g_udev_device_get_sysfs_attr_as_double
g_udev_device_get_sysfs_attr_as_boolean
g_udev_device_get_sysfs_attr_as_strv
<SUBSECTION Standard>
G_UDEV_DEVICE
G_UDEV_IS_DEVICE
G_UDEV_TYPE_DEVICE
g_udev_device_get_type
G_UDEV_DEVICE_CLASS
G_UDEV_IS_DEVICE_CLASS
G_UDEV_DEVICE_GET_CLASS
<SUBSECTION Private>
GUdevDevicePrivate
</SECTION>
<SECTION>
<FILE>gudevenumerator</FILE>
<TITLE>GUdevEnumerator</TITLE>
GUdevEnumerator
GUdevEnumeratorClass
g_udev_enumerator_new
g_udev_enumerator_add_match_subsystem
g_udev_enumerator_add_nomatch_subsystem
g_udev_enumerator_add_match_sysfs_attr
g_udev_enumerator_add_nomatch_sysfs_attr
g_udev_enumerator_add_match_property
g_udev_enumerator_add_match_name
g_udev_enumerator_add_match_tag
g_udev_enumerator_add_match_is_initialized
g_udev_enumerator_add_sysfs_path
g_udev_enumerator_execute
<SUBSECTION Standard>
G_UDEV_ENUMERATOR
G_UDEV_IS_ENUMERATOR
G_UDEV_TYPE_ENUMERATOR
g_udev_enumerator_get_type
G_UDEV_ENUMERATOR_CLASS
G_UDEV_IS_ENUMERATOR_CLASS
G_UDEV_ENUMERATOR_GET_CLASS
<SUBSECTION Private>
GUdevEnumeratorPrivate
</SECTION>

View File

@ -1,4 +0,0 @@
g_udev_device_type_get_type
g_udev_device_get_type
g_udev_client_get_type
g_udev_enumerator_get_type

View File

@ -1 +0,0 @@
@VERSION@

View File

@ -1,19 +0,0 @@
/gtk-doc.make
/version.xml
/Makefile
/libudev-overrides.txt
/libudev-decl-list.txt
/libudev-decl.txt
/libudev-undeclared.txt
/libudev-undocumented.txt
/libudev-unused.txt
/libudev.args
/libudev.hierarchy
/libudev.interfaces
/libudev.prerequisites
/libudev.signals
/html/
/xml/
/*.stamp
/*.bak
/tmpl/

View File

@ -1,109 +0,0 @@
## Process this file with automake to produce Makefile.in
# We require automake 1.10 at least.
AUTOMAKE_OPTIONS = 1.10 color-tests
# This is a blank Makefile.am for using gtk-doc.
# Copy this to your project's API docs directory and modify the variables to
# suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples
# of using the various options.
# The name of the module, e.g. 'glib'.
DOC_MODULE=libudev
# Uncomment for versioned docs and specify the version of the module, e.g. '2'.
#DOC_MODULE_VERSION=2
# The top-level SGML file. You can change this if you want to.
DOC_MAIN_SGML_FILE=$(DOC_MODULE)-docs.xml
# The directory containing the source code. Relative to $(srcdir).
# gtk-doc will search all .c & .h files beneath here for inline comments
# documenting the functions and macros.
# e.g. DOC_SOURCE_DIR=../../../gtk
DOC_SOURCE_DIR=$(top_srcdir)/src/libudev
# Extra options to pass to gtkdoc-scangobj. Not normally needed.
SCANGOBJ_OPTIONS=
# Extra options to supply to gtkdoc-scan.
# e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED"
SCAN_OPTIONS=
# Extra options to supply to gtkdoc-mkdb.
# e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml
MKDB_OPTIONS=--xml-mode --output-format=xml --name-space=udev
# Extra options to supply to gtkdoc-mktmpl
# e.g. MKTMPL_OPTIONS=--only-section-tmpl
MKTMPL_OPTIONS=
# Extra options to supply to gtkdoc-mkhtml
MKHTML_OPTIONS=--path=$(abs_srcdir) --path=$(abs_builddir)
# Extra options to supply to gtkdoc-fixref. Not normally needed.
# e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html
FIXXREF_OPTIONS=>/dev/null 2>&1
# Used for dependencies. The docs will be rebuilt if any of these change.
# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
HFILE_GLOB=$(top_srcdir)/src/libudev/libudev*.h
CFILE_GLOB=$(top_srcdir)/src/libudev/libudev*.c
# Extra header to include when scanning, which are not under DOC_SOURCE_DIR
# e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h
EXTRA_HFILES=
# Header files to ignore when scanning. Use base file name, no paths
# e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h
IGNORE_HFILES = libudev-private.h
# Images to copy into HTML directory.
# e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png
HTML_IMAGES=
# Extra SGML files that are included by $(DOC_MAIN_SGML_FILE).
# e.g. content_files=running.sgml building.sgml changes-2.0.sgml
content_files = version.xml
# SGML files where gtk-doc abbrevations (#GtkWidget) are expanded
# These files must be listed here *and* in content_files
# e.g. expand_content_files=running.sgml
expand_content_files=
# Hack, hack. You silly gtk-doc, you must not add CFLAGS multiple
# times when calling gcc; it surely can not work with options that must
# be listed only once.
# Kill CFLAGS here because gtk-doc thinks adding CFLAGS to CC _and_ also
# adding CFLAGS itself again would work.
override CFLAGS=
override LDFLAGS=
# CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library.
# Only needed if you are using gtkdoc-scangobj to dynamically query widget
# signals and properties.
# e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS)
# e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib)
GTKDOC_CFLAGS=
GTKDOC_LIBS=
# This includes the standard gtk-doc make rules, copied by gtkdocize.
include $(top_srcdir)/docs/gtk-doc.make
# Other files to distribute
# e.g. EXTRA_DIST += version.xml.in
EXTRA_DIST += version.xml.in
# Files not to distribute
# for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types
# for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt
#DISTCLEANFILES +=
# Comment this out if you want your docs-status tested during 'make check'
if ENABLE_GTK_DOC
if ENABLE_GTK_DOC_TESTS
#TESTS_ENVIRONMENT = cd $(top_srcdir)
#TESTS = $(GTKDOC_CHECK)
endif
endif

View File

@ -1,40 +0,0 @@
<?xml version="1.0"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
[
<!ENTITY version SYSTEM "version.xml">
]>
<book id="index" xmlns:xi="http://www.w3.org/2003/XInclude">
<bookinfo>
<title>libudev Reference Manual</title>
<releaseinfo>
For version &version; — the latest version of this
documentation can be found at
<ulink role="online-location" url="http://www.freedesktop.org/software/systemd/libudev/">
http://www.freedesktop.org/software/systemd/libudev/
</ulink>.
</releaseinfo>
<copyright>
<year>2009-2012</year>
<holder>Kay Sievers &lt;kay@vrfy.org&gt;</holder>
</copyright>
</bookinfo>
<chapter>
<title>API Reference</title>
<xi:include href="xml/libudev.xml"/>
<xi:include href="xml/libudev-list.xml"/>
<xi:include href="xml/libudev-device.xml"/>
<xi:include href="xml/libudev-monitor.xml"/>
<xi:include href="xml/libudev-enumerate.xml"/>
<xi:include href="xml/libudev-queue.xml"/>
<xi:include href="xml/libudev-hwdb.xml"/>
<xi:include href="xml/libudev-util.xml"/>
<xi:include href="xml/api-index-deprecated.xml"/>
</chapter>
<index id="api-index-full">
<title>Index</title>
<xi:include href="xml/api-index-full.xml"/>
</index>
</book>

View File

@ -1,137 +0,0 @@
<SECTION>
<FILE>libudev</FILE>
<TITLE>udev</TITLE>
udev
udev_ref
udev_unref
udev_new
udev_set_log_fn
udev_get_log_priority
udev_set_log_priority
udev_get_userdata
udev_set_userdata
</SECTION>
<SECTION>
<FILE>libudev-list</FILE>
<TITLE>udev_list</TITLE>
udev_list_entry
udev_list_entry_get_next
udev_list_entry_get_by_name
udev_list_entry_get_name
udev_list_entry_get_value
udev_list_entry_foreach
</SECTION>
<SECTION>
<FILE>libudev-device</FILE>
<TITLE>udev_device</TITLE>
udev_device
udev_device_ref
udev_device_unref
udev_device_get_udev
udev_device_new_from_syspath
udev_device_new_from_devnum
udev_device_new_from_subsystem_sysname
udev_device_new_from_device_id
udev_device_new_from_environment
udev_device_get_parent
udev_device_get_parent_with_subsystem_devtype
udev_device_get_devpath
udev_device_get_subsystem
udev_device_get_devtype
udev_device_get_syspath
udev_device_get_sysname
udev_device_get_sysnum
udev_device_get_devnode
udev_device_get_is_initialized
udev_device_get_devlinks_list_entry
udev_device_get_properties_list_entry
udev_device_get_tags_list_entry
udev_device_get_property_value
udev_device_get_driver
udev_device_get_devnum
udev_device_get_action
udev_device_get_sysattr_value
udev_device_set_sysattr_value
udev_device_get_sysattr_list_entry
udev_device_get_seqnum
udev_device_get_usec_since_initialized
udev_device_has_tag
</SECTION>
<SECTION>
<FILE>libudev-monitor</FILE>
<TITLE>udev_monitor</TITLE>
udev_monitor
udev_monitor_ref
udev_monitor_unref
udev_monitor_get_udev
udev_monitor_new_from_netlink
udev_monitor_enable_receiving
udev_monitor_set_receive_buffer_size
udev_monitor_get_fd
udev_monitor_receive_device
udev_monitor_filter_add_match_subsystem_devtype
udev_monitor_filter_add_match_tag
udev_monitor_filter_update
udev_monitor_filter_remove
</SECTION>
<SECTION>
<FILE>libudev-enumerate</FILE>
<TITLE>udev_enumerate</TITLE>
udev_enumerate
udev_enumerate_ref
udev_enumerate_unref
udev_enumerate_get_udev
udev_enumerate_new
udev_enumerate_add_match_subsystem
udev_enumerate_add_nomatch_subsystem
udev_enumerate_add_match_sysattr
udev_enumerate_add_nomatch_sysattr
udev_enumerate_add_match_property
udev_enumerate_add_match_tag
udev_enumerate_add_match_parent
udev_enumerate_add_match_is_initialized
udev_enumerate_add_match_sysname
udev_enumerate_add_syspath
udev_enumerate_scan_devices
udev_enumerate_scan_subsystems
udev_enumerate_get_list_entry
</SECTION>
<SECTION>
<FILE>libudev-queue</FILE>
<TITLE>udev_queue</TITLE>
udev_queue
udev_queue_ref
udev_queue_unref
udev_queue_get_udev
udev_queue_new
udev_queue_get_udev_is_active
udev_queue_get_queue_is_empty
udev_queue_get_seqnum_is_finished
udev_queue_get_seqnum_sequence_is_finished
udev_queue_get_queued_list_entry
udev_queue_get_kernel_seqnum
udev_queue_get_udev_seqnum
udev_queue_get_fd
udev_queue_flush
</SECTION>
<SECTION>
<FILE>libudev-hwdb</FILE>
<TITLE>udev_hwdb</TITLE>
udev_hwdb
udev_hwdb_ref
udev_hwdb_unref
udev_hwdb_new
udev_hwdb_get_properties_list_entry
</SECTION>
<SECTION>
<FILE>libudev-util</FILE>
<TITLE>udev_util</TITLE>
udev_util_encode_string
</SECTION>

View File

@ -1 +0,0 @@
@VERSION@

1
m4/.gitignore vendored
View File

@ -4,4 +4,3 @@ ltoptions.m4
ltsugar.m4
ltversion.m4
lt~obsolete.m4
gtk-doc.m4

View File

@ -232,18 +232,6 @@
</xsl:attribute>
<xsl:text>Python </xsl:text>
</a>·
<a>
<xsl:attribute name="href">
<xsl:text>../libudev/index.html</xsl:text>
</xsl:attribute>
<xsl:text>libudev </xsl:text>
</a>·
<a>
<xsl:attribute name="href">
<xsl:text>../libudev/index.html</xsl:text>
</xsl:attribute>
<xsl:text>gudev </xsl:text>
</a>
<span style="float:right">
<xsl:text>systemd </xsl:text>

View File

@ -1,7 +0,0 @@
gudev-1.0.pc
gudevenumtypes.c
gudevenumtypes.h
gudevmarshal.c
gudevmarshal.h
GUdev-1.0.gir
GUdev-1.0.typelib

View File

@ -1 +0,0 @@
../Makefile

View File

@ -1,75 +0,0 @@
#!/usr/bin/env gjs-console
// This currently depends on the following patches to gjs
//
// http://bugzilla.gnome.org/show_bug.cgi?id=584558
// http://bugzilla.gnome.org/show_bug.cgi?id=584560
// http://bugzilla.gnome.org/show_bug.cgi?id=584568
const GUdev = imports.gi.GUdev;
const Mainloop = imports.mainloop;
function print_device (device) {
print (" subsystem: " + device.get_subsystem ());
print (" devtype: " + device.get_devtype ());
print (" name: " + device.get_name ());
print (" number: " + device.get_number ());
print (" sysfs_path: " + device.get_sysfs_path ());
print (" driver: " + device.get_driver ());
print (" action: " + device.get_action ());
print (" seqnum: " + device.get_seqnum ());
print (" device type: " + device.get_device_type ());
print (" device number: " + device.get_device_number ());
print (" device file: " + device.get_device_file ());
print (" device file symlinks: " + device.get_device_file_symlinks ());
print (" foo: " + device.get_sysfs_attr_as_strv ("stat"));
var keys = device.get_property_keys ();
for (var n = 0; n < keys.length; n++) {
print (" " + keys[n] + "=" + device.get_property (keys[n]));
}
}
function on_uevent (client, action, device) {
print ("action " + action + " on device " + device.get_sysfs_path());
print_device (device);
print ("");
}
var client = new GUdev.Client ({subsystems: ["block", "usb/usb_interface"]});
client.connect ("uevent", on_uevent);
var block_devices = client.query_by_subsystem ("block");
for (var n = 0; n < block_devices.length; n++) {
print ("block device: " + block_devices[n].get_device_file ());
}
var d;
d = client.query_by_device_number (GUdev.DeviceType.BLOCK, 0x0810);
if (d == null) {
print ("query_by_device_number 0x810 -> null");
} else {
print ("query_by_device_number 0x810 -> " + d.get_device_file ());
var dd = d.get_parent_with_subsystem ("usb", null);
print_device (dd);
print ("--------------------------------------------------------------------------");
while (d != null) {
print_device (d);
print ("");
d = d.get_parent ();
}
}
d = client.query_by_sysfs_path ("/sys/block/sda/sda1");
print ("query_by_sysfs_path (\"/sys/block/sda1\") -> " + d.get_device_file ());
d = client.query_by_subsystem_and_name ("block", "sda2");
print ("query_by_subsystem_and_name (\"block\", \"sda2\") -> " + d.get_device_file ());
d = client.query_by_device_file ("/dev/sda");
print ("query_by_device_file (\"/dev/sda\") -> " + d.get_device_file ());
d = client.query_by_device_file ("/dev/block/8:0");
print ("query_by_device_file (\"/dev/block/8:0\") -> " + d.get_device_file ());
Mainloop.run('udev-example');

View File

@ -1,11 +0,0 @@
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
Name: gudev-1.0
Description: GObject bindings for libudev
Version: @VERSION@
Requires: glib-2.0, gobject-2.0
Libs: -L${libdir} -lgudev-1.0
Cflags: -I${includedir}/gudev-1.0

View File

@ -1,32 +0,0 @@
/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
*
* Copyright (C) 2008 David Zeuthen <davidz@redhat.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef __G_UDEV_H__
#define __G_UDEV_H__
#define _GUDEV_INSIDE_GUDEV_H
#include <gudev/gudevenums.h>
#include <gudev/gudevenumtypes.h>
#include <gudev/gudevtypes.h>
#include <gudev/gudevclient.h>
#include <gudev/gudevdevice.h>
#include <gudev/gudevenumerator.h>
#undef _GUDEV_INSIDE_GUDEV_H
#endif /* __G_UDEV_H__ */

View File

@ -1,533 +0,0 @@
/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
*
* Copyright (C) 2008-2010 David Zeuthen <davidz@redhat.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include "gudevclient.h"
#include "gudevdevice.h"
#include "gudevmarshal.h"
#include "gudevprivate.h"
/**
* SECTION:gudevclient
* @short_description: Query devices and listen to uevents
*
* #GUdevClient is used to query information about devices on a Linux
* system from the Linux kernel and the udev device
* manager.
*
* Device information is retrieved from the kernel (through the
* <literal>sysfs</literal> filesystem) and the udev daemon (through a
* <literal>tmpfs</literal> filesystem) and presented through
* #GUdevDevice objects. This means that no blocking IO ever happens
* (in both cases, we are essentially just reading data from kernel
* memory) and as such there are no asynchronous versions of the
* provided methods.
*
* To get #GUdevDevice objects, use
* g_udev_client_query_by_subsystem(),
* g_udev_client_query_by_device_number(),
* g_udev_client_query_by_device_file(),
* g_udev_client_query_by_sysfs_path(),
* g_udev_client_query_by_subsystem_and_name()
* or the #GUdevEnumerator type.
*
* To listen to uevents, connect to the #GUdevClient::uevent signal.
*/
struct _GUdevClientPrivate
{
GSource *watch_source;
struct udev *udev;
struct udev_monitor *monitor;
gchar **subsystems;
};
enum
{
PROP_0,
PROP_SUBSYSTEMS,
};
enum
{
UEVENT_SIGNAL,
LAST_SIGNAL,
};
static guint signals[LAST_SIGNAL] = { 0 };
G_DEFINE_TYPE (GUdevClient, g_udev_client, G_TYPE_OBJECT)
/* ---------------------------------------------------------------------------------------------------- */
static gboolean
monitor_event (GIOChannel *source,
GIOCondition condition,
gpointer data)
{
GUdevClient *client = (GUdevClient *) data;
GUdevDevice *device;
struct udev_device *udevice;
if (client->priv->monitor == NULL)
goto out;
udevice = udev_monitor_receive_device (client->priv->monitor);
if (udevice == NULL)
goto out;
device = _g_udev_device_new (udevice);
udev_device_unref (udevice);
g_signal_emit (client,
signals[UEVENT_SIGNAL],
0,
g_udev_device_get_action (device),
device);
g_object_unref (device);
out:
return TRUE;
}
static void
g_udev_client_finalize (GObject *object)
{
GUdevClient *client = G_UDEV_CLIENT (object);
if (client->priv->watch_source != NULL)
{
g_source_destroy (client->priv->watch_source);
client->priv->watch_source = NULL;
}
if (client->priv->monitor != NULL)
{
udev_monitor_unref (client->priv->monitor);
client->priv->monitor = NULL;
}
if (client->priv->udev != NULL)
{
udev_unref (client->priv->udev);
client->priv->udev = NULL;
}
g_strfreev (client->priv->subsystems);
if (G_OBJECT_CLASS (g_udev_client_parent_class)->finalize != NULL)
G_OBJECT_CLASS (g_udev_client_parent_class)->finalize (object);
}
static void
g_udev_client_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
GUdevClient *client = G_UDEV_CLIENT (object);
switch (prop_id)
{
case PROP_SUBSYSTEMS:
if (client->priv->subsystems != NULL)
g_strfreev (client->priv->subsystems);
client->priv->subsystems = g_strdupv (g_value_get_boxed (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
g_udev_client_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
GUdevClient *client = G_UDEV_CLIENT (object);
switch (prop_id)
{
case PROP_SUBSYSTEMS:
g_value_set_boxed (value, client->priv->subsystems);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
g_udev_client_constructed (GObject *object)
{
GUdevClient *client = G_UDEV_CLIENT (object);
GIOChannel *channel;
guint n;
client->priv->udev = udev_new ();
/* connect to event source */
client->priv->monitor = udev_monitor_new_from_netlink (client->priv->udev, "udev");
//g_debug ("ss = %p", client->priv->subsystems);
if (client->priv->subsystems != NULL)
{
/* install subsystem filters to only wake up for certain events */
for (n = 0; client->priv->subsystems[n] != NULL; n++)
{
gchar *subsystem;
gchar *devtype;
gchar *s;
subsystem = g_strdup (client->priv->subsystems[n]);
devtype = NULL;
//g_debug ("s = '%s'", subsystem);
s = strstr (subsystem, "/");
if (s != NULL)
{
devtype = s + 1;
*s = '\0';
}
if (client->priv->monitor != NULL)
udev_monitor_filter_add_match_subsystem_devtype (client->priv->monitor, subsystem, devtype);
g_free (subsystem);
}
/* listen to events, and buffer them */
if (client->priv->monitor != NULL)
{
udev_monitor_enable_receiving (client->priv->monitor);
channel = g_io_channel_unix_new (udev_monitor_get_fd (client->priv->monitor));
client->priv->watch_source = g_io_create_watch (channel, G_IO_IN);
g_io_channel_unref (channel);
g_source_set_callback (client->priv->watch_source, (GSourceFunc) monitor_event, client, NULL);
g_source_attach (client->priv->watch_source, g_main_context_get_thread_default ());
g_source_unref (client->priv->watch_source);
}
else
{
client->priv->watch_source = NULL;
}
}
if (G_OBJECT_CLASS (g_udev_client_parent_class)->constructed != NULL)
G_OBJECT_CLASS (g_udev_client_parent_class)->constructed (object);
}
static void
g_udev_client_class_init (GUdevClientClass *klass)
{
GObjectClass *gobject_class = (GObjectClass *) klass;
gobject_class->constructed = g_udev_client_constructed;
gobject_class->set_property = g_udev_client_set_property;
gobject_class->get_property = g_udev_client_get_property;
gobject_class->finalize = g_udev_client_finalize;
/**
* GUdevClient:subsystems:
*
* The subsystems to listen for uevents on.
*
* To listen for only a specific DEVTYPE for a given SUBSYSTEM, use
* "subsystem/devtype". For example, to only listen for uevents
* where SUBSYSTEM is usb and DEVTYPE is usb_interface, use
* "usb/usb_interface".
*
* If this property is %NULL, then no events will be reported. If
* it's the empty array, events from all subsystems will be
* reported.
*/
g_object_class_install_property (gobject_class,
PROP_SUBSYSTEMS,
g_param_spec_boxed ("subsystems",
"The subsystems to listen for changes on",
"The subsystems to listen for changes on",
G_TYPE_STRV,
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_READWRITE));
/**
* GUdevClient::uevent:
* @client: The #GUdevClient receiving the event.
* @action: The action for the uevent e.g. "add", "remove", "change", "move", etc.
* @device: Details about the #GUdevDevice the event is for.
*
* Emitted when @client receives an uevent.
*
* This signal is emitted in the
* <link linkend="g-main-context-push-thread-default">thread-default main loop</link>
* of the thread that @client was created in.
*/
signals[UEVENT_SIGNAL] = g_signal_new ("uevent",
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GUdevClientClass, uevent),
NULL,
NULL,
g_udev_marshal_VOID__STRING_OBJECT,
G_TYPE_NONE,
2,
G_TYPE_STRING,
G_UDEV_TYPE_DEVICE);
g_type_class_add_private (klass, sizeof (GUdevClientPrivate));
}
static void
g_udev_client_init (GUdevClient *client)
{
client->priv = G_TYPE_INSTANCE_GET_PRIVATE (client,
G_UDEV_TYPE_CLIENT,
GUdevClientPrivate);
}
/**
* g_udev_client_new:
* @subsystems: (array zero-terminated=1) (element-type utf8) (transfer none) (allow-none): A %NULL terminated string array of subsystems to listen for uevents on, %NULL to not listen on uevents at all, or an empty array to listen to uevents on all subsystems. See the documentation for the #GUdevClient:subsystems property for details on this parameter.
*
* Constructs a #GUdevClient object that can be used to query
* information about devices. Connect to the #GUdevClient::uevent
* signal to listen for uevents. Note that signals are emitted in the
* <link linkend="g-main-context-push-thread-default">thread-default main loop</link>
* of the thread that you call this constructor from.
*
* Returns: A new #GUdevClient object. Free with g_object_unref().
*/
GUdevClient *
g_udev_client_new (const gchar * const *subsystems)
{
return G_UDEV_CLIENT (g_object_new (G_UDEV_TYPE_CLIENT, "subsystems", subsystems, NULL));
}
/**
* g_udev_client_query_by_subsystem:
* @client: A #GUdevClient.
* @subsystem: (allow-none): The subsystem to get devices for or %NULL to get all devices.
*
* Gets all devices belonging to @subsystem.
*
* Returns: (nullable) (element-type GUdevDevice) (transfer full): A
* list of #GUdevDevice objects. The caller should free the result by
* using g_object_unref() on each element in the list and then
* g_list_free() on the list.
*/
GList *
g_udev_client_query_by_subsystem (GUdevClient *client,
const gchar *subsystem)
{
struct udev_enumerate *enumerate;
struct udev_list_entry *l, *devices;
GList *ret;
g_return_val_if_fail (G_UDEV_IS_CLIENT (client), NULL);
ret = NULL;
/* prepare a device scan */
enumerate = udev_enumerate_new (client->priv->udev);
/* filter for subsystem */
if (subsystem != NULL)
udev_enumerate_add_match_subsystem (enumerate, subsystem);
/* retrieve the list */
udev_enumerate_scan_devices (enumerate);
/* add devices to the list */
devices = udev_enumerate_get_list_entry (enumerate);
for (l = devices; l != NULL; l = udev_list_entry_get_next (l))
{
struct udev_device *udevice;
GUdevDevice *device;
udevice = udev_device_new_from_syspath (udev_enumerate_get_udev (enumerate),
udev_list_entry_get_name (l));
if (udevice == NULL)
continue;
device = _g_udev_device_new (udevice);
udev_device_unref (udevice);
ret = g_list_prepend (ret, device);
}
udev_enumerate_unref (enumerate);
ret = g_list_reverse (ret);
return ret;
}
/**
* g_udev_client_query_by_device_number:
* @client: A #GUdevClient.
* @type: A value from the #GUdevDeviceType enumeration.
* @number: A device number.
*
* Looks up a device for a type and device number.
*
* Returns: (nullable) (transfer full): A #GUdevDevice object or %NULL
* if the device was not found. Free with g_object_unref().
*/
GUdevDevice *
g_udev_client_query_by_device_number (GUdevClient *client,
GUdevDeviceType type,
GUdevDeviceNumber number)
{
struct udev_device *udevice;
GUdevDevice *device;
g_return_val_if_fail (G_UDEV_IS_CLIENT (client), NULL);
device = NULL;
udevice = udev_device_new_from_devnum (client->priv->udev, type, number);
if (udevice == NULL)
goto out;
device = _g_udev_device_new (udevice);
udev_device_unref (udevice);
out:
return device;
}
/**
* g_udev_client_query_by_device_file:
* @client: A #GUdevClient.
* @device_file: A device file.
*
* Looks up a device for a device file.
*
* Returns: (nullable) (transfer full): A #GUdevDevice object or %NULL
* if the device was not found. Free with g_object_unref().
*/
GUdevDevice *
g_udev_client_query_by_device_file (GUdevClient *client,
const gchar *device_file)
{
struct stat stat_buf;
GUdevDevice *device;
g_return_val_if_fail (G_UDEV_IS_CLIENT (client), NULL);
g_return_val_if_fail (device_file != NULL, NULL);
device = NULL;
if (stat (device_file, &stat_buf) != 0)
goto out;
if (stat_buf.st_rdev == 0)
goto out;
if (S_ISBLK (stat_buf.st_mode))
device = g_udev_client_query_by_device_number (client, G_UDEV_DEVICE_TYPE_BLOCK, stat_buf.st_rdev);
else if (S_ISCHR (stat_buf.st_mode))
device = g_udev_client_query_by_device_number (client, G_UDEV_DEVICE_TYPE_CHAR, stat_buf.st_rdev);
out:
return device;
}
/**
* g_udev_client_query_by_sysfs_path:
* @client: A #GUdevClient.
* @sysfs_path: A sysfs path.
*
* Looks up a device for a sysfs path.
*
* Returns: (nullable) (transfer full): A #GUdevDevice object or %NULL
* if the device was not found. Free with g_object_unref().
*/
GUdevDevice *
g_udev_client_query_by_sysfs_path (GUdevClient *client,
const gchar *sysfs_path)
{
struct udev_device *udevice;
GUdevDevice *device;
g_return_val_if_fail (G_UDEV_IS_CLIENT (client), NULL);
g_return_val_if_fail (sysfs_path != NULL, NULL);
device = NULL;
udevice = udev_device_new_from_syspath (client->priv->udev, sysfs_path);
if (udevice == NULL)
goto out;
device = _g_udev_device_new (udevice);
udev_device_unref (udevice);
out:
return device;
}
/**
* g_udev_client_query_by_subsystem_and_name:
* @client: A #GUdevClient.
* @subsystem: A subsystem name.
* @name: The name of the device.
*
* Looks up a device for a subsystem and name.
*
* Returns: (nullable) (transfer full): A #GUdevDevice object or %NULL
* if the device was not found. Free with g_object_unref().
*/
GUdevDevice *
g_udev_client_query_by_subsystem_and_name (GUdevClient *client,
const gchar *subsystem,
const gchar *name)
{
struct udev_device *udevice;
GUdevDevice *device;
g_return_val_if_fail (G_UDEV_IS_CLIENT (client), NULL);
g_return_val_if_fail (subsystem != NULL, NULL);
g_return_val_if_fail (name != NULL, NULL);
device = NULL;
udevice = udev_device_new_from_subsystem_sysname (client->priv->udev, subsystem, name);
if (udevice == NULL)
goto out;
device = _g_udev_device_new (udevice);
udev_device_unref (udevice);
out:
return device;
}
struct udev *
_g_udev_client_get_udev (GUdevClient *client)
{
g_return_val_if_fail (G_UDEV_IS_CLIENT (client), NULL);
return client->priv->udev;
}

View File

@ -1,99 +0,0 @@
/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
*
* Copyright (C) 2008 David Zeuthen <davidz@redhat.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#if !defined (_GUDEV_COMPILATION) && !defined(_GUDEV_INSIDE_GUDEV_H)
#error "Only <gudev/gudev.h> can be included directly, this file may disappear or change contents."
#endif
#ifndef __G_UDEV_CLIENT_H__
#define __G_UDEV_CLIENT_H__
#include <gudev/gudevtypes.h>
G_BEGIN_DECLS
#define G_UDEV_TYPE_CLIENT (g_udev_client_get_type ())
#define G_UDEV_CLIENT(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_UDEV_TYPE_CLIENT, GUdevClient))
#define G_UDEV_CLIENT_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_UDEV_TYPE_CLIENT, GUdevClientClass))
#define G_UDEV_IS_CLIENT(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_UDEV_TYPE_CLIENT))
#define G_UDEV_IS_CLIENT_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_UDEV_TYPE_CLIENT))
#define G_UDEV_CLIENT_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_UDEV_TYPE_CLIENT, GUdevClientClass))
typedef struct _GUdevClientClass GUdevClientClass;
typedef struct _GUdevClientPrivate GUdevClientPrivate;
/**
* GUdevClient:
*
* The #GUdevClient struct is opaque and should not be accessed directly.
*/
struct _GUdevClient
{
GObject parent;
/*< private >*/
GUdevClientPrivate *priv;
};
/**
* GUdevClientClass:
* @parent_class: Parent class.
* @uevent: Signal class handler for the #GUdevClient::uevent signal.
*
* Class structure for #GUdevClient.
*/
struct _GUdevClientClass
{
GObjectClass parent_class;
/* signals */
void (*uevent) (GUdevClient *client,
const gchar *action,
GUdevDevice *device);
/*< private >*/
/* Padding for future expansion */
void (*reserved1) (void);
void (*reserved2) (void);
void (*reserved3) (void);
void (*reserved4) (void);
void (*reserved5) (void);
void (*reserved6) (void);
void (*reserved7) (void);
void (*reserved8) (void);
};
GType g_udev_client_get_type (void) G_GNUC_CONST;
GUdevClient *g_udev_client_new (const gchar* const *subsystems);
GList *g_udev_client_query_by_subsystem (GUdevClient *client,
const gchar *subsystem);
GUdevDevice *g_udev_client_query_by_device_number (GUdevClient *client,
GUdevDeviceType type,
GUdevDeviceNumber number);
GUdevDevice *g_udev_client_query_by_device_file (GUdevClient *client,
const gchar *device_file);
GUdevDevice *g_udev_client_query_by_sysfs_path (GUdevClient *client,
const gchar *sysfs_path);
GUdevDevice *g_udev_client_query_by_subsystem_and_name (GUdevClient *client,
const gchar *subsystem,
const gchar *name);
G_END_DECLS
#endif /* __G_UDEV_CLIENT_H__ */

File diff suppressed because it is too large Load Diff

View File

@ -1,130 +0,0 @@
/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
*
* Copyright (C) 2008 David Zeuthen <davidz@redhat.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#if !defined (_GUDEV_COMPILATION) && !defined(_GUDEV_INSIDE_GUDEV_H)
#error "Only <gudev/gudev.h> can be included directly, this file may disappear or change contents."
#endif
#ifndef __G_UDEV_DEVICE_H__
#define __G_UDEV_DEVICE_H__
#include <gudev/gudevtypes.h>
G_BEGIN_DECLS
#define G_UDEV_TYPE_DEVICE (g_udev_device_get_type ())
#define G_UDEV_DEVICE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_UDEV_TYPE_DEVICE, GUdevDevice))
#define G_UDEV_DEVICE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_UDEV_TYPE_DEVICE, GUdevDeviceClass))
#define G_UDEV_IS_DEVICE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_UDEV_TYPE_DEVICE))
#define G_UDEV_IS_DEVICE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_UDEV_TYPE_DEVICE))
#define G_UDEV_DEVICE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_UDEV_TYPE_DEVICE, GUdevDeviceClass))
typedef struct _GUdevDeviceClass GUdevDeviceClass;
typedef struct _GUdevDevicePrivate GUdevDevicePrivate;
/**
* GUdevDevice:
*
* The #GUdevDevice struct is opaque and should not be accessed directly.
*/
struct _GUdevDevice
{
GObject parent;
/*< private >*/
GUdevDevicePrivate *priv;
};
/**
* GUdevDeviceClass:
* @parent_class: Parent class.
*
* Class structure for #GUdevDevice.
*/
struct _GUdevDeviceClass
{
GObjectClass parent_class;
/*< private >*/
/* Padding for future expansion */
void (*reserved1) (void);
void (*reserved2) (void);
void (*reserved3) (void);
void (*reserved4) (void);
void (*reserved5) (void);
void (*reserved6) (void);
void (*reserved7) (void);
void (*reserved8) (void);
};
GType g_udev_device_get_type (void) G_GNUC_CONST;
gboolean g_udev_device_get_is_initialized (GUdevDevice *device);
guint64 g_udev_device_get_usec_since_initialized (GUdevDevice *device);
const gchar *g_udev_device_get_subsystem (GUdevDevice *device);
const gchar *g_udev_device_get_devtype (GUdevDevice *device);
const gchar *g_udev_device_get_name (GUdevDevice *device);
const gchar *g_udev_device_get_number (GUdevDevice *device);
const gchar *g_udev_device_get_sysfs_path (GUdevDevice *device);
const gchar *g_udev_device_get_driver (GUdevDevice *device);
const gchar *g_udev_device_get_action (GUdevDevice *device);
guint64 g_udev_device_get_seqnum (GUdevDevice *device);
GUdevDeviceType g_udev_device_get_device_type (GUdevDevice *device);
GUdevDeviceNumber g_udev_device_get_device_number (GUdevDevice *device);
const gchar *g_udev_device_get_device_file (GUdevDevice *device);
const gchar* const *g_udev_device_get_device_file_symlinks (GUdevDevice *device);
GUdevDevice *g_udev_device_get_parent (GUdevDevice *device);
GUdevDevice *g_udev_device_get_parent_with_subsystem (GUdevDevice *device,
const gchar *subsystem,
const gchar *devtype);
const gchar* const *g_udev_device_get_property_keys (GUdevDevice *device);
gboolean g_udev_device_has_property (GUdevDevice *device,
const gchar *key);
const gchar *g_udev_device_get_property (GUdevDevice *device,
const gchar *key);
gint g_udev_device_get_property_as_int (GUdevDevice *device,
const gchar *key);
guint64 g_udev_device_get_property_as_uint64 (GUdevDevice *device,
const gchar *key);
gdouble g_udev_device_get_property_as_double (GUdevDevice *device,
const gchar *key);
gboolean g_udev_device_get_property_as_boolean (GUdevDevice *device,
const gchar *key);
const gchar* const *g_udev_device_get_property_as_strv (GUdevDevice *device,
const gchar *key);
const gchar* const *g_udev_device_get_sysfs_attr_keys (GUdevDevice *device);
gboolean g_udev_device_has_sysfs_attr (GUdevDevice *device,
const gchar *key);
const gchar *g_udev_device_get_sysfs_attr (GUdevDevice *device,
const gchar *name);
gint g_udev_device_get_sysfs_attr_as_int (GUdevDevice *device,
const gchar *name);
guint64 g_udev_device_get_sysfs_attr_as_uint64 (GUdevDevice *device,
const gchar *name);
gdouble g_udev_device_get_sysfs_attr_as_double (GUdevDevice *device,
const gchar *name);
gboolean g_udev_device_get_sysfs_attr_as_boolean (GUdevDevice *device,
const gchar *name);
const gchar* const *g_udev_device_get_sysfs_attr_as_strv (GUdevDevice *device,
const gchar *name);
const gchar* const *g_udev_device_get_tags (GUdevDevice *device);
G_END_DECLS
#endif /* __G_UDEV_DEVICE_H__ */

View File

@ -1,429 +0,0 @@
/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
*
* Copyright (C) 2008-2010 David Zeuthen <davidz@redhat.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <stdlib.h>
#include <string.h>
#include "gudevclient.h"
#include "gudevenumerator.h"
#include "gudevdevice.h"
#include "gudevmarshal.h"
#include "gudevprivate.h"
/**
* SECTION:gudevenumerator
* @short_description: Lookup and sort devices
*
* #GUdevEnumerator is used to lookup and sort devices.
*
* Since: 165
*/
struct _GUdevEnumeratorPrivate
{
GUdevClient *client;
struct udev_enumerate *e;
};
enum
{
PROP_0,
PROP_CLIENT,
};
G_DEFINE_TYPE (GUdevEnumerator, g_udev_enumerator, G_TYPE_OBJECT)
/* ---------------------------------------------------------------------------------------------------- */
static void
g_udev_enumerator_finalize (GObject *object)
{
GUdevEnumerator *enumerator = G_UDEV_ENUMERATOR (object);
if (enumerator->priv->client != NULL)
{
g_object_unref (enumerator->priv->client);
enumerator->priv->client = NULL;
}
if (enumerator->priv->e != NULL)
{
udev_enumerate_unref (enumerator->priv->e);
enumerator->priv->e = NULL;
}
if (G_OBJECT_CLASS (g_udev_enumerator_parent_class)->finalize != NULL)
G_OBJECT_CLASS (g_udev_enumerator_parent_class)->finalize (object);
}
static void
g_udev_enumerator_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
GUdevEnumerator *enumerator = G_UDEV_ENUMERATOR (object);
switch (prop_id)
{
case PROP_CLIENT:
if (enumerator->priv->client != NULL)
g_object_unref (enumerator->priv->client);
enumerator->priv->client = g_value_dup_object (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
g_udev_enumerator_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
GUdevEnumerator *enumerator = G_UDEV_ENUMERATOR (object);
switch (prop_id)
{
case PROP_CLIENT:
g_value_set_object (value, enumerator->priv->client);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
g_udev_enumerator_constructed (GObject *object)
{
GUdevEnumerator *enumerator = G_UDEV_ENUMERATOR (object);
g_assert (G_UDEV_IS_CLIENT (enumerator->priv->client));
enumerator->priv->e = udev_enumerate_new (_g_udev_client_get_udev (enumerator->priv->client));
if (G_OBJECT_CLASS (g_udev_enumerator_parent_class)->constructed != NULL)
G_OBJECT_CLASS (g_udev_enumerator_parent_class)->constructed (object);
}
static void
g_udev_enumerator_class_init (GUdevEnumeratorClass *klass)
{
GObjectClass *gobject_class = (GObjectClass *) klass;
gobject_class->finalize = g_udev_enumerator_finalize;
gobject_class->set_property = g_udev_enumerator_set_property;
gobject_class->get_property = g_udev_enumerator_get_property;
gobject_class->constructed = g_udev_enumerator_constructed;
/**
* GUdevEnumerator:client:
*
* The #GUdevClient to enumerate devices from.
*
* Since: 165
*/
g_object_class_install_property (gobject_class,
PROP_CLIENT,
g_param_spec_object ("client",
"The client to enumerate devices from",
"The client to enumerate devices from",
G_UDEV_TYPE_CLIENT,
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_READWRITE));
g_type_class_add_private (klass, sizeof (GUdevEnumeratorPrivate));
}
static void
g_udev_enumerator_init (GUdevEnumerator *enumerator)
{
enumerator->priv = G_TYPE_INSTANCE_GET_PRIVATE (enumerator,
G_UDEV_TYPE_ENUMERATOR,
GUdevEnumeratorPrivate);
}
/**
* g_udev_enumerator_new:
* @client: A #GUdevClient to enumerate devices from.
*
* Constructs a #GUdevEnumerator object that can be used to enumerate
* and sort devices. Use the add_match_*() and add_nomatch_*() methods
* and execute the query to get a list of devices with
* g_udev_enumerator_execute().
*
* Returns: A new #GUdevEnumerator object. Free with g_object_unref().
*
* Since: 165
*/
GUdevEnumerator *
g_udev_enumerator_new (GUdevClient *client)
{
g_return_val_if_fail (G_UDEV_IS_CLIENT (client), NULL);
return G_UDEV_ENUMERATOR (g_object_new (G_UDEV_TYPE_ENUMERATOR, "client", client, NULL));
}
/**
* g_udev_enumerator_add_match_subsystem:
* @enumerator: A #GUdevEnumerator.
* @subsystem: Wildcard for subsystem name e.g. 'scsi' or 'a*'.
*
* All returned devices will match the given @subsystem.
*
* Returns: (transfer none): The passed in @enumerator.
*
* Since: 165
*/
GUdevEnumerator *
g_udev_enumerator_add_match_subsystem (GUdevEnumerator *enumerator,
const gchar *subsystem)
{
g_return_val_if_fail (G_UDEV_IS_ENUMERATOR (enumerator), NULL);
g_return_val_if_fail (subsystem != NULL, NULL);
udev_enumerate_add_match_subsystem (enumerator->priv->e, subsystem);
return enumerator;
}
/**
* g_udev_enumerator_add_nomatch_subsystem:
* @enumerator: A #GUdevEnumerator.
* @subsystem: Wildcard for subsystem name e.g. 'scsi' or 'a*'.
*
* All returned devices will not match the given @subsystem.
*
* Returns: (transfer none): The passed in @enumerator.
*
* Since: 165
*/
GUdevEnumerator *
g_udev_enumerator_add_nomatch_subsystem (GUdevEnumerator *enumerator,
const gchar *subsystem)
{
g_return_val_if_fail (G_UDEV_IS_ENUMERATOR (enumerator), NULL);
g_return_val_if_fail (subsystem != NULL, NULL);
udev_enumerate_add_nomatch_subsystem (enumerator->priv->e, subsystem);
return enumerator;
}
/**
* g_udev_enumerator_add_match_sysfs_attr:
* @enumerator: A #GUdevEnumerator.
* @name: Wildcard filter for sysfs attribute key.
* @value: Wildcard filter for sysfs attribute value.
*
* All returned devices will have a sysfs attribute matching the given @name and @value.
*
* Returns: (transfer none): The passed in @enumerator.
*
* Since: 165
*/
GUdevEnumerator *
g_udev_enumerator_add_match_sysfs_attr (GUdevEnumerator *enumerator,
const gchar *name,
const gchar *value)
{
g_return_val_if_fail (G_UDEV_IS_ENUMERATOR (enumerator), NULL);
g_return_val_if_fail (name != NULL, NULL);
g_return_val_if_fail (value != NULL, NULL);
udev_enumerate_add_match_sysattr (enumerator->priv->e, name, value);
return enumerator;
}
/**
* g_udev_enumerator_add_nomatch_sysfs_attr:
* @enumerator: A #GUdevEnumerator.
* @name: Wildcard filter for sysfs attribute key.
* @value: Wildcard filter for sysfs attribute value.
*
* All returned devices will not have a sysfs attribute matching the given @name and @value.
*
* Returns: (transfer none): The passed in @enumerator.
*
* Since: 165
*/
GUdevEnumerator *
g_udev_enumerator_add_nomatch_sysfs_attr (GUdevEnumerator *enumerator,
const gchar *name,
const gchar *value)
{
g_return_val_if_fail (G_UDEV_IS_ENUMERATOR (enumerator), NULL);
g_return_val_if_fail (name != NULL, NULL);
g_return_val_if_fail (value != NULL, NULL);
udev_enumerate_add_nomatch_sysattr (enumerator->priv->e, name, value);
return enumerator;
}
/**
* g_udev_enumerator_add_match_property:
* @enumerator: A #GUdevEnumerator.
* @name: Wildcard filter for property name.
* @value: Wildcard filter for property value.
*
* All returned devices will have a property matching the given @name and @value.
*
* Returns: (transfer none): The passed in @enumerator.
*
* Since: 165
*/
GUdevEnumerator *
g_udev_enumerator_add_match_property (GUdevEnumerator *enumerator,
const gchar *name,
const gchar *value)
{
g_return_val_if_fail (G_UDEV_IS_ENUMERATOR (enumerator), NULL);
g_return_val_if_fail (name != NULL, NULL);
g_return_val_if_fail (value != NULL, NULL);
udev_enumerate_add_match_property (enumerator->priv->e, name, value);
return enumerator;
}
/**
* g_udev_enumerator_add_match_name:
* @enumerator: A #GUdevEnumerator.
* @name: Wildcard filter for kernel name e.g. "sda*".
*
* All returned devices will match the given @name.
*
* Returns: (transfer none): The passed in @enumerator.
*
* Since: 165
*/
GUdevEnumerator *
g_udev_enumerator_add_match_name (GUdevEnumerator *enumerator,
const gchar *name)
{
g_return_val_if_fail (G_UDEV_IS_ENUMERATOR (enumerator), NULL);
g_return_val_if_fail (name != NULL, NULL);
udev_enumerate_add_match_sysname (enumerator->priv->e, name);
return enumerator;
}
/**
* g_udev_enumerator_add_sysfs_path:
* @enumerator: A #GUdevEnumerator.
* @sysfs_path: A sysfs path, e.g. "/sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda"
*
* Add a device to the list of devices, to retrieve it back sorted in dependency order.
*
* Returns: (transfer none): The passed in @enumerator.
*
* Since: 165
*/
GUdevEnumerator *
g_udev_enumerator_add_sysfs_path (GUdevEnumerator *enumerator,
const gchar *sysfs_path)
{
g_return_val_if_fail (G_UDEV_IS_ENUMERATOR (enumerator), NULL);
g_return_val_if_fail (sysfs_path != NULL, NULL);
udev_enumerate_add_syspath (enumerator->priv->e, sysfs_path);
return enumerator;
}
/**
* g_udev_enumerator_add_match_tag:
* @enumerator: A #GUdevEnumerator.
* @tag: A udev tag e.g. "udev-acl".
*
* All returned devices will match the given @tag.
*
* Returns: (transfer none): The passed in @enumerator.
*
* Since: 165
*/
GUdevEnumerator *
g_udev_enumerator_add_match_tag (GUdevEnumerator *enumerator,
const gchar *tag)
{
g_return_val_if_fail (G_UDEV_IS_ENUMERATOR (enumerator), NULL);
g_return_val_if_fail (tag != NULL, NULL);
udev_enumerate_add_match_tag (enumerator->priv->e, tag);
return enumerator;
}
/**
* g_udev_enumerator_add_match_is_initialized:
* @enumerator: A #GUdevEnumerator.
*
* All returned devices will be initialized.
*
* Returns: (transfer none): The passed in @enumerator.
*
* Since: 165
*/
GUdevEnumerator *
g_udev_enumerator_add_match_is_initialized (GUdevEnumerator *enumerator)
{
g_return_val_if_fail (G_UDEV_IS_ENUMERATOR (enumerator), NULL);
udev_enumerate_add_match_is_initialized (enumerator->priv->e);
return enumerator;
}
/**
* g_udev_enumerator_execute:
* @enumerator: A #GUdevEnumerator.
*
* Executes the query in @enumerator.
*
* Returns: (element-type GUdevDevice) (transfer full): A list of #GUdevDevice objects. The caller should free the result by using g_object_unref() on each element in the list and then g_list_free() on the list.
*
* Since: 165
*/
GList *
g_udev_enumerator_execute (GUdevEnumerator *enumerator)
{
GList *ret;
struct udev_list_entry *l, *devices;
g_return_val_if_fail (G_UDEV_IS_ENUMERATOR (enumerator), NULL);
ret = NULL;
/* retrieve the list */
udev_enumerate_scan_devices (enumerator->priv->e);
devices = udev_enumerate_get_list_entry (enumerator->priv->e);
for (l = devices; l != NULL; l = udev_list_entry_get_next (l))
{
struct udev_device *udevice;
GUdevDevice *device;
udevice = udev_device_new_from_syspath (udev_enumerate_get_udev (enumerator->priv->e),
udev_list_entry_get_name (l));
if (udevice == NULL)
continue;
device = _g_udev_device_new (udevice);
udev_device_unref (udevice);
ret = g_list_prepend (ret, device);
}
ret = g_list_reverse (ret);
return ret;
}

View File

@ -1,106 +0,0 @@
/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
*
* Copyright (C) 2008-2010 David Zeuthen <davidz@redhat.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#if !defined (_GUDEV_COMPILATION) && !defined(_GUDEV_INSIDE_GUDEV_H)
#error "Only <gudev/gudev.h> can be included directly, this file may disappear or change contents."
#endif
#ifndef __G_UDEV_ENUMERATOR_H__
#define __G_UDEV_ENUMERATOR_H__
#include <gudev/gudevtypes.h>
G_BEGIN_DECLS
#define G_UDEV_TYPE_ENUMERATOR (g_udev_enumerator_get_type ())
#define G_UDEV_ENUMERATOR(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_UDEV_TYPE_ENUMERATOR, GUdevEnumerator))
#define G_UDEV_ENUMERATOR_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_UDEV_TYPE_ENUMERATOR, GUdevEnumeratorClass))
#define G_UDEV_IS_ENUMERATOR(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_UDEV_TYPE_ENUMERATOR))
#define G_UDEV_IS_ENUMERATOR_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_UDEV_TYPE_ENUMERATOR))
#define G_UDEV_ENUMERATOR_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_UDEV_TYPE_ENUMERATOR, GUdevEnumeratorClass))
typedef struct _GUdevEnumeratorClass GUdevEnumeratorClass;
typedef struct _GUdevEnumeratorPrivate GUdevEnumeratorPrivate;
/**
* GUdevEnumerator:
*
* The #GUdevEnumerator struct is opaque and should not be accessed directly.
*
* Since: 165
*/
struct _GUdevEnumerator
{
GObject parent;
/*< private >*/
GUdevEnumeratorPrivate *priv;
};
/**
* GUdevEnumeratorClass:
* @parent_class: Parent class.
*
* Class structure for #GUdevEnumerator.
*
* Since: 165
*/
struct _GUdevEnumeratorClass
{
GObjectClass parent_class;
/*< private >*/
/* Padding for future expansion */
void (*reserved1) (void);
void (*reserved2) (void);
void (*reserved3) (void);
void (*reserved4) (void);
void (*reserved5) (void);
void (*reserved6) (void);
void (*reserved7) (void);
void (*reserved8) (void);
};
GType g_udev_enumerator_get_type (void) G_GNUC_CONST;
GUdevEnumerator *g_udev_enumerator_new (GUdevClient *client);
GUdevEnumerator *g_udev_enumerator_add_match_subsystem (GUdevEnumerator *enumerator,
const gchar *subsystem);
GUdevEnumerator *g_udev_enumerator_add_nomatch_subsystem (GUdevEnumerator *enumerator,
const gchar *subsystem);
GUdevEnumerator *g_udev_enumerator_add_match_sysfs_attr (GUdevEnumerator *enumerator,
const gchar *name,
const gchar *value);
GUdevEnumerator *g_udev_enumerator_add_nomatch_sysfs_attr (GUdevEnumerator *enumerator,
const gchar *name,
const gchar *value);
GUdevEnumerator *g_udev_enumerator_add_match_property (GUdevEnumerator *enumerator,
const gchar *name,
const gchar *value);
GUdevEnumerator *g_udev_enumerator_add_match_name (GUdevEnumerator *enumerator,
const gchar *name);
GUdevEnumerator *g_udev_enumerator_add_match_tag (GUdevEnumerator *enumerator,
const gchar *tag);
GUdevEnumerator *g_udev_enumerator_add_match_is_initialized (GUdevEnumerator *enumerator);
GUdevEnumerator *g_udev_enumerator_add_sysfs_path (GUdevEnumerator *enumerator,
const gchar *sysfs_path);
GList *g_udev_enumerator_execute (GUdevEnumerator *enumerator);
G_END_DECLS
#endif /* __G_UDEV_ENUMERATOR_H__ */

View File

@ -1,48 +0,0 @@
/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
*
* Copyright (C) 2008 David Zeuthen <davidz@redhat.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#if !defined (_GUDEV_COMPILATION) && !defined(_GUDEV_INSIDE_GUDEV_H)
#error "Only <gudev/gudev.h> can be included directly, this file may disappear or change contents."
#endif
#ifndef __G_UDEV_ENUMS_H__
#define __G_UDEV_ENUMS_H__
#include <glib-object.h>
G_BEGIN_DECLS
/**
* GUdevDeviceType:
* @G_UDEV_DEVICE_TYPE_NONE: Device does not have a device file.
* @G_UDEV_DEVICE_TYPE_BLOCK: Device is a block device.
* @G_UDEV_DEVICE_TYPE_CHAR: Device is a character device.
*
* Enumeration used to specify a the type of a device.
*/
typedef enum
{
G_UDEV_DEVICE_TYPE_NONE = 0,
G_UDEV_DEVICE_TYPE_BLOCK = 'b',
G_UDEV_DEVICE_TYPE_CHAR = 'c',
} GUdevDeviceType;
G_END_DECLS
#endif /* __G_UDEV_ENUMS_H__ */

View File

@ -1,39 +0,0 @@
/*** BEGIN file-header ***/
#include <gudev.h>
/*** END file-header ***/
/*** BEGIN file-production ***/
/* enumerations from "@filename@" */
/*** END file-production ***/
/*** BEGIN value-header ***/
GType
@enum_name@_get_type (void)
{
static volatile gsize g_define_type_id__volatile = 0;
if (g_once_init_enter (&g_define_type_id__volatile))
{
static const G@Type@Value values[] = {
/*** END value-header ***/
/*** BEGIN value-production ***/
{ @VALUENAME@, "@VALUENAME@", "@valuenick@" },
/*** END value-production ***/
/*** BEGIN value-tail ***/
{ 0, NULL, NULL }
};
GType g_define_type_id =
g_@type@_register_static (g_intern_static_string ("@EnumName@"), values);
g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
}
return g_define_type_id__volatile;
}
/*** END value-tail ***/
/*** BEGIN file-tail ***/
/*** END file-tail ***/

View File

@ -1,24 +0,0 @@
/*** BEGIN file-header ***/
#ifndef __GUDEV_ENUM_TYPES_H__
#define __GUDEV_ENUM_TYPES_H__
#include <glib-object.h>
G_BEGIN_DECLS
/*** END file-header ***/
/*** BEGIN file-production ***/
/* enumerations from "@filename@" */
/*** END file-production ***/
/*** BEGIN value-header ***/
GType @enum_name@_get_type (void) G_GNUC_CONST;
#define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (@enum_name@_get_type ())
/*** END value-header ***/
/*** BEGIN file-tail ***/
G_END_DECLS
#endif /* __GUDEV_ENUM_TYPES_H__ */
/*** END file-tail ***/

View File

@ -1 +0,0 @@
VOID:STRING,OBJECT

View File

@ -1,40 +0,0 @@
/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
*
* Copyright (C) 2008 David Zeuthen <davidz@redhat.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#if !defined (_GUDEV_COMPILATION) && !defined(_GUDEV_INSIDE_GUDEV_H)
#error "Only <gudev/gudev.h> can be included directly, this file may disappear or change contents."
#endif
#ifndef __G_UDEV_PRIVATE_H__
#define __G_UDEV_PRIVATE_H__
#include <gudev/gudevtypes.h>
#include <libudev.h>
G_BEGIN_DECLS
GUdevDevice *
_g_udev_device_new (struct udev_device *udevice);
struct udev *_g_udev_client_get_udev (GUdevClient *client);
G_END_DECLS
#endif /* __G_UDEV_PRIVATE_H__ */

View File

@ -1,50 +0,0 @@
/* -*- Mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*-
*
* Copyright (C) 2008 David Zeuthen <davidz@redhat.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#if !defined (_GUDEV_COMPILATION) && !defined(_GUDEV_INSIDE_GUDEV_H)
#error "Only <gudev/gudev.h> can be included directly, this file may disappear or change contents."
#endif
#ifndef __G_UDEV_TYPES_H__
#define __G_UDEV_TYPES_H__
#include <gudev/gudevenums.h>
#include <sys/types.h>
G_BEGIN_DECLS
typedef struct _GUdevClient GUdevClient;
typedef struct _GUdevDevice GUdevDevice;
typedef struct _GUdevEnumerator GUdevEnumerator;
/**
* GUdevDeviceNumber:
*
* Corresponds to the standard #dev_t type as defined by POSIX (Until
* bug 584517 is resolved this work-around is needed).
*/
#ifdef _GUDEV_WORK_AROUND_DEV_T_BUG
typedef guint64 GUdevDeviceNumber; /* __UQUAD_TYPE */
#else
typedef dev_t GUdevDeviceNumber;
#endif
G_END_DECLS
#endif /* __G_UDEV_TYPES_H__ */

View File

@ -1,68 +0,0 @@
/***
This file is part of systemd.
systemd is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.
***/
{
global:
g_udev_client_get_type;
g_udev_client_new;
g_udev_client_query_by_device_file;
g_udev_client_query_by_device_number;
g_udev_client_query_by_subsystem;
g_udev_client_query_by_subsystem_and_name;
g_udev_client_query_by_sysfs_path;
g_udev_device_get_action;
g_udev_device_get_device_file;
g_udev_device_get_device_file_symlinks;
g_udev_device_get_device_number;
g_udev_device_get_device_type;
g_udev_device_get_devtype;
g_udev_device_get_driver;
g_udev_device_get_is_initialized;
g_udev_device_get_name;
g_udev_device_get_number;
g_udev_device_get_parent;
g_udev_device_get_parent_with_subsystem;
g_udev_device_get_property;
g_udev_device_get_property_as_boolean;
g_udev_device_get_property_as_double;
g_udev_device_get_property_as_int;
g_udev_device_get_property_as_strv;
g_udev_device_get_property_as_uint64;
g_udev_device_get_property_keys;
g_udev_device_get_seqnum;
g_udev_device_get_subsystem;
g_udev_device_get_sysfs_attr;
g_udev_device_get_sysfs_attr_as_boolean;
g_udev_device_get_sysfs_attr_as_double;
g_udev_device_get_sysfs_attr_as_int;
g_udev_device_get_sysfs_attr_as_strv;
g_udev_device_get_sysfs_attr_as_uint64;
g_udev_device_get_sysfs_attr_keys;
g_udev_device_get_sysfs_path;
g_udev_device_get_tags;
g_udev_device_get_type;
g_udev_device_get_usec_since_initialized;
g_udev_device_has_property;
g_udev_device_has_sysfs_attr;
g_udev_device_type_get_type;
g_udev_enumerator_add_match_is_initialized;
g_udev_enumerator_add_match_name;
g_udev_enumerator_add_match_property;
g_udev_enumerator_add_match_subsystem;
g_udev_enumerator_add_match_sysfs_attr;
g_udev_enumerator_add_match_tag;
g_udev_enumerator_add_nomatch_subsystem;
g_udev_enumerator_add_nomatch_sysfs_attr;
g_udev_enumerator_add_sysfs_path;
g_udev_enumerator_execute;
g_udev_enumerator_get_type;
g_udev_enumerator_new;
local:
*;
};

View File

@ -1,38 +0,0 @@
#!/usr/bin/env seed
const GLib = imports.gi.GLib;
const GUdev = imports.gi.GUdev;
function print_device(device) {
print(" initialized: " + device.get_is_initialized());
print(" usec since initialized: " + device.get_usec_since_initialized());
print(" subsystem: " + device.get_subsystem());
print(" devtype: " + device.get_devtype());
print(" name: " + device.get_name());
print(" number: " + device.get_number());
print(" sysfs_path: " + device.get_sysfs_path());
print(" driver: " + device.get_driver());
print(" action: " + device.get_action());
print(" seqnum: " + device.get_seqnum());
print(" device type: " + device.get_device_type());
print(" device number: " + device.get_device_number());
print(" device file: " + device.get_device_file());
print(" device file symlinks: " + device.get_device_file_symlinks());
print(" tags: " + device.get_tags());
var keys = device.get_property_keys();
for (var n = 0; n < keys.length; n++) {
print(" " + keys[n] + "=" + device.get_property(keys[n]));
}
}
var client = new GUdev.Client({subsystems: []});
var enumerator = new GUdev.Enumerator({client: client});
enumerator.add_match_subsystem('b*')
var devices = enumerator.execute();
for (var n=0; n < devices.length; n++) {
var device = devices[n];
print_device(device);
print("");
}

View File

@ -1,72 +0,0 @@
#!/usr/bin/env seed
// seed example
const GLib = imports.gi.GLib;
const GUdev = imports.gi.GUdev;
function print_device (device) {
print (" subsystem: " + device.get_subsystem ());
print (" devtype: " + device.get_devtype ());
print (" name: " + device.get_name ());
print (" number: " + device.get_number ());
print (" sysfs_path: " + device.get_sysfs_path ());
print (" driver: " + device.get_driver ());
print (" action: " + device.get_action ());
print (" seqnum: " + device.get_seqnum ());
print (" device type: " + device.get_device_type ());
print (" device number: " + device.get_device_number ());
print (" device file: " + device.get_device_file ());
print (" device file symlinks: " + device.get_device_file_symlinks ());
print (" foo: " + device.get_sysfs_attr_as_strv ("stat"));
var keys = device.get_property_keys ();
for (var n = 0; n < keys.length; n++) {
print (" " + keys[n] + "=" + device.get_property (keys[n]));
}
}
function on_uevent (client, action, device) {
print ("action " + action + " on device " + device.get_sysfs_path());
print_device (device);
print ("");
}
var client = new GUdev.Client ({subsystems: ["block", "usb/usb_interface"]});
client.signal.connect ("uevent", on_uevent);
var block_devices = client.query_by_subsystem ("block");
for (var n = 0; n < block_devices.length; n++) {
print ("block device: " + block_devices[n].get_device_file ());
}
var d;
d = client.query_by_device_number (GUdev.DeviceType.BLOCK, 0x0810);
if (d == null) {
print ("query_by_device_number 0x810 -> null");
} else {
print ("query_by_device_number 0x810 -> " + d.get_device_file ());
dd = d.get_parent_with_subsystem ("usb", null);
print_device (dd);
print ("--------------------------------------------------------------------------");
while (d != null) {
print_device (d);
print ("");
d = d.get_parent ();
}
}
d = client.query_by_sysfs_path ("/sys/block/sda/sda1");
print ("query_by_sysfs_path (\"/sys/block/sda1\") -> " + d.get_device_file ());
d = client.query_by_subsystem_and_name ("block", "sda2");
print ("query_by_subsystem_and_name (\"block\", \"sda2\") -> " + d.get_device_file ());
d = client.query_by_device_file ("/dev/sda");
print ("query_by_device_file (\"/dev/sda\") -> " + d.get_device_file ());
d = client.query_by_device_file ("/dev/block/8:0");
print ("query_by_device_file (\"/dev/block/8:0\") -> " + d.get_device_file ());
var mainloop = GLib.main_loop_new ();
GLib.main_loop_run (mainloop);

View File

@ -4,8 +4,6 @@
<a href="../man/systemd.index.html">Index </a>·
<a href="../man/systemd.directives.html">Directives </a>·
<a href="index.html">Python </a>·
<a href="../libudev/index.html">libudev </a>·
<a href="../libudev/index.html">gudev </a>
<span style="float:right">systemd {{release}}</span>
<hr />
{% endblock %}

View File

@ -10,8 +10,6 @@ $ sudo make clean check
make[1]: Entering directory `/mnt/data/harald/git/systemd/test/TEST-01-BASIC'
Making all in .
Making all in po
Making all in docs/libudev
Making all in docs/gudev
TEST: Basic systemd setup [OK]
make[1]: Leaving directory `/mnt/data/harald/git/systemd/test/TEST-01-BASIC'
...

View File

@ -125,7 +125,7 @@ install_systemd() {
# install compiled files
(cd $TEST_BASE_DIR/..; set -x; make DESTDIR=$initdir install)
# remove unneeded documentation
rm -fr $initdir/usr/share/{man,doc,gtk-doc}
rm -fr $initdir/usr/share/{man,doc}
# we strip binaries since debug symbols increase binaries size a lot
# and it could fill the available space
strip_binaries