summaryrefslogtreecommitdiff
path: root/libkmod
diff options
context:
space:
mode:
Diffstat (limited to 'libkmod')
-rw-r--r--libkmod/README2
-rw-r--r--libkmod/docs/Makefile.am2
-rw-r--r--libkmod/docs/Makefile.in183
-rw-r--r--libkmod/docs/gtk-doc.make70
-rw-r--r--libkmod/docs/html/api-index-full.html370
-rw-r--r--libkmod/docs/html/ch01.html47
-rw-r--r--libkmod/docs/html/home.pngbin0 -> 654 bytes
-rw-r--r--libkmod/docs/html/index.html48
-rw-r--r--libkmod/docs/html/index.sgml97
-rw-r--r--libkmod/docs/html/left.pngbin0 -> 459 bytes
-rw-r--r--libkmod/docs/html/libkmod-libkmod-config.html338
-rw-r--r--libkmod/docs/html/libkmod-libkmod-list.html173
-rw-r--r--libkmod/docs/html/libkmod-libkmod-loaded.html236
-rw-r--r--libkmod/docs/html/libkmod-libkmod-module.html1353
-rw-r--r--libkmod/docs/html/libkmod-libkmod.html436
-rw-r--r--libkmod/docs/html/libkmod.devhelp293
-rw-r--r--libkmod/docs/html/right.pngbin0 -> 472 bytes
-rw-r--r--libkmod/docs/html/style.css266
-rw-r--r--libkmod/docs/html/up.pngbin0 -> 406 bytes
-rw-r--r--libkmod/docs/libkmod-overrides.txt0
-rw-r--r--libkmod/docs/version.xml1
-rw-r--r--libkmod/libkmod-array.c2
-rw-r--r--libkmod/libkmod-config.c8
-rw-r--r--libkmod/libkmod-elf.c14
-rw-r--r--libkmod/libkmod-file.c20
-rw-r--r--libkmod/libkmod-hash.c2
-rw-r--r--libkmod/libkmod-index.c18
-rw-r--r--libkmod/libkmod-index.h2
-rw-r--r--libkmod/libkmod-internal.h (renamed from libkmod/libkmod-private.h)25
-rw-r--r--libkmod/libkmod-list.c4
-rw-r--r--libkmod/libkmod-module.c165
-rw-r--r--libkmod/libkmod-signature.c141
-rw-r--r--libkmod/libkmod-util.c77
-rw-r--r--libkmod/libkmod-util.h3
-rw-r--r--libkmod/libkmod.c19
-rw-r--r--libkmod/libkmod.h2
-rw-r--r--libkmod/macro.h38
-rw-r--r--libkmod/missing.h34
38 files changed, 4092 insertions, 197 deletions
diff --git a/libkmod/README b/libkmod/README
index d0ca2fc..3e1c8dc 100644
--- a/libkmod/README
+++ b/libkmod/README
@@ -20,7 +20,7 @@ Every user should create and manage it's own library context with:
kmod_unref(ctx);
-Modules can be created with by various means:
+Modules can be created by various means:
struct kmod_module *mod;
int err;
diff --git a/libkmod/docs/Makefile.am b/libkmod/docs/Makefile.am
index 77e20d5..7c67581 100644
--- a/libkmod/docs/Makefile.am
+++ b/libkmod/docs/Makefile.am
@@ -21,7 +21,7 @@ HFILE_GLOB = $(top_srcdir)/libkmod/libkmod.h
CFILE_GLOB = $(top_srcdir)/libkmod/libkmod.c $(top_srcdir)/libkmod/libkmod-module.c $(top_srcdir)/libkmod/libkmod-list.c
IGNORE_HFILES = macro.h \
- libkmod-private.h \
+ libkmod-internal.h \
libkmod-util.h \
libkmod-array.h \
libkmod-hash.h \
diff --git a/libkmod/docs/Makefile.in b/libkmod/docs/Makefile.in
index 2a52b3d..e99e6be 100644
--- a/libkmod/docs/Makefile.in
+++ b/libkmod/docs/Makefile.in
@@ -1,7 +1,7 @@
-# Makefile.in generated by automake 1.12.5 from Makefile.am.
+# Makefile.in generated by automake 1.14 from Makefile.am.
# @configure_input@
-# Copyright (C) 1994-2012 Free Software Foundation, Inc.
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@@ -20,23 +20,51 @@
# Everything below here is generic #
####################################
VPATH = @srcdir@
-am__make_dryrun = \
- { \
- am__dry=no; \
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
- echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \
- | grep '^AM OK$$' >/dev/null || am__dry=yes;; \
- *) \
- for am__flg in $$MAKEFLAGS; do \
- case $$am__flg in \
- *=*|--*) ;; \
- *n*) am__dry=yes; break;; \
- esac; \
- done;; \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
esac; \
- test $$am__dry = yes; \
- }
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
@@ -55,9 +83,9 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
- $(srcdir)/version.xml.in \
- $(top_srcdir)/libkmod/docs/gtk-doc.make
+DIST_COMMON = $(top_srcdir)/libkmod/docs/gtk-doc.make \
+ $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+ $(srcdir)/version.xml.in
subdir = libkmod/docs
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/attributes.m4 \
@@ -90,6 +118,7 @@ am__can_run_installinfo = \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
@@ -177,6 +206,7 @@ am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
+bashcompletiondir = @bashcompletiondir@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
@@ -234,7 +264,7 @@ MKHTML_OPTIONS = --path=$(abs_srcdir)/doc --path=$(abs_builddir)/doc
HFILE_GLOB = $(top_srcdir)/libkmod/libkmod.h
CFILE_GLOB = $(top_srcdir)/libkmod/libkmod.c $(top_srcdir)/libkmod/libkmod-module.c $(top_srcdir)/libkmod/libkmod-list.c
IGNORE_HFILES = macro.h \
- libkmod-private.h \
+ libkmod-internal.h \
libkmod-util.h \
libkmod-array.h \
libkmod-hash.h \
@@ -287,6 +317,37 @@ content_files = version.xml
@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_HTML_TRUE@HTML_BUILD_STAMP = html-build.stamp
@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_PDF_FALSE@PDF_BUILD_STAMP =
@ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_PDF_TRUE@PDF_BUILD_STAMP = pdf-build.stamp
+
+#### setup ####
+@ENABLE_GTK_DOC_TRUE@GTK_DOC_V_SETUP = $(GTK_DOC_V_SETUP_$(V))
+@ENABLE_GTK_DOC_TRUE@GTK_DOC_V_SETUP_ = $(GTK_DOC_V_SETUP_$(AM_DEFAULT_VERBOSITY))
+@ENABLE_GTK_DOC_TRUE@GTK_DOC_V_SETUP_0 = @echo " DOC Preparing build";
+
+#### scan ####
+@ENABLE_GTK_DOC_TRUE@GTK_DOC_V_SCAN = $(GTK_DOC_V_SCAN_$(V))
+@ENABLE_GTK_DOC_TRUE@GTK_DOC_V_SCAN_ = $(GTK_DOC_V_SCAN_$(AM_DEFAULT_VERBOSITY))
+@ENABLE_GTK_DOC_TRUE@GTK_DOC_V_SCAN_0 = @echo " DOC Scanning header files";
+@ENABLE_GTK_DOC_TRUE@GTK_DOC_V_INTROSPECT = $(GTK_DOC_V_INTROSPECT_$(V))
+@ENABLE_GTK_DOC_TRUE@GTK_DOC_V_INTROSPECT_ = $(GTK_DOC_V_INTROSPECT_$(AM_DEFAULT_VERBOSITY))
+@ENABLE_GTK_DOC_TRUE@GTK_DOC_V_INTROSPECT_0 = @echo " DOC Introspecting gobjects";
+
+#### xml ####
+@ENABLE_GTK_DOC_TRUE@GTK_DOC_V_XML = $(GTK_DOC_V_XML_$(V))
+@ENABLE_GTK_DOC_TRUE@GTK_DOC_V_XML_ = $(GTK_DOC_V_XML_$(AM_DEFAULT_VERBOSITY))
+@ENABLE_GTK_DOC_TRUE@GTK_DOC_V_XML_0 = @echo " DOC Building XML";
+
+#### html ####
+@ENABLE_GTK_DOC_TRUE@GTK_DOC_V_HTML = $(GTK_DOC_V_HTML_$(V))
+@ENABLE_GTK_DOC_TRUE@GTK_DOC_V_HTML_ = $(GTK_DOC_V_HTML_$(AM_DEFAULT_VERBOSITY))
+@ENABLE_GTK_DOC_TRUE@GTK_DOC_V_HTML_0 = @echo " DOC Building HTML";
+@ENABLE_GTK_DOC_TRUE@GTK_DOC_V_XREF = $(GTK_DOC_V_XREF_$(V))
+@ENABLE_GTK_DOC_TRUE@GTK_DOC_V_XREF_ = $(GTK_DOC_V_XREF_$(AM_DEFAULT_VERBOSITY))
+@ENABLE_GTK_DOC_TRUE@GTK_DOC_V_XREF_0 = @echo " DOC Fixing cross-references";
+
+#### pdf ####
+@ENABLE_GTK_DOC_TRUE@GTK_DOC_V_PDF = $(GTK_DOC_V_PDF_$(V))
+@ENABLE_GTK_DOC_TRUE@GTK_DOC_V_PDF_ = $(GTK_DOC_V_PDF_$(AM_DEFAULT_VERBOSITY))
+@ENABLE_GTK_DOC_TRUE@GTK_DOC_V_PDF_0 = @echo " DOC Building PDF";
all: all-am
.SUFFIXES:
@@ -329,11 +390,9 @@ mostlyclean-libtool:
clean-libtool:
-rm -rf .libs _libs
-tags: TAGS
-TAGS:
+tags TAGS:
-ctags: CTAGS
-CTAGS:
+ctags CTAGS:
cscope cscopelist:
@@ -409,8 +468,8 @@ maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
@ENABLE_GTK_DOC_FALSE@uninstall-local:
-@ENABLE_GTK_DOC_FALSE@distclean-local:
@ENABLE_GTK_DOC_FALSE@install-data-local:
+@ENABLE_GTK_DOC_FALSE@distclean-local:
@ENABLE_GTK_DOC_FALSE@maintainer-clean-local:
@ENABLE_GTK_DOC_FALSE@clean-local:
clean: clean-am
@@ -483,18 +542,18 @@ uninstall-am: uninstall-local
.MAKE: install-am install-strip
.PHONY: all all-am all-local check check-am clean clean-generic \
- clean-libtool clean-local dist-hook distclean \
- distclean-generic distclean-libtool distclean-local distdir \
- dvi dvi-am html html-am info info-am install install-am \
- install-data install-data-am install-data-local install-dvi \
- install-dvi-am install-exec install-exec-am install-html \
- install-html-am install-info install-info-am install-man \
- install-pdf install-pdf-am install-ps install-ps-am \
- install-strip installcheck installcheck-am installdirs \
- maintainer-clean maintainer-clean-generic \
+ clean-libtool clean-local cscopelist-am ctags-am dist-hook \
+ distclean distclean-generic distclean-libtool distclean-local \
+ distdir dvi dvi-am html html-am info info-am install \
+ install-am install-data install-data-am install-data-local \
+ install-dvi install-dvi-am install-exec install-exec-am \
+ install-html install-html-am install-info install-info-am \
+ install-man install-pdf install-pdf-am install-ps \
+ install-ps-am install-strip installcheck installcheck-am \
+ installdirs maintainer-clean maintainer-clean-generic \
maintainer-clean-local mostlyclean mostlyclean-generic \
- mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
- uninstall-local
+ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
+ uninstall-am uninstall-local
@ENABLE_GTK_DOC_TRUE@all-local: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
@@ -504,32 +563,25 @@ uninstall-am: uninstall-local
@ENABLE_GTK_DOC_TRUE@$(REPORT_FILES): sgml-build.stamp
-#### setup ####
-
@ENABLE_GTK_DOC_TRUE@setup-build.stamp:
-@ENABLE_GTK_DOC_TRUE@ -@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
-@ENABLE_GTK_DOC_TRUE@ echo ' DOC Preparing build'; \
+@ENABLE_GTK_DOC_TRUE@ -$(GTK_DOC_V_SETUP)if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
@ENABLE_GTK_DOC_TRUE@ files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \
@ENABLE_GTK_DOC_TRUE@ if test "x$$files" != "x" ; then \
@ENABLE_GTK_DOC_TRUE@ for file in $$files ; do \
@ENABLE_GTK_DOC_TRUE@ test -f $(abs_srcdir)/$$file && \
-@ENABLE_GTK_DOC_TRUE@ cp -pu $(abs_srcdir)/$$file $(abs_builddir)/ || true; \
+@ENABLE_GTK_DOC_TRUE@ cp -pu $(abs_srcdir)/$$file $(abs_builddir)/$$file || true; \
@ENABLE_GTK_DOC_TRUE@ done; \
@ENABLE_GTK_DOC_TRUE@ fi; \
@ENABLE_GTK_DOC_TRUE@ fi
-@ENABLE_GTK_DOC_TRUE@ @touch setup-build.stamp
-
-#### scan ####
+@ENABLE_GTK_DOC_TRUE@ $(AM_V_at)touch setup-build.stamp
@ENABLE_GTK_DOC_TRUE@scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
-@ENABLE_GTK_DOC_TRUE@ @echo ' DOC Scanning header files'
-@ENABLE_GTK_DOC_TRUE@ @_source_dir='' ; \
+@ENABLE_GTK_DOC_TRUE@ $(GTK_DOC_V_SCAN)_source_dir='' ; \
@ENABLE_GTK_DOC_TRUE@ for i in $(DOC_SOURCE_DIR) ; do \
@ENABLE_GTK_DOC_TRUE@ _source_dir="$${_source_dir} --source-dir=$$i" ; \
@ENABLE_GTK_DOC_TRUE@ done ; \
@ENABLE_GTK_DOC_TRUE@ gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES)
-@ENABLE_GTK_DOC_TRUE@ @if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \
-@ENABLE_GTK_DOC_TRUE@ echo " DOC Introspecting gobjects"; \
+@ENABLE_GTK_DOC_TRUE@ $(GTK_DOC_V_INTROSPECT)if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \
@ENABLE_GTK_DOC_TRUE@ scanobj_options=""; \
@ENABLE_GTK_DOC_TRUE@ gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \
@ENABLE_GTK_DOC_TRUE@ if test "$(?)" = "0"; then \
@@ -544,32 +596,25 @@ uninstall-am: uninstall-local
@ENABLE_GTK_DOC_TRUE@ test -f $$i || touch $$i ; \
@ENABLE_GTK_DOC_TRUE@ done \
@ENABLE_GTK_DOC_TRUE@ fi
-@ENABLE_GTK_DOC_TRUE@ @touch scan-build.stamp
+@ENABLE_GTK_DOC_TRUE@ $(AM_V_at)touch scan-build.stamp
@ENABLE_GTK_DOC_TRUE@$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp
@ENABLE_GTK_DOC_TRUE@ @true
-#### xml ####
-
@ENABLE_GTK_DOC_TRUE@sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt $(expand_content_files)
-@ENABLE_GTK_DOC_TRUE@ @echo ' DOC Building XML'
-@ENABLE_GTK_DOC_TRUE@ @_source_dir='' ; \
+@ENABLE_GTK_DOC_TRUE@ $(GTK_DOC_V_XML)_source_dir='' ; \
@ENABLE_GTK_DOC_TRUE@ for i in $(DOC_SOURCE_DIR) ; do \
@ENABLE_GTK_DOC_TRUE@ _source_dir="$${_source_dir} --source-dir=$$i" ; \
@ENABLE_GTK_DOC_TRUE@ done ; \
@ENABLE_GTK_DOC_TRUE@ gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS)
-@ENABLE_GTK_DOC_TRUE@ @touch sgml-build.stamp
+@ENABLE_GTK_DOC_TRUE@ $(AM_V_at)touch sgml-build.stamp
@ENABLE_GTK_DOC_TRUE@sgml.stamp: sgml-build.stamp
@ENABLE_GTK_DOC_TRUE@ @true
-#### html ####
-
@ENABLE_GTK_DOC_TRUE@html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
-@ENABLE_GTK_DOC_TRUE@ @echo ' DOC Building HTML'
-@ENABLE_GTK_DOC_TRUE@ @rm -rf html
-@ENABLE_GTK_DOC_TRUE@ @mkdir html
-@ENABLE_GTK_DOC_TRUE@ @mkhtml_options=""; \
+@ENABLE_GTK_DOC_TRUE@ $(GTK_DOC_V_HTML)rm -rf html && mkdir html && \
+@ENABLE_GTK_DOC_TRUE@ mkhtml_options=""; \
@ENABLE_GTK_DOC_TRUE@ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \
@ENABLE_GTK_DOC_TRUE@ if test "$(?)" = "0"; then \
@ENABLE_GTK_DOC_TRUE@ if test "x$(V)" = "x1"; then \
@@ -590,16 +635,12 @@ uninstall-am: uninstall-local
@ENABLE_GTK_DOC_TRUE@ cp $(abs_builddir)/$$file $(abs_builddir)/html; \
@ENABLE_GTK_DOC_TRUE@ fi; \
@ENABLE_GTK_DOC_TRUE@ done;
-@ENABLE_GTK_DOC_TRUE@ @echo ' DOC Fixing cross-references'
-@ENABLE_GTK_DOC_TRUE@ @gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
-@ENABLE_GTK_DOC_TRUE@ @touch html-build.stamp
-
-#### pdf ####
+@ENABLE_GTK_DOC_TRUE@ $(GTK_DOC_V_XREF)gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
+@ENABLE_GTK_DOC_TRUE@ $(AM_V_at)touch html-build.stamp
@ENABLE_GTK_DOC_TRUE@pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
-@ENABLE_GTK_DOC_TRUE@ @echo ' DOC Building PDF'
-@ENABLE_GTK_DOC_TRUE@ @rm -f $(DOC_MODULE).pdf
-@ENABLE_GTK_DOC_TRUE@ @mkpdf_options=""; \
+@ENABLE_GTK_DOC_TRUE@ $(GTK_DOC_V_PDF)rm -f $(DOC_MODULE).pdf && \
+@ENABLE_GTK_DOC_TRUE@ mkpdf_options=""; \
@ENABLE_GTK_DOC_TRUE@ gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \
@ENABLE_GTK_DOC_TRUE@ if test "$(?)" = "0"; then \
@ENABLE_GTK_DOC_TRUE@ if test "x$(V)" = "x1"; then \
@@ -616,7 +657,7 @@ uninstall-am: uninstall-local
@ENABLE_GTK_DOC_TRUE@ done; \
@ENABLE_GTK_DOC_TRUE@ fi; \
@ENABLE_GTK_DOC_TRUE@ gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS)
-@ENABLE_GTK_DOC_TRUE@ @touch pdf-build.stamp
+@ENABLE_GTK_DOC_TRUE@ $(AM_V_at)touch pdf-build.stamp
##############
@@ -631,7 +672,7 @@ uninstall-am: uninstall-local
@ENABLE_GTK_DOC_TRUE@ rm -f $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types; \
@ENABLE_GTK_DOC_TRUE@ fi
-@ENABLE_GTK_DOC_TRUE@maintainer-clean-local: clean
+@ENABLE_GTK_DOC_TRUE@maintainer-clean-local:
@ENABLE_GTK_DOC_TRUE@ @rm -rf xml html
@ENABLE_GTK_DOC_TRUE@install-data-local:
@@ -667,7 +708,7 @@ uninstall-am: uninstall-local
#
# Require gtk-doc when making dist
#
-@ENABLE_GTK_DOC_TRUE@dist-check-gtkdoc:
+@ENABLE_GTK_DOC_TRUE@dist-check-gtkdoc: docs
#dist-check-gtkdoc:
# @echo "*** gtk-doc must be installed and enabled in order to make dist"
# @false
diff --git a/libkmod/docs/gtk-doc.make b/libkmod/docs/gtk-doc.make
index 9841de4..104c399 100644
--- a/libkmod/docs/gtk-doc.make
+++ b/libkmod/docs/gtk-doc.make
@@ -74,31 +74,40 @@ $(REPORT_FILES): sgml-build.stamp
#### setup ####
+GTK_DOC_V_SETUP=$(GTK_DOC_V_SETUP_$(V))
+GTK_DOC_V_SETUP_=$(GTK_DOC_V_SETUP_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_SETUP_0=@echo " DOC Preparing build";
+
setup-build.stamp:
- -@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
- echo ' DOC Preparing build'; \
+ -$(GTK_DOC_V_SETUP)if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \
if test "x$$files" != "x" ; then \
for file in $$files ; do \
test -f $(abs_srcdir)/$$file && \
- cp -pu $(abs_srcdir)/$$file $(abs_builddir)/ || true; \
+ cp -pu $(abs_srcdir)/$$file $(abs_builddir)/$$file || true; \
done; \
fi; \
fi
- @touch setup-build.stamp
+ $(AM_V_at)touch setup-build.stamp
#### scan ####
+GTK_DOC_V_SCAN=$(GTK_DOC_V_SCAN_$(V))
+GTK_DOC_V_SCAN_=$(GTK_DOC_V_SCAN_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_SCAN_0=@echo " DOC Scanning header files";
+
+GTK_DOC_V_INTROSPECT=$(GTK_DOC_V_INTROSPECT_$(V))
+GTK_DOC_V_INTROSPECT_=$(GTK_DOC_V_INTROSPECT_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_INTROSPECT_0=@echo " DOC Introspecting gobjects";
+
scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
- @echo ' DOC Scanning header files'
- @_source_dir='' ; \
+ $(GTK_DOC_V_SCAN)_source_dir='' ; \
for i in $(DOC_SOURCE_DIR) ; do \
_source_dir="$${_source_dir} --source-dir=$$i" ; \
done ; \
gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES)
- @if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \
- echo " DOC Introspecting gobjects"; \
+ $(GTK_DOC_V_INTROSPECT)if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \
scanobj_options=""; \
gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \
if test "$(?)" = "0"; then \
@@ -113,32 +122,41 @@ scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB)
test -f $$i || touch $$i ; \
done \
fi
- @touch scan-build.stamp
+ $(AM_V_at)touch scan-build.stamp
$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp
@true
#### xml ####
+GTK_DOC_V_XML=$(GTK_DOC_V_XML_$(V))
+GTK_DOC_V_XML_=$(GTK_DOC_V_XML_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_XML_0=@echo " DOC Building XML";
+
sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt $(expand_content_files)
- @echo ' DOC Building XML'
- @_source_dir='' ; \
+ $(GTK_DOC_V_XML)_source_dir='' ; \
for i in $(DOC_SOURCE_DIR) ; do \
_source_dir="$${_source_dir} --source-dir=$$i" ; \
done ; \
gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS)
- @touch sgml-build.stamp
+ $(AM_V_at)touch sgml-build.stamp
sgml.stamp: sgml-build.stamp
@true
#### html ####
+GTK_DOC_V_HTML=$(GTK_DOC_V_HTML_$(V))
+GTK_DOC_V_HTML_=$(GTK_DOC_V_HTML_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_HTML_0=@echo " DOC Building HTML";
+
+GTK_DOC_V_XREF=$(GTK_DOC_V_XREF_$(V))
+GTK_DOC_V_XREF_=$(GTK_DOC_V_XREF_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_XREF_0=@echo " DOC Fixing cross-references";
+
html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
- @echo ' DOC Building HTML'
- @rm -rf html
- @mkdir html
- @mkhtml_options=""; \
+ $(GTK_DOC_V_HTML)rm -rf html && mkdir html && \
+ mkhtml_options=""; \
gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \
if test "$(?)" = "0"; then \
if test "x$(V)" = "x1"; then \
@@ -159,16 +177,18 @@ html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
cp $(abs_builddir)/$$file $(abs_builddir)/html; \
fi; \
done;
- @echo ' DOC Fixing cross-references'
- @gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
- @touch html-build.stamp
+ $(GTK_DOC_V_XREF)gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
+ $(AM_V_at)touch html-build.stamp
#### pdf ####
+GTK_DOC_V_PDF=$(GTK_DOC_V_PDF_$(V))
+GTK_DOC_V_PDF_=$(GTK_DOC_V_PDF_$(AM_DEFAULT_VERBOSITY))
+GTK_DOC_V_PDF_0=@echo " DOC Building PDF";
+
pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
- @echo ' DOC Building PDF'
- @rm -f $(DOC_MODULE).pdf
- @mkpdf_options=""; \
+ $(GTK_DOC_V_PDF)rm -f $(DOC_MODULE).pdf && \
+ mkpdf_options=""; \
gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \
if test "$(?)" = "0"; then \
if test "x$(V)" = "x1"; then \
@@ -185,7 +205,7 @@ pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
done; \
fi; \
gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS)
- @touch pdf-build.stamp
+ $(AM_V_at)touch pdf-build.stamp
##############
@@ -200,7 +220,7 @@ distclean-local:
rm -f $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types; \
fi
-maintainer-clean-local: clean
+maintainer-clean-local:
@rm -rf xml html
install-data-local:
@@ -237,7 +257,7 @@ uninstall-local:
# Require gtk-doc when making dist
#
if ENABLE_GTK_DOC
-dist-check-gtkdoc:
+dist-check-gtkdoc: docs
else
dist-check-gtkdoc:
@echo "*** gtk-doc must be installed and enabled in order to make dist"
diff --git a/libkmod/docs/html/api-index-full.html b/libkmod/docs/html/api-index-full.html
new file mode 100644
index 0000000..b038bd5
--- /dev/null
+++ b/libkmod/docs/html/api-index-full.html
@@ -0,0 +1,370 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>API Index</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libkmod Reference Manual">
+<link rel="up" href="index.html" title="libkmod Reference Manual">
+<link rel="prev" href="libkmod-libkmod-loaded.html" title="libkmod-loaded">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="libkmod-libkmod-loaded.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libkmod Reference Manual</th>
+<td> </td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a class="shortcut" href="#idxC">C</a>
+  | 
+ <a class="shortcut" href="#idxD">D</a>
+  | 
+ <a class="shortcut" href="#idxG">G</a>
+  | 
+ <a class="shortcut" href="#idxL">L</a>
+  | 
+ <a class="shortcut" href="#idxM">M</a>
+  | 
+ <a class="shortcut" href="#idxN">N</a>
+  | 
+ <a class="shortcut" href="#idxR">R</a>
+  | 
+ <a class="shortcut" href="#idxS">S</a>
+  | 
+ <a class="shortcut" href="#idxU">U</a>
+  | 
+ <a class="shortcut" href="#idxV">V</a>
+</td></tr>
+</table>
+<div class="index">
+<div class="titlepage"><div><div><h1 class="title">
+<a name="api-index-full"></a>API Index</h1></div></div></div>
+<a name="idx"></a><a name="idxC"></a><h3 class="title">C</h3>
+<dt>
+<a class="link" href="libkmod-libkmod-config.html#kmod-config-get-aliases" title="kmod_config_get_aliases ()">kmod_config_get_aliases</a>, function in <a class="link" href="libkmod-libkmod-config.html" title="libkmod-config">libkmod-config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-config.html#kmod-config-get-blacklists" title="kmod_config_get_blacklists ()">kmod_config_get_blacklists</a>, function in <a class="link" href="libkmod-libkmod-config.html" title="libkmod-config">libkmod-config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-config.html#kmod-config-get-install-commands" title="kmod_config_get_install_commands ()">kmod_config_get_install_commands</a>, function in <a class="link" href="libkmod-libkmod-config.html" title="libkmod-config">libkmod-config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-config.html#kmod-config-get-options" title="kmod_config_get_options ()">kmod_config_get_options</a>, function in <a class="link" href="libkmod-libkmod-config.html" title="libkmod-config">libkmod-config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-config.html#kmod-config-get-remove-commands" title="kmod_config_get_remove_commands ()">kmod_config_get_remove_commands</a>, function in <a class="link" href="libkmod-libkmod-config.html" title="libkmod-config">libkmod-config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-config.html#kmod-config-get-softdeps" title="kmod_config_get_softdeps ()">kmod_config_get_softdeps</a>, function in <a class="link" href="libkmod-libkmod-config.html" title="libkmod-config">libkmod-config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-config.html#kmod-config-iter" title="struct kmod_config_iter">kmod_config_iter</a>, struct in <a class="link" href="libkmod-libkmod-config.html" title="libkmod-config">libkmod-config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-free-iter" title="kmod_config_iter_free_iter ()">kmod_config_iter_free_iter</a>, function in <a class="link" href="libkmod-libkmod-config.html" title="libkmod-config">libkmod-config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-get-key" title="kmod_config_iter_get_key ()">kmod_config_iter_get_key</a>, function in <a class="link" href="libkmod-libkmod-config.html" title="libkmod-config">libkmod-config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-get-value" title="kmod_config_iter_get_value ()">kmod_config_iter_get_value</a>, function in <a class="link" href="libkmod-libkmod-config.html" title="libkmod-config">libkmod-config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-next" title="kmod_config_iter_next ()">kmod_config_iter_next</a>, function in <a class="link" href="libkmod-libkmod-config.html" title="libkmod-config">libkmod-config</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod.html#kmod-ctx" title="struct kmod_ctx">kmod_ctx</a>, struct in <a class="link" href="libkmod-libkmod.html" title="libkmod">libkmod</a>
+</dt>
+<dd></dd>
+<a name="idxD"></a><h3 class="title">D</h3>
+<dt>
+<a class="link" href="libkmod-libkmod.html#kmod-dump-index" title="kmod_dump_index ()">kmod_dump_index</a>, function in <a class="link" href="libkmod-libkmod.html" title="libkmod">libkmod</a>
+</dt>
+<dd></dd>
+<a name="idxG"></a><h3 class="title">G</h3>
+<dt>
+<a class="link" href="libkmod-libkmod.html#kmod-get-log-priority" title="kmod_get_log_priority ()">kmod_get_log_priority</a>, function in <a class="link" href="libkmod-libkmod.html" title="libkmod">libkmod</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod.html#kmod-get-userdata" title="kmod_get_userdata ()">kmod_get_userdata</a>, function in <a class="link" href="libkmod-libkmod.html" title="libkmod">libkmod</a>
+</dt>
+<dd></dd>
+<a name="idxL"></a><h3 class="title">L</h3>
+<dt>
+<a class="link" href="libkmod-libkmod-list.html#kmod-list" title="struct kmod_list">kmod_list</a>, struct in <a class="link" href="libkmod-libkmod-list.html" title="libkmod-list">libkmod-list</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-list.html#kmod-list-foreach" title="kmod_list_foreach()">kmod_list_foreach</a>, macro in <a class="link" href="libkmod-libkmod-list.html" title="libkmod-list">libkmod-list</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-list.html#kmod-list-foreach-reverse" title="kmod_list_foreach_reverse()">kmod_list_foreach_reverse</a>, macro in <a class="link" href="libkmod-libkmod-list.html" title="libkmod-list">libkmod-list</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-list.html#kmod-list-last" title="kmod_list_last ()">kmod_list_last</a>, function in <a class="link" href="libkmod-libkmod-list.html" title="libkmod-list">libkmod-list</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-list.html#kmod-list-next" title="kmod_list_next ()">kmod_list_next</a>, function in <a class="link" href="libkmod-libkmod-list.html" title="libkmod-list">libkmod-list</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-list.html#kmod-list-prev" title="kmod_list_prev ()">kmod_list_prev</a>, function in <a class="link" href="libkmod-libkmod-list.html" title="libkmod-list">libkmod-list</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod.html#kmod-load-resources" title="kmod_load_resources ()">kmod_load_resources</a>, function in <a class="link" href="libkmod-libkmod.html" title="libkmod">libkmod</a>
+</dt>
+<dd></dd>
+<a name="idxM"></a><h3 class="title">M</h3>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module" title="struct kmod_module">kmod_module</a>, struct in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-apply-filter" title="kmod_module_apply_filter ()">kmod_module_apply_filter</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-dependency-symbols-free-list" title="kmod_module_dependency_symbols_free_list ()">kmod_module_dependency_symbols_free_list</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-dependency-symbol-get-bind" title="kmod_module_dependency_symbol_get_bind ()">kmod_module_dependency_symbol_get_bind</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-dependency-symbol-get-crc" title="kmod_module_dependency_symbol_get_crc ()">kmod_module_dependency_symbol_get_crc</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-dependency-symbol-get-symbol" title="kmod_module_dependency_symbol_get_symbol ()">kmod_module_dependency_symbol_get_symbol</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-get-dependencies" title="kmod_module_get_dependencies ()">kmod_module_get_dependencies</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-get-dependency-symbols" title="kmod_module_get_dependency_symbols ()">kmod_module_get_dependency_symbols</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-get-filtered-blacklist" title="kmod_module_get_filtered_blacklist ()">kmod_module_get_filtered_blacklist</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-loaded.html#kmod-module-get-holders" title="kmod_module_get_holders ()">kmod_module_get_holders</a>, function in <a class="link" href="libkmod-libkmod-loaded.html" title="libkmod-loaded">libkmod-loaded</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-get-info" title="kmod_module_get_info ()">kmod_module_get_info</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-loaded.html#kmod-module-get-initstate" title="kmod_module_get_initstate ()">kmod_module_get_initstate</a>, function in <a class="link" href="libkmod-libkmod-loaded.html" title="libkmod-loaded">libkmod-loaded</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-get-install-commands" title="kmod_module_get_install_commands ()">kmod_module_get_install_commands</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-get-module" title="kmod_module_get_module ()">kmod_module_get_module</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-get-name" title="kmod_module_get_name ()">kmod_module_get_name</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-get-options" title="kmod_module_get_options ()">kmod_module_get_options</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-get-path" title="kmod_module_get_path ()">kmod_module_get_path</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-loaded.html#kmod-module-get-refcnt" title="kmod_module_get_refcnt ()">kmod_module_get_refcnt</a>, function in <a class="link" href="libkmod-libkmod-loaded.html" title="libkmod-loaded">libkmod-loaded</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-get-remove-commands" title="kmod_module_get_remove_commands ()">kmod_module_get_remove_commands</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-get-sections" title="kmod_module_get_sections ()">kmod_module_get_sections</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-loaded.html#kmod-module-get-size" title="kmod_module_get_size ()">kmod_module_get_size</a>, function in <a class="link" href="libkmod-libkmod-loaded.html" title="libkmod-loaded">libkmod-loaded</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-get-softdeps" title="kmod_module_get_softdeps ()">kmod_module_get_softdeps</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-get-symbols" title="kmod_module_get_symbols ()">kmod_module_get_symbols</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-get-versions" title="kmod_module_get_versions ()">kmod_module_get_versions</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-info-free-list" title="kmod_module_info_free_list ()">kmod_module_info_free_list</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-info-get-key" title="kmod_module_info_get_key ()">kmod_module_info_get_key</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-info-get-value" title="kmod_module_info_get_value ()">kmod_module_info_get_value</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-loaded.html#kmod-module-initstate-str" title="kmod_module_initstate_str ()">kmod_module_initstate_str</a>, function in <a class="link" href="libkmod-libkmod-loaded.html" title="libkmod-loaded">libkmod-loaded</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-insert-module" title="kmod_module_insert_module ()">kmod_module_insert_module</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-loaded.html#kmod-module-new-from-loaded" title="kmod_module_new_from_loaded ()">kmod_module_new_from_loaded</a>, function in <a class="link" href="libkmod-libkmod-loaded.html" title="libkmod-loaded">libkmod-loaded</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-new-from-lookup" title="kmod_module_new_from_lookup ()">kmod_module_new_from_lookup</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-new-from-name" title="kmod_module_new_from_name ()">kmod_module_new_from_name</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-new-from-path" title="kmod_module_new_from_path ()">kmod_module_new_from_path</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-probe-insert-module" title="kmod_module_probe_insert_module ()">kmod_module_probe_insert_module</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-ref" title="kmod_module_ref ()">kmod_module_ref</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-remove-module" title="kmod_module_remove_module ()">kmod_module_remove_module</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-section-free-list" title="kmod_module_section_free_list ()">kmod_module_section_free_list</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-section-get-address" title="kmod_module_section_get_address ()">kmod_module_section_get_address</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-section-get-name" title="kmod_module_section_get_name ()">kmod_module_section_get_name</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-symbols-free-list" title="kmod_module_symbols_free_list ()">kmod_module_symbols_free_list</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-symbol-get-crc" title="kmod_module_symbol_get_crc ()">kmod_module_symbol_get_crc</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-symbol-get-symbol" title="kmod_module_symbol_get_symbol ()">kmod_module_symbol_get_symbol</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-unref" title="kmod_module_unref ()">kmod_module_unref</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-unref-list" title="kmod_module_unref_list ()">kmod_module_unref_list</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-versions-free-list" title="kmod_module_versions_free_list ()">kmod_module_versions_free_list</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-version-get-crc" title="kmod_module_version_get_crc ()">kmod_module_version_get_crc</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-version-get-symbol" title="kmod_module_version_get_symbol ()">kmod_module_version_get_symbol</a>, function in <a class="link" href="libkmod-libkmod-module.html" title="libkmod-module">libkmod-module</a>
+</dt>
+<dd></dd>
+<a name="idxN"></a><h3 class="title">N</h3>
+<dt>
+<a class="link" href="libkmod-libkmod.html#kmod-new" title="kmod_new ()">kmod_new</a>, function in <a class="link" href="libkmod-libkmod.html" title="libkmod">libkmod</a>
+</dt>
+<dd></dd>
+<a name="idxR"></a><h3 class="title">R</h3>
+<dt>
+<a class="link" href="libkmod-libkmod.html#kmod-ref" title="kmod_ref ()">kmod_ref</a>, function in <a class="link" href="libkmod-libkmod.html" title="libkmod">libkmod</a>
+</dt>
+<dd></dd>
+<a name="idxS"></a><h3 class="title">S</h3>
+<dt>
+<a class="link" href="libkmod-libkmod.html#kmod-set-log-fn" title="kmod_set_log_fn ()">kmod_set_log_fn</a>, function in <a class="link" href="libkmod-libkmod.html" title="libkmod">libkmod</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod.html#kmod-set-log-priority" title="kmod_set_log_priority ()">kmod_set_log_priority</a>, function in <a class="link" href="libkmod-libkmod.html" title="libkmod">libkmod</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod.html#kmod-set-userdata" title="kmod_set_userdata ()">kmod_set_userdata</a>, function in <a class="link" href="libkmod-libkmod.html" title="libkmod">libkmod</a>
+</dt>
+<dd></dd>
+<a name="idxU"></a><h3 class="title">U</h3>
+<dt>
+<a class="link" href="libkmod-libkmod.html#kmod-unload-resources" title="kmod_unload_resources ()">kmod_unload_resources</a>, function in <a class="link" href="libkmod-libkmod.html" title="libkmod">libkmod</a>
+</dt>
+<dd></dd>
+<dt>
+<a class="link" href="libkmod-libkmod.html#kmod-unref" title="kmod_unref ()">kmod_unref</a>, function in <a class="link" href="libkmod-libkmod.html" title="libkmod">libkmod</a>
+</dt>
+<dd></dd>
+<a name="idxV"></a><h3 class="title">V</h3>
+<dt>
+<a class="link" href="libkmod-libkmod.html#kmod-validate-resources" title="kmod_validate_resources ()">kmod_validate_resources</a>, function in <a class="link" href="libkmod-libkmod.html" title="libkmod">libkmod</a>
+</dt>
+<dd></dd>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/libkmod/docs/html/ch01.html b/libkmod/docs/html/ch01.html
new file mode 100644
index 0000000..37e2f23
--- /dev/null
+++ b/libkmod/docs/html/ch01.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>libkmod</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libkmod Reference Manual">
+<link rel="up" href="index.html" title="libkmod Reference Manual">
+<link rel="prev" href="index.html" title="libkmod Reference Manual">
+<link rel="next" href="libkmod-libkmod.html" title="libkmod">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle">
+<td><a accesskey="p" href="index.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td> </td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libkmod Reference Manual</th>
+<td><a accesskey="n" href="libkmod-libkmod.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr></table>
+<div class="chapter">
+<div class="titlepage"><div><div><h1 class="title">
+<a name="id-1.2"></a>libkmod</h1></div></div></div>
+<div class="toc"><dl class="toc">
+<dt>
+<span class="refentrytitle"><a href="libkmod-libkmod.html">libkmod</a></span><span class="refpurpose"> — libkmod context</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libkmod-libkmod-list.html">libkmod-list</a></span><span class="refpurpose"> — general purpose list</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libkmod-libkmod-config.html">libkmod-config</a></span><span class="refpurpose"> — retrieve current libkmod configuration</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libkmod-libkmod-module.html">libkmod-module</a></span><span class="refpurpose"> — operate on kernel modules</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libkmod-libkmod-loaded.html">libkmod-loaded</a></span><span class="refpurpose"> — currently loaded modules</span>
+</dt>
+</dl></div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/libkmod/docs/html/home.png b/libkmod/docs/html/home.png
new file mode 100644
index 0000000..1700361
--- /dev/null
+++ b/libkmod/docs/html/home.png
Binary files differ
diff --git a/libkmod/docs/html/index.html b/libkmod/docs/html/index.html
new file mode 100644
index 0000000..f29238e
--- /dev/null
+++ b/libkmod/docs/html/index.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>libkmod Reference Manual</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libkmod Reference Manual">
+<link rel="next" href="ch01.html" title="libkmod">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<div class="book">
+<div class="titlepage">
+<div>
+<div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">libkmod Reference Manual</p></th></tr></table></div>
+<div><p class="releaseinfo">for libkmod version 15
+</p></div>
+</div>
+<hr>
+</div>
+<div class="toc"><dl class="toc">
+<dt><span class="chapter"><a href="ch01.html">libkmod</a></span></dt>
+<dd><dl>
+<dt>
+<span class="refentrytitle"><a href="libkmod-libkmod.html">libkmod</a></span><span class="refpurpose"> — libkmod context</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libkmod-libkmod-list.html">libkmod-list</a></span><span class="refpurpose"> — general purpose list</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libkmod-libkmod-config.html">libkmod-config</a></span><span class="refpurpose"> — retrieve current libkmod configuration</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libkmod-libkmod-module.html">libkmod-module</a></span><span class="refpurpose"> — operate on kernel modules</span>
+</dt>
+<dt>
+<span class="refentrytitle"><a href="libkmod-libkmod-loaded.html">libkmod-loaded</a></span><span class="refpurpose"> — currently loaded modules</span>
+</dt>
+</dl></dd>
+<dt><span class="index"><a href="api-index-full.html">API Index</a></span></dt>
+</dl></div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/libkmod/docs/html/index.sgml b/libkmod/docs/html/index.sgml
new file mode 100644
index 0000000..165c1dc
--- /dev/null
+++ b/libkmod/docs/html/index.sgml
@@ -0,0 +1,97 @@
+<ANCHOR id="libkmod-libkmod" href="libkmod/libkmod-libkmod.html">
+<ANCHOR id="libkmod-libkmod.synopsis" href="libkmod/libkmod-libkmod.html#libkmod-libkmod.synopsis">
+<ANCHOR id="libkmod-libkmod.description" href="libkmod/libkmod-libkmod.html#libkmod-libkmod.description">
+<ANCHOR id="libkmod-libkmod.details" href="libkmod/libkmod-libkmod.html#libkmod-libkmod.details">
+<ANCHOR id="kmod-ctx" href="libkmod/libkmod-libkmod.html#kmod-ctx">
+<ANCHOR id="kmod-new" href="libkmod/libkmod-libkmod.html#kmod-new">
+<ANCHOR id="kmod-ref" href="libkmod/libkmod-libkmod.html#kmod-ref">
+<ANCHOR id="kmod-unref" href="libkmod/libkmod-libkmod.html#kmod-unref">
+<ANCHOR id="kmod-load-resources" href="libkmod/libkmod-libkmod.html#kmod-load-resources">
+<ANCHOR id="kmod-unload-resources" href="libkmod/libkmod-libkmod.html#kmod-unload-resources">
+<ANCHOR id="kmod-validate-resources" href="libkmod/libkmod-libkmod.html#kmod-validate-resources">
+<ANCHOR id="kmod-dump-index" href="libkmod/libkmod-libkmod.html#kmod-dump-index">
+<ANCHOR id="kmod-set-log-priority" href="libkmod/libkmod-libkmod.html#kmod-set-log-priority">
+<ANCHOR id="kmod-get-log-priority" href="libkmod/libkmod-libkmod.html#kmod-get-log-priority">
+<ANCHOR id="kmod-set-log-fn" href="libkmod/libkmod-libkmod.html#kmod-set-log-fn">
+<ANCHOR id="kmod-get-userdata" href="libkmod/libkmod-libkmod.html#kmod-get-userdata">
+<ANCHOR id="kmod-set-userdata" href="libkmod/libkmod-libkmod.html#kmod-set-userdata">
+<ANCHOR id="libkmod-libkmod-list" href="libkmod/libkmod-libkmod-list.html">
+<ANCHOR id="libkmod-libkmod-list.synopsis" href="libkmod/libkmod-libkmod-list.html#libkmod-libkmod-list.synopsis">
+<ANCHOR id="libkmod-libkmod-list.description" href="libkmod/libkmod-libkmod-list.html#libkmod-libkmod-list.description">
+<ANCHOR id="libkmod-libkmod-list.details" href="libkmod/libkmod-libkmod-list.html#libkmod-libkmod-list.details">
+<ANCHOR id="kmod-list" href="libkmod/libkmod-libkmod-list.html#kmod-list">
+<ANCHOR id="kmod-list-foreach" href="libkmod/libkmod-libkmod-list.html#kmod-list-foreach">
+<ANCHOR id="kmod-list-foreach-reverse" href="libkmod/libkmod-libkmod-list.html#kmod-list-foreach-reverse">
+<ANCHOR id="kmod-list-last" href="libkmod/libkmod-libkmod-list.html#kmod-list-last">
+<ANCHOR id="kmod-list-next" href="libkmod/libkmod-libkmod-list.html#kmod-list-next">
+<ANCHOR id="kmod-list-prev" href="libkmod/libkmod-libkmod-list.html#kmod-list-prev">
+<ANCHOR id="libkmod-libkmod-config" href="libkmod/libkmod-libkmod-config.html">
+<ANCHOR id="libkmod-libkmod-config.synopsis" href="libkmod/libkmod-libkmod-config.html#libkmod-libkmod-config.synopsis">
+<ANCHOR id="libkmod-libkmod-config.description" href="libkmod/libkmod-libkmod-config.html#libkmod-libkmod-config.description">
+<ANCHOR id="libkmod-libkmod-config.details" href="libkmod/libkmod-libkmod-config.html#libkmod-libkmod-config.details">
+<ANCHOR id="kmod-config-iter" href="libkmod/libkmod-libkmod-config.html#kmod-config-iter">
+<ANCHOR id="kmod-config-get-blacklists" href="libkmod/libkmod-libkmod-config.html#kmod-config-get-blacklists">
+<ANCHOR id="kmod-config-get-install-commands" href="libkmod/libkmod-libkmod-config.html#kmod-config-get-install-commands">
+<ANCHOR id="kmod-config-get-remove-commands" href="libkmod/libkmod-libkmod-config.html#kmod-config-get-remove-commands">
+<ANCHOR id="kmod-config-get-aliases" href="libkmod/libkmod-libkmod-config.html#kmod-config-get-aliases">
+<ANCHOR id="kmod-config-get-options" href="libkmod/libkmod-libkmod-config.html#kmod-config-get-options">
+<ANCHOR id="kmod-config-get-softdeps" href="libkmod/libkmod-libkmod-config.html#kmod-config-get-softdeps">
+<ANCHOR id="kmod-config-iter-get-key" href="libkmod/libkmod-libkmod-config.html#kmod-config-iter-get-key">
+<ANCHOR id="kmod-config-iter-get-value" href="libkmod/libkmod-libkmod-config.html#kmod-config-iter-get-value">
+<ANCHOR id="kmod-config-iter-next" href="libkmod/libkmod-libkmod-config.html#kmod-config-iter-next">
+<ANCHOR id="kmod-config-iter-free-iter" href="libkmod/libkmod-libkmod-config.html#kmod-config-iter-free-iter">
+<ANCHOR id="libkmod-libkmod-module" href="libkmod/libkmod-libkmod-module.html">
+<ANCHOR id="libkmod-libkmod-module.synopsis" href="libkmod/libkmod-libkmod-module.html#libkmod-libkmod-module.synopsis">
+<ANCHOR id="libkmod-libkmod-module.description" href="libkmod/libkmod-libkmod-module.html#libkmod-libkmod-module.description">
+<ANCHOR id="libkmod-libkmod-module.details" href="libkmod/libkmod-libkmod-module.html#libkmod-libkmod-module.details">
+<ANCHOR id="kmod-module" href="libkmod/libkmod-libkmod-module.html#kmod-module">
+<ANCHOR id="kmod-module-new-from-lookup" href="libkmod/libkmod-libkmod-module.html#kmod-module-new-from-lookup">
+<ANCHOR id="kmod-module-new-from-name" href="libkmod/libkmod-libkmod-module.html#kmod-module-new-from-name">
+<ANCHOR id="kmod-module-new-from-path" href="libkmod/libkmod-libkmod-module.html#kmod-module-new-from-path">
+<ANCHOR id="kmod-module-ref" href="libkmod/libkmod-libkmod-module.html#kmod-module-ref">
+<ANCHOR id="kmod-module-unref" href="libkmod/libkmod-libkmod-module.html#kmod-module-unref">
+<ANCHOR id="kmod-module-unref-list" href="libkmod/libkmod-libkmod-module.html#kmod-module-unref-list">
+<ANCHOR id="kmod-module-insert-module" href="libkmod/libkmod-libkmod-module.html#kmod-module-insert-module">
+<ANCHOR id="kmod-module-probe-insert-module" href="libkmod/libkmod-libkmod-module.html#kmod-module-probe-insert-module">
+<ANCHOR id="kmod-module-remove-module" href="libkmod/libkmod-libkmod-module.html#kmod-module-remove-module">
+<ANCHOR id="kmod-module-get-module" href="libkmod/libkmod-libkmod-module.html#kmod-module-get-module">
+<ANCHOR id="kmod-module-get-dependencies" href="libkmod/libkmod-libkmod-module.html#kmod-module-get-dependencies">
+<ANCHOR id="kmod-module-get-softdeps" href="libkmod/libkmod-libkmod-module.html#kmod-module-get-softdeps">
+<ANCHOR id="kmod-module-apply-filter" href="libkmod/libkmod-libkmod-module.html#kmod-module-apply-filter">
+<ANCHOR id="kmod-module-get-filtered-blacklist" href="libkmod/libkmod-libkmod-module.html#kmod-module-get-filtered-blacklist">
+<ANCHOR id="kmod-module-get-install-commands" href="libkmod/libkmod-libkmod-module.html#kmod-module-get-install-commands">
+<ANCHOR id="kmod-module-get-remove-commands" href="libkmod/libkmod-libkmod-module.html#kmod-module-get-remove-commands">
+<ANCHOR id="kmod-module-get-name" href="libkmod/libkmod-libkmod-module.html#kmod-module-get-name">
+<ANCHOR id="kmod-module-get-options" href="libkmod/libkmod-libkmod-module.html#kmod-module-get-options">
+<ANCHOR id="kmod-module-get-path" href="libkmod/libkmod-libkmod-module.html#kmod-module-get-path">
+<ANCHOR id="kmod-module-get-dependency-symbols" href="libkmod/libkmod-libkmod-module.html#kmod-module-get-dependency-symbols">
+<ANCHOR id="kmod-module-dependency-symbol-get-bind" href="libkmod/libkmod-libkmod-module.html#kmod-module-dependency-symbol-get-bind">
+<ANCHOR id="kmod-module-dependency-symbol-get-crc" href="libkmod/libkmod-libkmod-module.html#kmod-module-dependency-symbol-get-crc">
+<ANCHOR id="kmod-module-dependency-symbol-get-symbol" href="libkmod/libkmod-libkmod-module.html#kmod-module-dependency-symbol-get-symbol">
+<ANCHOR id="kmod-module-dependency-symbols-free-list" href="libkmod/libkmod-libkmod-module.html#kmod-module-dependency-symbols-free-list">
+<ANCHOR id="kmod-module-get-sections" href="libkmod/libkmod-libkmod-module.html#kmod-module-get-sections">
+<ANCHOR id="kmod-module-section-free-list" href="libkmod/libkmod-libkmod-module.html#kmod-module-section-free-list">
+<ANCHOR id="kmod-module-section-get-address" href="libkmod/libkmod-libkmod-module.html#kmod-module-section-get-address">
+<ANCHOR id="kmod-module-section-get-name" href="libkmod/libkmod-libkmod-module.html#kmod-module-section-get-name">
+<ANCHOR id="kmod-module-get-symbols" href="libkmod/libkmod-libkmod-module.html#kmod-module-get-symbols">
+<ANCHOR id="kmod-module-symbol-get-crc" href="libkmod/libkmod-libkmod-module.html#kmod-module-symbol-get-crc">
+<ANCHOR id="kmod-module-symbol-get-symbol" href="libkmod/libkmod-libkmod-module.html#kmod-module-symbol-get-symbol">
+<ANCHOR id="kmod-module-symbols-free-list" href="libkmod/libkmod-libkmod-module.html#kmod-module-symbols-free-list">
+<ANCHOR id="kmod-module-get-versions" href="libkmod/libkmod-libkmod-module.html#kmod-module-get-versions">
+<ANCHOR id="kmod-module-version-get-crc" href="libkmod/libkmod-libkmod-module.html#kmod-module-version-get-crc">
+<ANCHOR id="kmod-module-version-get-symbol" href="libkmod/libkmod-libkmod-module.html#kmod-module-version-get-symbol">
+<ANCHOR id="kmod-module-versions-free-list" href="libkmod/libkmod-libkmod-module.html#kmod-module-versions-free-list">
+<ANCHOR id="kmod-module-get-info" href="libkmod/libkmod-libkmod-module.html#kmod-module-get-info">
+<ANCHOR id="kmod-module-info-free-list" href="libkmod/libkmod-libkmod-module.html#kmod-module-info-free-list">
+<ANCHOR id="kmod-module-info-get-key" href="libkmod/libkmod-libkmod-module.html#kmod-module-info-get-key">
+<ANCHOR id="kmod-module-info-get-value" href="libkmod/libkmod-libkmod-module.html#kmod-module-info-get-value">
+<ANCHOR id="libkmod-libkmod-loaded" href="libkmod/libkmod-libkmod-loaded.html">
+<ANCHOR id="libkmod-libkmod-loaded.synopsis" href="libkmod/libkmod-libkmod-loaded.html#libkmod-libkmod-loaded.synopsis">
+<ANCHOR id="libkmod-libkmod-loaded.description" href="libkmod/libkmod-libkmod-loaded.html#libkmod-libkmod-loaded.description">
+<ANCHOR id="libkmod-libkmod-loaded.details" href="libkmod/libkmod-libkmod-loaded.html#libkmod-libkmod-loaded.details">
+<ANCHOR id="kmod-module-new-from-loaded" href="libkmod/libkmod-libkmod-loaded.html#kmod-module-new-from-loaded">
+<ANCHOR id="kmod-module-get-initstate" href="libkmod/libkmod-libkmod-loaded.html#kmod-module-get-initstate">
+<ANCHOR id="kmod-module-initstate-str" href="libkmod/libkmod-libkmod-loaded.html#kmod-module-initstate-str">
+<ANCHOR id="kmod-module-get-size" href="libkmod/libkmod-libkmod-loaded.html#kmod-module-get-size">
+<ANCHOR id="kmod-module-get-refcnt" href="libkmod/libkmod-libkmod-loaded.html#kmod-module-get-refcnt">
+<ANCHOR id="kmod-module-get-holders" href="libkmod/libkmod-libkmod-loaded.html#kmod-module-get-holders">
diff --git a/libkmod/docs/html/left.png b/libkmod/docs/html/left.png
new file mode 100644
index 0000000..2d05b3d
--- /dev/null
+++ b/libkmod/docs/html/left.png
Binary files differ
diff --git a/libkmod/docs/html/libkmod-libkmod-config.html b/libkmod/docs/html/libkmod-libkmod-config.html
new file mode 100644
index 0000000..f88935e
--- /dev/null
+++ b/libkmod/docs/html/libkmod-libkmod-config.html
@@ -0,0 +1,338 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>libkmod-config</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libkmod Reference Manual">
+<link rel="up" href="ch01.html" title="libkmod">
+<link rel="prev" href="libkmod-libkmod-list.html" title="libkmod-list">
+<link rel="next" href="libkmod-libkmod-module.html" title="libkmod-module">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="libkmod-libkmod-list.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libkmod Reference Manual</th>
+<td><a accesskey="n" href="libkmod-libkmod-module.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#libkmod-libkmod-config.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#libkmod-libkmod-config.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="libkmod-libkmod-config"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="libkmod-libkmod-config.top_of_page"></a>libkmod-config</span></h2>
+<p>libkmod-config — retrieve current libkmod configuration</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="libkmod-libkmod-config.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">struct <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter" title="struct kmod_config_iter">kmod_config_iter</a>;
+struct <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter" title="struct kmod_config_iter"><span class="returnvalue">kmod_config_iter</span></a> * <a class="link" href="libkmod-libkmod-config.html#kmod-config-get-blacklists" title="kmod_config_get_blacklists ()">kmod_config_get_blacklists</a> (<em class="parameter"><code>const <span class="type">struct kmod_ctx</span> *ctx</code></em>);
+struct <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter" title="struct kmod_config_iter"><span class="returnvalue">kmod_config_iter</span></a> * <a class="link" href="libkmod-libkmod-config.html#kmod-config-get-install-commands" title="kmod_config_get_install_commands ()">kmod_config_get_install_commands</a>
+ (<em class="parameter"><code>const <span class="type">struct kmod_ctx</span> *ctx</code></em>);
+struct <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter" title="struct kmod_config_iter"><span class="returnvalue">kmod_config_iter</span></a> * <a class="link" href="libkmod-libkmod-config.html#kmod-config-get-remove-commands" title="kmod_config_get_remove_commands ()">kmod_config_get_remove_commands</a>
+ (<em class="parameter"><code>const <span class="type">struct kmod_ctx</span> *ctx</code></em>);
+struct <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter" title="struct kmod_config_iter"><span class="returnvalue">kmod_config_iter</span></a> * <a class="link" href="libkmod-libkmod-config.html#kmod-config-get-aliases" title="kmod_config_get_aliases ()">kmod_config_get_aliases</a> (<em class="parameter"><code>const <span class="type">struct kmod_ctx</span> *ctx</code></em>);
+struct <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter" title="struct kmod_config_iter"><span class="returnvalue">kmod_config_iter</span></a> * <a class="link" href="libkmod-libkmod-config.html#kmod-config-get-options" title="kmod_config_get_options ()">kmod_config_get_options</a> (<em class="parameter"><code>const <span class="type">struct kmod_ctx</span> *ctx</code></em>);
+struct <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter" title="struct kmod_config_iter"><span class="returnvalue">kmod_config_iter</span></a> * <a class="link" href="libkmod-libkmod-config.html#kmod-config-get-softdeps" title="kmod_config_get_softdeps ()">kmod_config_get_softdeps</a> (<em class="parameter"><code>const <span class="type">struct kmod_ctx</span> *ctx</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-get-key" title="kmod_config_iter_get_key ()">kmod_config_iter_get_key</a> (<em class="parameter"><code>const <span class="type">struct kmod_config_iter</span> *iter</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-get-value" title="kmod_config_iter_get_value ()">kmod_config_iter_get_value</a> (<em class="parameter"><code>const <span class="type">struct kmod_config_iter</span> *iter</code></em>);
+<span class="returnvalue">bool</span> <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-next" title="kmod_config_iter_next ()">kmod_config_iter_next</a> (<em class="parameter"><code><span class="type">struct kmod_config_iter</span> *iter</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-free-iter" title="kmod_config_iter_free_iter ()">kmod_config_iter_free_iter</a> (<em class="parameter"><code><span class="type">struct kmod_config_iter</span> *iter</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="libkmod-libkmod-config.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="libkmod-libkmod-config.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="kmod-config-iter"></a><h3>struct kmod_config_iter</h3>
+<pre class="programlisting">struct kmod_config_iter;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-config-get-blacklists"></a><h3>kmod_config_get_blacklists ()</h3>
+<pre class="programlisting">struct <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter" title="struct kmod_config_iter"><span class="returnvalue">kmod_config_iter</span></a> * kmod_config_get_blacklists (<em class="parameter"><code>const <span class="type">struct kmod_ctx</span> *ctx</code></em>);</pre>
+<p>
+Retrieve an iterator to deal with the blacklist maintained inside the
+library. See <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-get-key" title="kmod_config_iter_get_key ()"><code class="function">kmod_config_iter_get_key()</code></a>, <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-get-value" title="kmod_config_iter_get_value ()"><code class="function">kmod_config_iter_get_value()</code></a> and
+<a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-next" title="kmod_config_iter_next ()"><code class="function">kmod_config_iter_next()</code></a>. At least one call to <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-next" title="kmod_config_iter_next ()"><code class="function">kmod_config_iter_next()</code></a> must
+be made to initialize the iterator and check if it's valid.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ctx</code></em> :</span></p></td>
+<td>kmod library context</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new iterator over the blacklists or NULL on failure. Free it
+with <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-free-iter" title="kmod_config_iter_free_iter ()"><code class="function">kmod_config_iter_free_iter()</code></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-config-get-install-commands"></a><h3>kmod_config_get_install_commands ()</h3>
+<pre class="programlisting">struct <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter" title="struct kmod_config_iter"><span class="returnvalue">kmod_config_iter</span></a> * kmod_config_get_install_commands
+ (<em class="parameter"><code>const <span class="type">struct kmod_ctx</span> *ctx</code></em>);</pre>
+<p>
+Retrieve an iterator to deal with the install commands maintained inside the
+library. See <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-get-key" title="kmod_config_iter_get_key ()"><code class="function">kmod_config_iter_get_key()</code></a>, <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-get-value" title="kmod_config_iter_get_value ()"><code class="function">kmod_config_iter_get_value()</code></a> and
+<a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-next" title="kmod_config_iter_next ()"><code class="function">kmod_config_iter_next()</code></a>. At least one call to <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-next" title="kmod_config_iter_next ()"><code class="function">kmod_config_iter_next()</code></a> must
+be made to initialize the iterator and check if it's valid.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ctx</code></em> :</span></p></td>
+<td>kmod library context</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new iterator over the install commands or NULL on failure. Free
+it with <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-free-iter" title="kmod_config_iter_free_iter ()"><code class="function">kmod_config_iter_free_iter()</code></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-config-get-remove-commands"></a><h3>kmod_config_get_remove_commands ()</h3>
+<pre class="programlisting">struct <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter" title="struct kmod_config_iter"><span class="returnvalue">kmod_config_iter</span></a> * kmod_config_get_remove_commands
+ (<em class="parameter"><code>const <span class="type">struct kmod_ctx</span> *ctx</code></em>);</pre>
+<p>
+Retrieve an iterator to deal with the remove commands maintained inside the
+library. See <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-get-key" title="kmod_config_iter_get_key ()"><code class="function">kmod_config_iter_get_key()</code></a>, <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-get-value" title="kmod_config_iter_get_value ()"><code class="function">kmod_config_iter_get_value()</code></a> and
+<a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-next" title="kmod_config_iter_next ()"><code class="function">kmod_config_iter_next()</code></a>. At least one call to <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-next" title="kmod_config_iter_next ()"><code class="function">kmod_config_iter_next()</code></a> must
+be made to initialize the iterator and check if it's valid.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ctx</code></em> :</span></p></td>
+<td>kmod library context</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new iterator over the remove commands or NULL on failure. Free
+it with <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-free-iter" title="kmod_config_iter_free_iter ()"><code class="function">kmod_config_iter_free_iter()</code></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-config-get-aliases"></a><h3>kmod_config_get_aliases ()</h3>
+<pre class="programlisting">struct <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter" title="struct kmod_config_iter"><span class="returnvalue">kmod_config_iter</span></a> * kmod_config_get_aliases (<em class="parameter"><code>const <span class="type">struct kmod_ctx</span> *ctx</code></em>);</pre>
+<p>
+Retrieve an iterator to deal with the aliases maintained inside the
+library. See <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-get-key" title="kmod_config_iter_get_key ()"><code class="function">kmod_config_iter_get_key()</code></a>, <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-get-value" title="kmod_config_iter_get_value ()"><code class="function">kmod_config_iter_get_value()</code></a> and
+<a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-next" title="kmod_config_iter_next ()"><code class="function">kmod_config_iter_next()</code></a>. At least one call to <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-next" title="kmod_config_iter_next ()"><code class="function">kmod_config_iter_next()</code></a> must
+be made to initialize the iterator and check if it's valid.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ctx</code></em> :</span></p></td>
+<td>kmod library context</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new iterator over the aliases or NULL on failure. Free it with
+<a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-free-iter" title="kmod_config_iter_free_iter ()"><code class="function">kmod_config_iter_free_iter()</code></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-config-get-options"></a><h3>kmod_config_get_options ()</h3>
+<pre class="programlisting">struct <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter" title="struct kmod_config_iter"><span class="returnvalue">kmod_config_iter</span></a> * kmod_config_get_options (<em class="parameter"><code>const <span class="type">struct kmod_ctx</span> *ctx</code></em>);</pre>
+<p>
+Retrieve an iterator to deal with the options maintained inside the
+library. See <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-get-key" title="kmod_config_iter_get_key ()"><code class="function">kmod_config_iter_get_key()</code></a>, <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-get-value" title="kmod_config_iter_get_value ()"><code class="function">kmod_config_iter_get_value()</code></a> and
+<a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-next" title="kmod_config_iter_next ()"><code class="function">kmod_config_iter_next()</code></a>. At least one call to <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-next" title="kmod_config_iter_next ()"><code class="function">kmod_config_iter_next()</code></a> must
+be made to initialize the iterator and check if it's valid.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ctx</code></em> :</span></p></td>
+<td>kmod library context</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new iterator over the options or NULL on failure. Free it with
+<a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-free-iter" title="kmod_config_iter_free_iter ()"><code class="function">kmod_config_iter_free_iter()</code></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-config-get-softdeps"></a><h3>kmod_config_get_softdeps ()</h3>
+<pre class="programlisting">struct <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter" title="struct kmod_config_iter"><span class="returnvalue">kmod_config_iter</span></a> * kmod_config_get_softdeps (<em class="parameter"><code>const <span class="type">struct kmod_ctx</span> *ctx</code></em>);</pre>
+<p>
+Retrieve an iterator to deal with the softdeps maintained inside the
+library. See <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-get-key" title="kmod_config_iter_get_key ()"><code class="function">kmod_config_iter_get_key()</code></a>, <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-get-value" title="kmod_config_iter_get_value ()"><code class="function">kmod_config_iter_get_value()</code></a> and
+<a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-next" title="kmod_config_iter_next ()"><code class="function">kmod_config_iter_next()</code></a>. At least one call to <a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-next" title="kmod_config_iter_next ()"><code class="function">kmod_config_iter_next()</code></a> must
+be made to initialize the iterator and check if it's valid.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ctx</code></em> :</span></p></td>
+<td>kmod library context</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new iterator over the softdeps or NULL on failure. Free it with
+<a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-free-iter" title="kmod_config_iter_free_iter ()"><code class="function">kmod_config_iter_free_iter()</code></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-config-iter-get-key"></a><h3>kmod_config_iter_get_key ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * kmod_config_iter_get_key (<em class="parameter"><code>const <span class="type">struct kmod_config_iter</span> *iter</code></em>);</pre>
+<p>
+When using a new allocated iterator, user must perform a call to
+<a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-next" title="kmod_config_iter_next ()"><code class="function">kmod_config_iter_next()</code></a> to initialize iterator's position and check if it's
+valid.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td>iterator over a certain configuration</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the key of the current configuration pointed by <em class="parameter"><code>iter</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-config-iter-get-value"></a><h3>kmod_config_iter_get_value ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * kmod_config_iter_get_value (<em class="parameter"><code>const <span class="type">struct kmod_config_iter</span> *iter</code></em>);</pre>
+<p>
+When using a new allocated iterator, user must perform a call to
+<a class="link" href="libkmod-libkmod-config.html#kmod-config-iter-next" title="kmod_config_iter_next ()"><code class="function">kmod_config_iter_next()</code></a> to initialize iterator's position and check if it's
+valid.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td>iterator over a certain configuration</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the value of the current configuration pointed by <em class="parameter"><code>iter</code></em>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-config-iter-next"></a><h3>kmod_config_iter_next ()</h3>
+<pre class="programlisting"><span class="returnvalue">bool</span> kmod_config_iter_next (<em class="parameter"><code><span class="type">struct kmod_config_iter</span> *iter</code></em>);</pre>
+<p>
+Make <em class="parameter"><code>iter</code></em> point to the next item of a certain configuration. It's an
+automatically recycling iterator. When it reaches the end, false is
+returned; then if user wants to iterate again, it's sufficient to call this
+function once more.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td>iterator over a certain configuration</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>true if next position of <em class="parameter"><code>iter</code></em> is valid or false if its end is
+reached.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-config-iter-free-iter"></a><h3>kmod_config_iter_free_iter ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> kmod_config_iter_free_iter (<em class="parameter"><code><span class="type">struct kmod_config_iter</span> *iter</code></em>);</pre>
+<p>
+Free resources used by the iterator.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>iter</code></em> :</span></p></td>
+<td>iterator over a certain configuration</td>
+</tr></tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/libkmod/docs/html/libkmod-libkmod-list.html b/libkmod/docs/html/libkmod-libkmod-list.html
new file mode 100644
index 0000000..483ac4f
--- /dev/null
+++ b/libkmod/docs/html/libkmod-libkmod-list.html
@@ -0,0 +1,173 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>libkmod-list</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libkmod Reference Manual">
+<link rel="up" href="ch01.html" title="libkmod">
+<link rel="prev" href="libkmod-libkmod.html" title="libkmod">
+<link rel="next" href="libkmod-libkmod-config.html" title="libkmod-config">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="libkmod-libkmod.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libkmod Reference Manual</th>
+<td><a accesskey="n" href="libkmod-libkmod-config.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#libkmod-libkmod-list.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#libkmod-libkmod-list.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="libkmod-libkmod-list"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="libkmod-libkmod-list.top_of_page"></a>libkmod-list</span></h2>
+<p>libkmod-list — general purpose list</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="libkmod-libkmod-list.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">struct <a class="link" href="libkmod-libkmod-list.html#kmod-list" title="struct kmod_list">kmod_list</a>;
+#define <a class="link" href="libkmod-libkmod-list.html#kmod-list-foreach" title="kmod_list_foreach()">kmod_list_foreach</a> (list_entry,
+ first_entry)
+#define <a class="link" href="libkmod-libkmod-list.html#kmod-list-foreach-reverse" title="kmod_list_foreach_reverse()">kmod_list_foreach_reverse</a> (list_entry,
+ first_entry)
+struct <a class="link" href="libkmod-libkmod-list.html#kmod-list" title="struct kmod_list"><span class="returnvalue">kmod_list</span></a> * <a class="link" href="libkmod-libkmod-list.html#kmod-list-last" title="kmod_list_last ()">kmod_list_last</a> (<em class="parameter"><code>const <span class="type">struct kmod_list</span> *list</code></em>);
+struct <a class="link" href="libkmod-libkmod-list.html#kmod-list" title="struct kmod_list"><span class="returnvalue">kmod_list</span></a> * <a class="link" href="libkmod-libkmod-list.html#kmod-list-next" title="kmod_list_next ()">kmod_list_next</a> (<em class="parameter"><code>const <span class="type">struct kmod_list</span> *list</code></em>,
+ <em class="parameter"><code>const <span class="type">struct kmod_list</span> *curr</code></em>);
+struct <a class="link" href="libkmod-libkmod-list.html#kmod-list" title="struct kmod_list"><span class="returnvalue">kmod_list</span></a> * <a class="link" href="libkmod-libkmod-list.html#kmod-list-prev" title="kmod_list_prev ()">kmod_list_prev</a> (<em class="parameter"><code>const <span class="type">struct kmod_list</span> *list</code></em>,
+ <em class="parameter"><code>const <span class="type">struct kmod_list</span> *curr</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="libkmod-libkmod-list.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="libkmod-libkmod-list.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="kmod-list"></a><h3>struct kmod_list</h3>
+<pre class="programlisting">struct kmod_list;</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-list-foreach"></a><h3>kmod_list_foreach()</h3>
+<pre class="programlisting">#define kmod_list_foreach(list_entry, first_entry)</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-list-foreach-reverse"></a><h3>kmod_list_foreach_reverse()</h3>
+<pre class="programlisting">#define kmod_list_foreach_reverse(list_entry, first_entry)</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-list-last"></a><h3>kmod_list_last ()</h3>
+<pre class="programlisting">struct <a class="link" href="libkmod-libkmod-list.html#kmod-list" title="struct kmod_list"><span class="returnvalue">kmod_list</span></a> * kmod_list_last (<em class="parameter"><code>const <span class="type">struct kmod_list</span> *list</code></em>);</pre>
+<p>
+Get the last element of the <em class="parameter"><code>list</code></em>. As <em class="parameter"><code>list</code></em> is a circular list,
+this is a cheap operation O(1) with the last element being the
+previous element.
+</p>
+<p>
+If the list has a single element it will return the list itself (as
+expected, and this is what differentiates from <a class="link" href="libkmod-libkmod-list.html#kmod-list-prev" title="kmod_list_prev ()"><code class="function">kmod_list_prev()</code></a>).
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td>the head of the list</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>last node at <em class="parameter"><code>list</code></em> or NULL if the list is empty.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-list-next"></a><h3>kmod_list_next ()</h3>
+<pre class="programlisting">struct <a class="link" href="libkmod-libkmod-list.html#kmod-list" title="struct kmod_list"><span class="returnvalue">kmod_list</span></a> * kmod_list_next (<em class="parameter"><code>const <span class="type">struct kmod_list</span> *list</code></em>,
+ <em class="parameter"><code>const <span class="type">struct kmod_list</span> *curr</code></em>);</pre>
+<p>
+Get the next node in <em class="parameter"><code>list</code></em> relative to <em class="parameter"><code>curr</code></em> as if <em class="parameter"><code>list</code></em> was not a circular
+list. I.e. calling this function in the last node of the list returns
+NULL.. It can be used to iterate a list by checking for NULL return to know
+when all elements were iterated.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td>the head of the list</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>curr</code></em> :</span></p></td>
+<td>the current node in the list</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>node next to <em class="parameter"><code>curr</code></em> or NULL if either this node is the last of or
+list is empty.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-list-prev"></a><h3>kmod_list_prev ()</h3>
+<pre class="programlisting">struct <a class="link" href="libkmod-libkmod-list.html#kmod-list" title="struct kmod_list"><span class="returnvalue">kmod_list</span></a> * kmod_list_prev (<em class="parameter"><code>const <span class="type">struct kmod_list</span> *list</code></em>,
+ <em class="parameter"><code>const <span class="type">struct kmod_list</span> *curr</code></em>);</pre>
+<p>
+Get the previous node in <em class="parameter"><code>list</code></em> relative to <em class="parameter"><code>curr</code></em> as if <em class="parameter"><code>list</code></em> was not a
+circular list. I.e.: the previous of the head is NULL. It can be used to
+iterate a list by checking for NULL return to know when all elements were
+iterated.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td>the head of the list</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>curr</code></em> :</span></p></td>
+<td>the current node in the list</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>node previous to <em class="parameter"><code>curr</code></em> or NULL if either this node is the head of
+the list or the list is empty.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/libkmod/docs/html/libkmod-libkmod-loaded.html b/libkmod/docs/html/libkmod-libkmod-loaded.html
new file mode 100644
index 0000000..e258c63
--- /dev/null
+++ b/libkmod/docs/html/libkmod-libkmod-loaded.html
@@ -0,0 +1,236 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>libkmod-loaded</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libkmod Reference Manual">
+<link rel="up" href="ch01.html" title="libkmod">
+<link rel="prev" href="libkmod-libkmod-module.html" title="libkmod-module">
+<link rel="next" href="api-index-full.html" title="API Index">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="libkmod-libkmod-module.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libkmod Reference Manual</th>
+<td><a accesskey="n" href="api-index-full.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#libkmod-libkmod-loaded.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#libkmod-libkmod-loaded.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="libkmod-libkmod-loaded"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="libkmod-libkmod-loaded.top_of_page"></a>libkmod-loaded</span></h2>
+<p>libkmod-loaded — currently loaded modules</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="libkmod-libkmod-loaded.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis"><span class="returnvalue">int</span> <a class="link" href="libkmod-libkmod-loaded.html#kmod-module-new-from-loaded" title="kmod_module_new_from_loaded ()">kmod_module_new_from_loaded</a> (<em class="parameter"><code><span class="type">struct kmod_ctx</span> *ctx</code></em>,
+ <em class="parameter"><code><span class="type">struct kmod_list</span> **list</code></em>);
+<span class="returnvalue">int</span> <a class="link" href="libkmod-libkmod-loaded.html#kmod-module-get-initstate" title="kmod_module_get_initstate ()">kmod_module_get_initstate</a> (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="libkmod-libkmod-loaded.html#kmod-module-initstate-str" title="kmod_module_initstate_str ()">kmod_module_initstate_str</a> (<em class="parameter"><code><span class="type">enum kmod_module_initstate</span> state</code></em>);
+<span class="returnvalue">long</span> <a class="link" href="libkmod-libkmod-loaded.html#kmod-module-get-size" title="kmod_module_get_size ()">kmod_module_get_size</a> (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>);
+<span class="returnvalue">int</span> <a class="link" href="libkmod-libkmod-loaded.html#kmod-module-get-refcnt" title="kmod_module_get_refcnt ()">kmod_module_get_refcnt</a> (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>);
+struct <a class="link" href="libkmod-libkmod-list.html#kmod-list" title="struct kmod_list"><span class="returnvalue">kmod_list</span></a> * <a class="link" href="libkmod-libkmod-loaded.html#kmod-module-get-holders" title="kmod_module_get_holders ()">kmod_module_get_holders</a> (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="libkmod-libkmod-loaded.description"></a><h2>Description</h2>
+<p>
+Information about currently loaded modules, as reported by Linux kernel.
+These information are not cached by libkmod and are always read from /sys
+and /proc/modules.
+</p>
+</div>
+<div class="refsect1">
+<a name="libkmod-libkmod-loaded.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="kmod-module-new-from-loaded"></a><h3>kmod_module_new_from_loaded ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span> kmod_module_new_from_loaded (<em class="parameter"><code><span class="type">struct kmod_ctx</span> *ctx</code></em>,
+ <em class="parameter"><code><span class="type">struct kmod_list</span> **list</code></em>);</pre>
+<p>
+Create a new list of kmod modules with all modules currently loaded in
+kernel. It uses /proc/modules to get the names of loaded modules and to
+create kmod modules by calling <a class="link" href="libkmod-libkmod-module.html#kmod-module-new-from-name" title="kmod_module_new_from_name ()"><code class="function">kmod_module_new_from_name()</code></a> in each of them.
+They are put in <em class="parameter"><code>list</code></em> in no particular order.
+</p>
+<p>
+The initial refcount is 1, and needs to be decremented to release the
+resources of the kmod_module. The returned <em class="parameter"><code>list</code></em> must be released by
+calling <a class="link" href="libkmod-libkmod-module.html#kmod-module-unref-list" title="kmod_module_unref_list ()"><code class="function">kmod_module_unref_list()</code></a>. Since libkmod keeps track of all
+kmod_modules created, they are all released upon <em class="parameter"><code>ctx</code></em> destruction too. Do
+not unref <em class="parameter"><code>ctx</code></em> before all the desired operations with the returned list are
+completed.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ctx</code></em> :</span></p></td>
+<td>kmod library context</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td>where to save the list of loaded modules</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>0 on success or &lt; 0 on error.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-get-initstate"></a><h3>kmod_module_get_initstate ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span> kmod_module_get_initstate (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>);</pre>
+<p>
+Get the initstate of this <em class="parameter"><code>mod</code></em>, as returned by Linux Kernel, by reading
+/sys filesystem.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mod</code></em> :</span></p></td>
+<td>kmod module</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>&lt; 0 on error or module state if module is found in kernel, valid states are
+KMOD_MODULE_BUILTIN: module is builtin;
+KMOD_MODULE_LIVE: module is live in kernel;
+KMOD_MODULE_COMING: module is being loaded;
+KMOD_MODULE_GOING: module is being unloaded.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-initstate-str"></a><h3>kmod_module_initstate_str ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * kmod_module_initstate_str (<em class="parameter"><code><span class="type">enum kmod_module_initstate</span> state</code></em>);</pre>
+<p>
+Translate a initstate to a string.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>state</code></em> :</span></p></td>
+<td>the state as returned by <a class="link" href="libkmod-libkmod-loaded.html#kmod-module-get-initstate" title="kmod_module_get_initstate ()"><code class="function">kmod_module_get_initstate()</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the string associated to the <em class="parameter"><code>state</code></em>. This string is statically
+allocated, do not free it.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-get-size"></a><h3>kmod_module_get_size ()</h3>
+<pre class="programlisting"><span class="returnvalue">long</span> kmod_module_get_size (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>);</pre>
+<p>
+Get the size of this kmod module as returned by Linux kernel. If supported,
+the size is read from the coresize attribute in /sys/module. For older
+kernels, this falls back on /proc/modules and searches for the specified
+module to get its size.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mod</code></em> :</span></p></td>
+<td>kmod module</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the size of this kmod module.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-get-refcnt"></a><h3>kmod_module_get_refcnt ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span> kmod_module_get_refcnt (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>);</pre>
+<p>
+Get the ref count of this <em class="parameter"><code>mod</code></em>, as returned by Linux Kernel, by reading
+/sys filesystem.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mod</code></em> :</span></p></td>
+<td>kmod module</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>0 on success or &lt; 0 on failure.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-get-holders"></a><h3>kmod_module_get_holders ()</h3>
+<pre class="programlisting">struct <a class="link" href="libkmod-libkmod-list.html#kmod-list" title="struct kmod_list"><span class="returnvalue">kmod_list</span></a> * kmod_module_get_holders (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>);</pre>
+<p>
+Get a list of kmod modules that are holding this <em class="parameter"><code>mod</code></em>, as returned by Linux
+Kernel. After use, free the <em class="parameter"><code>list</code></em> by calling <a class="link" href="libkmod-libkmod-module.html#kmod-module-unref-list" title="kmod_module_unref_list ()"><code class="function">kmod_module_unref_list()</code></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mod</code></em> :</span></p></td>
+<td>kmod module</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new list of kmod modules on success or NULL on failure.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/libkmod/docs/html/libkmod-libkmod-module.html b/libkmod/docs/html/libkmod-libkmod-module.html
new file mode 100644
index 0000000..bff06bf
--- /dev/null
+++ b/libkmod/docs/html/libkmod-libkmod-module.html
@@ -0,0 +1,1353 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>libkmod-module</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libkmod Reference Manual">
+<link rel="up" href="ch01.html" title="libkmod">
+<link rel="prev" href="libkmod-libkmod-config.html" title="libkmod-config">
+<link rel="next" href="libkmod-libkmod-loaded.html" title="libkmod-loaded">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="libkmod-libkmod-config.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libkmod Reference Manual</th>
+<td><a accesskey="n" href="libkmod-libkmod-loaded.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#libkmod-libkmod-module.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#libkmod-libkmod-module.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="libkmod-libkmod-module"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="libkmod-libkmod-module.top_of_page"></a>libkmod-module</span></h2>
+<p>libkmod-module — operate on kernel modules</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="libkmod-libkmod-module.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">struct <a class="link" href="libkmod-libkmod-module.html#kmod-module" title="struct kmod_module">kmod_module</a>;
+<span class="returnvalue">int</span> <a class="link" href="libkmod-libkmod-module.html#kmod-module-new-from-lookup" title="kmod_module_new_from_lookup ()">kmod_module_new_from_lookup</a> (<em class="parameter"><code><span class="type">struct kmod_ctx</span> *ctx</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *given_alias</code></em>,
+ <em class="parameter"><code><span class="type">struct kmod_list</span> **list</code></em>);
+<span class="returnvalue">int</span> <a class="link" href="libkmod-libkmod-module.html#kmod-module-new-from-name" title="kmod_module_new_from_name ()">kmod_module_new_from_name</a> (<em class="parameter"><code><span class="type">struct kmod_ctx</span> *ctx</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+ <em class="parameter"><code><span class="type">struct kmod_module</span> **mod</code></em>);
+<span class="returnvalue">int</span> <a class="link" href="libkmod-libkmod-module.html#kmod-module-new-from-path" title="kmod_module_new_from_path ()">kmod_module_new_from_path</a> (<em class="parameter"><code><span class="type">struct kmod_ctx</span> *ctx</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>,
+ <em class="parameter"><code><span class="type">struct kmod_module</span> **mod</code></em>);
+struct <a class="link" href="libkmod-libkmod-module.html#kmod-module" title="struct kmod_module"><span class="returnvalue">kmod_module</span></a> * <a class="link" href="libkmod-libkmod-module.html#kmod-module-ref" title="kmod_module_ref ()">kmod_module_ref</a> (<em class="parameter"><code><span class="type">struct kmod_module</span> *mod</code></em>);
+struct <a class="link" href="libkmod-libkmod-module.html#kmod-module" title="struct kmod_module"><span class="returnvalue">kmod_module</span></a> * <a class="link" href="libkmod-libkmod-module.html#kmod-module-unref" title="kmod_module_unref ()">kmod_module_unref</a> (<em class="parameter"><code><span class="type">struct kmod_module</span> *mod</code></em>);
+<span class="returnvalue">int</span> <a class="link" href="libkmod-libkmod-module.html#kmod-module-unref-list" title="kmod_module_unref_list ()">kmod_module_unref_list</a> (<em class="parameter"><code><span class="type">struct kmod_list</span> *list</code></em>);
+<span class="returnvalue">int</span> <a class="link" href="libkmod-libkmod-module.html#kmod-module-insert-module" title="kmod_module_insert_module ()">kmod_module_insert_module</a> (<em class="parameter"><code><span class="type">struct kmod_module</span> *mod</code></em>,
+ <em class="parameter"><code>unsigned <span class="type">int</span> flags</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *options</code></em>);
+<span class="returnvalue">int</span> <a class="link" href="libkmod-libkmod-module.html#kmod-module-probe-insert-module" title="kmod_module_probe_insert_module ()">kmod_module_probe_insert_module</a> (<em class="parameter"><code><span class="type">struct kmod_module</span> *mod</code></em>,
+ <em class="parameter"><code>unsigned <span class="type">int</span> flags</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *extra_options</code></em>,
+ <em class="parameter"><code><span class="type">int</span> (*run_install) (struct kmod_module *m, const char *cmdline, void *data)</code></em>,
+ <em class="parameter"><code>const <span class="type">void</span> *data</code></em>,
+ <em class="parameter"><code><span class="type">void</span> (*print_action) (struct kmod_module *m, bool install, const char *options)</code></em>);
+<span class="returnvalue">int</span> <a class="link" href="libkmod-libkmod-module.html#kmod-module-remove-module" title="kmod_module_remove_module ()">kmod_module_remove_module</a> (<em class="parameter"><code><span class="type">struct kmod_module</span> *mod</code></em>,
+ <em class="parameter"><code>unsigned <span class="type">int</span> flags</code></em>);
+struct <a class="link" href="libkmod-libkmod-module.html#kmod-module" title="struct kmod_module"><span class="returnvalue">kmod_module</span></a> * <a class="link" href="libkmod-libkmod-module.html#kmod-module-get-module" title="kmod_module_get_module ()">kmod_module_get_module</a> (<em class="parameter"><code>const <span class="type">struct kmod_list</span> *entry</code></em>);
+struct <a class="link" href="libkmod-libkmod-list.html#kmod-list" title="struct kmod_list"><span class="returnvalue">kmod_list</span></a> * <a class="link" href="libkmod-libkmod-module.html#kmod-module-get-dependencies" title="kmod_module_get_dependencies ()">kmod_module_get_dependencies</a> (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>);
+<span class="returnvalue">int</span> <a class="link" href="libkmod-libkmod-module.html#kmod-module-get-softdeps" title="kmod_module_get_softdeps ()">kmod_module_get_softdeps</a> (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>,
+ <em class="parameter"><code><span class="type">struct kmod_list</span> **pre</code></em>,
+ <em class="parameter"><code><span class="type">struct kmod_list</span> **post</code></em>);
+<span class="returnvalue">int</span> <a class="link" href="libkmod-libkmod-module.html#kmod-module-apply-filter" title="kmod_module_apply_filter ()">kmod_module_apply_filter</a> (<em class="parameter"><code>const <span class="type">struct kmod_ctx</span> *ctx</code></em>,
+ <em class="parameter"><code><span class="type">enum kmod_filter</span> filter_type</code></em>,
+ <em class="parameter"><code>const <span class="type">struct kmod_list</span> *input</code></em>,
+ <em class="parameter"><code><span class="type">struct kmod_list</span> **output</code></em>);
+<span class="returnvalue">int</span> <a class="link" href="libkmod-libkmod-module.html#kmod-module-get-filtered-blacklist" title="kmod_module_get_filtered_blacklist ()">kmod_module_get_filtered_blacklist</a> (<em class="parameter"><code>const <span class="type">struct kmod_ctx</span> *ctx</code></em>,
+ <em class="parameter"><code>const <span class="type">struct kmod_list</span> *input</code></em>,
+ <em class="parameter"><code><span class="type">struct kmod_list</span> **output</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="libkmod-libkmod-module.html#kmod-module-get-install-commands" title="kmod_module_get_install_commands ()">kmod_module_get_install_commands</a> (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="libkmod-libkmod-module.html#kmod-module-get-remove-commands" title="kmod_module_get_remove_commands ()">kmod_module_get_remove_commands</a> (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="libkmod-libkmod-module.html#kmod-module-get-name" title="kmod_module_get_name ()">kmod_module_get_name</a> (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="libkmod-libkmod-module.html#kmod-module-get-options" title="kmod_module_get_options ()">kmod_module_get_options</a> (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="libkmod-libkmod-module.html#kmod-module-get-path" title="kmod_module_get_path ()">kmod_module_get_path</a> (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>);
+<span class="returnvalue">int</span> <a class="link" href="libkmod-libkmod-module.html#kmod-module-get-dependency-symbols" title="kmod_module_get_dependency_symbols ()">kmod_module_get_dependency_symbols</a> (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>,
+ <em class="parameter"><code><span class="type">struct kmod_list</span> **list</code></em>);
+<span class="returnvalue">int</span> <a class="link" href="libkmod-libkmod-module.html#kmod-module-dependency-symbol-get-bind" title="kmod_module_dependency_symbol_get_bind ()">kmod_module_dependency_symbol_get_bind</a>
+ (<em class="parameter"><code>const <span class="type">struct kmod_list</span> *entry</code></em>);
+<span class="returnvalue">uint64_t</span> <a class="link" href="libkmod-libkmod-module.html#kmod-module-dependency-symbol-get-crc" title="kmod_module_dependency_symbol_get_crc ()">kmod_module_dependency_symbol_get_crc</a>
+ (<em class="parameter"><code>const <span class="type">struct kmod_list</span> *entry</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="libkmod-libkmod-module.html#kmod-module-dependency-symbol-get-symbol" title="kmod_module_dependency_symbol_get_symbol ()">kmod_module_dependency_symbol_get_symbol</a>
+ (<em class="parameter"><code>const <span class="type">struct kmod_list</span> *entry</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="libkmod-libkmod-module.html#kmod-module-dependency-symbols-free-list" title="kmod_module_dependency_symbols_free_list ()">kmod_module_dependency_symbols_free_list</a>
+ (<em class="parameter"><code><span class="type">struct kmod_list</span> *list</code></em>);
+struct <a class="link" href="libkmod-libkmod-list.html#kmod-list" title="struct kmod_list"><span class="returnvalue">kmod_list</span></a> * <a class="link" href="libkmod-libkmod-module.html#kmod-module-get-sections" title="kmod_module_get_sections ()">kmod_module_get_sections</a> (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="libkmod-libkmod-module.html#kmod-module-section-free-list" title="kmod_module_section_free_list ()">kmod_module_section_free_list</a> (<em class="parameter"><code><span class="type">struct kmod_list</span> *list</code></em>);
+unsigned <span class="returnvalue">long</span> <a class="link" href="libkmod-libkmod-module.html#kmod-module-section-get-address" title="kmod_module_section_get_address ()">kmod_module_section_get_address</a> (<em class="parameter"><code>const <span class="type">struct kmod_list</span> *entry</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="libkmod-libkmod-module.html#kmod-module-section-get-name" title="kmod_module_section_get_name ()">kmod_module_section_get_name</a> (<em class="parameter"><code>const <span class="type">struct kmod_list</span> *entry</code></em>);
+<span class="returnvalue">int</span> <a class="link" href="libkmod-libkmod-module.html#kmod-module-get-symbols" title="kmod_module_get_symbols ()">kmod_module_get_symbols</a> (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>,
+ <em class="parameter"><code><span class="type">struct kmod_list</span> **list</code></em>);
+<span class="returnvalue">uint64_t</span> <a class="link" href="libkmod-libkmod-module.html#kmod-module-symbol-get-crc" title="kmod_module_symbol_get_crc ()">kmod_module_symbol_get_crc</a> (<em class="parameter"><code>const <span class="type">struct kmod_list</span> *entry</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="libkmod-libkmod-module.html#kmod-module-symbol-get-symbol" title="kmod_module_symbol_get_symbol ()">kmod_module_symbol_get_symbol</a> (<em class="parameter"><code>const <span class="type">struct kmod_list</span> *entry</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="libkmod-libkmod-module.html#kmod-module-symbols-free-list" title="kmod_module_symbols_free_list ()">kmod_module_symbols_free_list</a> (<em class="parameter"><code><span class="type">struct kmod_list</span> *list</code></em>);
+<span class="returnvalue">int</span> <a class="link" href="libkmod-libkmod-module.html#kmod-module-get-versions" title="kmod_module_get_versions ()">kmod_module_get_versions</a> (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>,
+ <em class="parameter"><code><span class="type">struct kmod_list</span> **list</code></em>);
+<span class="returnvalue">uint64_t</span> <a class="link" href="libkmod-libkmod-module.html#kmod-module-version-get-crc" title="kmod_module_version_get_crc ()">kmod_module_version_get_crc</a> (<em class="parameter"><code>const <span class="type">struct kmod_list</span> *entry</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="libkmod-libkmod-module.html#kmod-module-version-get-symbol" title="kmod_module_version_get_symbol ()">kmod_module_version_get_symbol</a> (<em class="parameter"><code>const <span class="type">struct kmod_list</span> *entry</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="libkmod-libkmod-module.html#kmod-module-versions-free-list" title="kmod_module_versions_free_list ()">kmod_module_versions_free_list</a> (<em class="parameter"><code><span class="type">struct kmod_list</span> *list</code></em>);
+<span class="returnvalue">int</span> <a class="link" href="libkmod-libkmod-module.html#kmod-module-get-info" title="kmod_module_get_info ()">kmod_module_get_info</a> (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>,
+ <em class="parameter"><code><span class="type">struct kmod_list</span> **list</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="libkmod-libkmod-module.html#kmod-module-info-free-list" title="kmod_module_info_free_list ()">kmod_module_info_free_list</a> (<em class="parameter"><code><span class="type">struct kmod_list</span> *list</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="libkmod-libkmod-module.html#kmod-module-info-get-key" title="kmod_module_info_get_key ()">kmod_module_info_get_key</a> (<em class="parameter"><code>const <span class="type">struct kmod_list</span> *entry</code></em>);
+const <span class="returnvalue">char</span> * <a class="link" href="libkmod-libkmod-module.html#kmod-module-info-get-value" title="kmod_module_info_get_value ()">kmod_module_info_get_value</a> (<em class="parameter"><code>const <span class="type">struct kmod_list</span> *entry</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="libkmod-libkmod-module.description"></a><h2>Description</h2>
+</div>
+<div class="refsect1">
+<a name="libkmod-libkmod-module.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="kmod-module"></a><h3>struct kmod_module</h3>
+<pre class="programlisting">struct kmod_module;</pre>
+<p>
+Opaque object representing a module.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-new-from-lookup"></a><h3>kmod_module_new_from_lookup ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span> kmod_module_new_from_lookup (<em class="parameter"><code><span class="type">struct kmod_ctx</span> *ctx</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *given_alias</code></em>,
+ <em class="parameter"><code><span class="type">struct kmod_list</span> **list</code></em>);</pre>
+<p>
+Create a new list of kmod modules using an alias or module name and lookup
+libkmod's configuration files and indexes in order to find the module.
+Once it's found in one of the places, it stops searching and create the
+list of modules that is saved in <em class="parameter"><code>list</code></em>.
+</p>
+<p>
+The search order is: 1. aliases in configuration file; 2. module names in
+modules.dep index; 3. symbol aliases in modules.symbols index; 4. aliases
+in modules.alias index.
+</p>
+<p>
+The initial refcount is 1, and needs to be decremented to release the
+resources of the kmod_module. The returned <em class="parameter"><code>list</code></em> must be released by
+calling <a class="link" href="libkmod-libkmod-module.html#kmod-module-unref-list" title="kmod_module_unref_list ()"><code class="function">kmod_module_unref_list()</code></a>. Since libkmod keeps track of all
+kmod_modules created, they are all released upon <em class="parameter"><code>ctx</code></em> destruction too. Do
+not unref <em class="parameter"><code>ctx</code></em> before all the desired operations with the returned list are
+completed.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ctx</code></em> :</span></p></td>
+<td>kmod library context</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>given_alias</code></em> :</span></p></td>
+<td>alias to look for</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td>an empty list where to save the list of modules matching
+<em class="parameter"><code>given_alias</code></em>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>0 on success or &lt; 0 otherwise. It fails if any of the lookup
+methods failed, which is basically due to memory allocation fail. If module
+is not found, it still returns 0, but <em class="parameter"><code>list</code></em> is an empty list.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-new-from-name"></a><h3>kmod_module_new_from_name ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span> kmod_module_new_from_name (<em class="parameter"><code><span class="type">struct kmod_ctx</span> *ctx</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *name</code></em>,
+ <em class="parameter"><code><span class="type">struct kmod_module</span> **mod</code></em>);</pre>
+<p>
+Create a new struct kmod_module using the module name. <em class="parameter"><code>name</code></em> can not be an
+alias, file name or anything else; it must be a module name. There's no
+check if the module exists in the system.
+</p>
+<p>
+This function is also used internally by many others that return a new
+struct kmod_module or a new list of modules.
+</p>
+<p>
+The initial refcount is 1, and needs to be decremented to release the
+resources of the kmod_module. Since libkmod keeps track of all
+kmod_modules created, they are all released upon <em class="parameter"><code>ctx</code></em> destruction too. Do
+not unref <em class="parameter"><code>ctx</code></em> before all the desired operations with the returned
+kmod_module are done.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ctx</code></em> :</span></p></td>
+<td>kmod library context</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>name</code></em> :</span></p></td>
+<td>name of the module</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mod</code></em> :</span></p></td>
+<td>where to save the created struct kmod_module</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>0 on success or &lt; 0 otherwise. It fails if name is not a valid
+module name or if memory allocation failed.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-new-from-path"></a><h3>kmod_module_new_from_path ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span> kmod_module_new_from_path (<em class="parameter"><code><span class="type">struct kmod_ctx</span> *ctx</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *path</code></em>,
+ <em class="parameter"><code><span class="type">struct kmod_module</span> **mod</code></em>);</pre>
+<p>
+Create a new struct kmod_module using the module path. <em class="parameter"><code>path</code></em> must be an
+existent file with in the filesystem and must be accessible to libkmod.
+</p>
+<p>
+The initial refcount is 1, and needs to be decremented to release the
+resources of the kmod_module. Since libkmod keeps track of all
+kmod_modules created, they are all released upon <em class="parameter"><code>ctx</code></em> destruction too. Do
+not unref <em class="parameter"><code>ctx</code></em> before all the desired operations with the returned
+kmod_module are done.
+</p>
+<p>
+If <em class="parameter"><code>path</code></em> is relative, it's treated as relative to the current working
+directory. Otherwise, give an absolute path.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ctx</code></em> :</span></p></td>
+<td>kmod library context</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>path</code></em> :</span></p></td>
+<td>path where to find the given module</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mod</code></em> :</span></p></td>
+<td>where to save the created struct kmod_module</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>0 on success or &lt; 0 otherwise. It fails if file does not exist, if
+it's not a valid file for a kmod_module or if memory allocation failed.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-ref"></a><h3>kmod_module_ref ()</h3>
+<pre class="programlisting">struct <a class="link" href="libkmod-libkmod-module.html#kmod-module" title="struct kmod_module"><span class="returnvalue">kmod_module</span></a> * kmod_module_ref (<em class="parameter"><code><span class="type">struct kmod_module</span> *mod</code></em>);</pre>
+<p>
+Take a reference of the kmod module, incrementing its refcount.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mod</code></em> :</span></p></td>
+<td>kmod module</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the passed <em class="parameter"><code>module</code></em> with its refcount incremented.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-unref"></a><h3>kmod_module_unref ()</h3>
+<pre class="programlisting">struct <a class="link" href="libkmod-libkmod-module.html#kmod-module" title="struct kmod_module"><span class="returnvalue">kmod_module</span></a> * kmod_module_unref (<em class="parameter"><code><span class="type">struct kmod_module</span> *mod</code></em>);</pre>
+<p>
+Drop a reference of the kmod module. If the refcount reaches zero, its
+resources are released.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mod</code></em> :</span></p></td>
+<td>kmod module</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>NULL if <em class="parameter"><code>mod</code></em> is NULL or if the module was released. Otherwise it
+returns the passed <em class="parameter"><code>mod</code></em> with its refcount decremented.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-unref-list"></a><h3>kmod_module_unref_list ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span> kmod_module_unref_list (<em class="parameter"><code><span class="type">struct kmod_list</span> *list</code></em>);</pre>
+<p>
+Drop a reference of each kmod module in <em class="parameter"><code>list</code></em> and releases the resources
+taken by the list itself.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td>list of kmod modules</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-insert-module"></a><h3>kmod_module_insert_module ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span> kmod_module_insert_module (<em class="parameter"><code><span class="type">struct kmod_module</span> *mod</code></em>,
+ <em class="parameter"><code>unsigned <span class="type">int</span> flags</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *options</code></em>);</pre>
+<p>
+Insert a module in Linux kernel. It opens the file pointed by <em class="parameter"><code>mod</code></em>,
+mmap'ing it and passing to kernel.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mod</code></em> :</span></p></td>
+<td>kmod module</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>flags</code></em> :</span></p></td>
+<td>flags are not passed to Linux Kernel, but instead they dictate the
+behavior of this function, valid flags are
+KMOD_INSERT_FORCE_VERMAGIC: ignore kernel version magic;
+KMOD_INSERT_FORCE_MODVERSION: ignore symbol version hashes.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>options</code></em> :</span></p></td>
+<td>module's options to pass to Linux Kernel.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>0 on success or &lt; 0 on failure. If module is already loaded it
+returns -EEXIST.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-probe-insert-module"></a><h3>kmod_module_probe_insert_module ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span> kmod_module_probe_insert_module (<em class="parameter"><code><span class="type">struct kmod_module</span> *mod</code></em>,
+ <em class="parameter"><code>unsigned <span class="type">int</span> flags</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> *extra_options</code></em>,
+ <em class="parameter"><code><span class="type">int</span> (*run_install) (struct kmod_module *m, const char *cmdline, void *data)</code></em>,
+ <em class="parameter"><code>const <span class="type">void</span> *data</code></em>,
+ <em class="parameter"><code><span class="type">void</span> (*print_action) (struct kmod_module *m, bool install, const char *options)</code></em>);</pre>
+<p>
+Insert a module in Linux kernel resolving dependencies, soft dependencies,
+install commands and applying blacklist.
+</p>
+<p>
+If <em class="parameter"><code>run_install</code></em> is NULL, this function will fork and exec by calling
+system(3). Don't pass a NULL argument in <em class="parameter"><code>run_install</code></em> if your binary is
+setuid/setgid (see warning in system(3)). If you need control over the
+execution of an install command, give a callback function instead.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mod</code></em> :</span></p></td>
+<td>kmod module</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>flags</code></em> :</span></p></td>
+<td>flags are not passed to Linux Kernel, but instead they dictate the
+behavior of this function, valid flags are
+KMOD_PROBE_FORCE_VERMAGIC: ignore kernel version magic;
+KMOD_PROBE_FORCE_MODVERSION: ignore symbol version hashes;
+KMOD_PROBE_IGNORE_COMMAND: whether the probe should ignore install
+commands and softdeps configured in the system;
+KMOD_PROBE_IGNORE_LOADED: do not check whether the module is already
+live in kernel or not;
+KMOD_PROBE_DRY_RUN: dry run, do not insert module, just call the
+associated callback function;
+KMOD_PROBE_FAIL_ON_LOADED: if KMOD_PROBE_IGNORE_LOADED is not specified
+and the module is already live in kernel, the function will fail if this
+flag is specified;
+KMOD_PROBE_APPLY_BLACKLIST_ALL: probe will apply KMOD_FILTER_BLACKLIST
+filter to this module and its dependencies. If any of the dependencies (or
+the module) is blacklisted, the probe will fail, unless the blacklisted
+module is already live in kernel;
+KMOD_PROBE_APPLY_BLACKLIST: probe will fail if the module is blacklisted;
+KMOD_PROBE_APPLY_BLACKLIST_ALIAS_ONLY: probe will fail if the module is an
+alias and is blacklisted.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>extra_options</code></em> :</span></p></td>
+<td>module's options to pass to Linux Kernel. It applies only
+to <em class="parameter"><code>mod</code></em>, not to its dependencies.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>run_install</code></em> :</span></p></td>
+<td>function to run when <em class="parameter"><code>mod</code></em> is backed by an install command.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>data to give back to <em class="parameter"><code>run_install</code></em> callback</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>print_action</code></em> :</span></p></td>
+<td>function to call with the action being taken (install or
+insmod). It's useful for tools like modprobe when running with verbose
+output or in dry-run mode.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>0 on success, &gt; 0 if stopped by a reason given in <em class="parameter"><code>flags</code></em> or &lt; 0 on
+failure.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-remove-module"></a><h3>kmod_module_remove_module ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span> kmod_module_remove_module (<em class="parameter"><code><span class="type">struct kmod_module</span> *mod</code></em>,
+ <em class="parameter"><code>unsigned <span class="type">int</span> flags</code></em>);</pre>
+<p>
+Remove a module from Linux kernel.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mod</code></em> :</span></p></td>
+<td>kmod module</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>flags</code></em> :</span></p></td>
+<td>flags to pass to Linux kernel when removing the module, valid flags are
+KMOD_REMOVE_FORCE: force remove module regardless if it's still in
+use by a kernel subsystem or other process;
+KMOD_REMOVE_NOWAIT: return immediately. It will fail if the module
+is in using and KMOD_REMOVE_FORCE is not specified.
+If this module is in use by any kernel subsystem or process, not using
+this flag will cause the call to block indefinitely, until the module
+is not in use anymore. Always use this flag, it's deprecated not using
+it and the default behavior might change in future to always set it.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>0 on success or &lt; 0 on failure.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-get-module"></a><h3>kmod_module_get_module ()</h3>
+<pre class="programlisting">struct <a class="link" href="libkmod-libkmod-module.html#kmod-module" title="struct kmod_module"><span class="returnvalue">kmod_module</span></a> * kmod_module_get_module (<em class="parameter"><code>const <span class="type">struct kmod_list</span> *entry</code></em>);</pre>
+<p>
+Get the kmod module of this <em class="parameter"><code>entry</code></em> in the list, increasing its refcount.
+After it's used, unref it. Since the refcount is incremented upon return,
+you still have to call <a class="link" href="libkmod-libkmod-module.html#kmod-module-unref-list" title="kmod_module_unref_list ()"><code class="function">kmod_module_unref_list()</code></a> to release the list of kmod
+modules.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>entry</code></em> :</span></p></td>
+<td>an entry in a list of kmod modules.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>NULL on failure or the kmod_module contained in this list entry
+with its refcount incremented.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-get-dependencies"></a><h3>kmod_module_get_dependencies ()</h3>
+<pre class="programlisting">struct <a class="link" href="libkmod-libkmod-list.html#kmod-list" title="struct kmod_list"><span class="returnvalue">kmod_list</span></a> * kmod_module_get_dependencies (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>);</pre>
+<p>
+Search the modules.dep index to find the dependencies of the given <em class="parameter"><code>mod</code></em>.
+The result is cached in <em class="parameter"><code>mod</code></em>, so subsequent calls to this function will
+return the already searched list of modules.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mod</code></em> :</span></p></td>
+<td>kmod module</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>NULL on failure. Otherwise it returns a list of kmod modules
+that can be released by calling <a class="link" href="libkmod-libkmod-module.html#kmod-module-unref-list" title="kmod_module_unref_list ()"><code class="function">kmod_module_unref_list()</code></a>.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-get-softdeps"></a><h3>kmod_module_get_softdeps ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span> kmod_module_get_softdeps (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>,
+ <em class="parameter"><code><span class="type">struct kmod_list</span> **pre</code></em>,
+ <em class="parameter"><code><span class="type">struct kmod_list</span> **post</code></em>);</pre>
+<p>
+Get soft dependencies for this kmod module. Soft dependencies come
+from configuration file and are not cached in <em class="parameter"><code>mod</code></em> because it may include
+dependency cycles that would make we leak kmod_module. Any call
+to this function will search for this module in configuration, allocate a
+list and return the result.
+</p>
+<p>
+Both <em class="parameter"><code>pre</code></em> and <em class="parameter"><code>post</code></em> are newly created list of kmod_module and
+should be unreferenced with <a class="link" href="libkmod-libkmod-module.html#kmod-module-unref-list" title="kmod_module_unref_list ()"><code class="function">kmod_module_unref_list()</code></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mod</code></em> :</span></p></td>
+<td>kmod module</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>pre</code></em> :</span></p></td>
+<td>where to save the list of preceding soft dependencies.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>post</code></em> :</span></p></td>
+<td>where to save the list of post soft dependencies.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>0 on success or &lt; 0 otherwise.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-apply-filter"></a><h3>kmod_module_apply_filter ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span> kmod_module_apply_filter (<em class="parameter"><code>const <span class="type">struct kmod_ctx</span> *ctx</code></em>,
+ <em class="parameter"><code><span class="type">enum kmod_filter</span> filter_type</code></em>,
+ <em class="parameter"><code>const <span class="type">struct kmod_list</span> *input</code></em>,
+ <em class="parameter"><code><span class="type">struct kmod_list</span> **output</code></em>);</pre>
+<p>
+Given a list <em class="parameter"><code>input</code></em>, this function filter it out by the filter mask
+and save it in <em class="parameter"><code>output</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ctx</code></em> :</span></p></td>
+<td>kmod library context</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>filter_type</code></em> :</span></p></td>
+<td>bitmask to filter modules out, valid types are
+KMOD_FILTER_BLACKLIST: filter modules in blacklist out;
+KMOD_FILTER_BUILTIN: filter builtin modules out.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>input</code></em> :</span></p></td>
+<td>list of kmod_module to be filtered</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>output</code></em> :</span></p></td>
+<td>where to save the new list</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>0 on success or &lt; 0 otherwise. <em class="parameter"><code>output</code></em> is saved with the updated
+list.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-get-filtered-blacklist"></a><h3>kmod_module_get_filtered_blacklist ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span> kmod_module_get_filtered_blacklist (<em class="parameter"><code>const <span class="type">struct kmod_ctx</span> *ctx</code></em>,
+ <em class="parameter"><code>const <span class="type">struct kmod_list</span> *input</code></em>,
+ <em class="parameter"><code><span class="type">struct kmod_list</span> **output</code></em>);</pre>
+<p>
+This function should not be used. Use kmod_module_apply_filter instead.
+</p>
+<p>
+Given a list <em class="parameter"><code>input</code></em>, this function filter it out with config's blacklist
+and save it in <em class="parameter"><code>output</code></em>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ctx</code></em> :</span></p></td>
+<td>kmod library context</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>input</code></em> :</span></p></td>
+<td>list of kmod_module to be filtered with blacklist</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>output</code></em> :</span></p></td>
+<td>where to save the new list</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>0 on success or &lt; 0 otherwise. <em class="parameter"><code>output</code></em> is saved with the updated
+list.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-get-install-commands"></a><h3>kmod_module_get_install_commands ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * kmod_module_get_install_commands (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>);</pre>
+<p>
+Get install commands for this kmod module. Install commands come from the
+configuration file and are cached in <em class="parameter"><code>mod</code></em>. The first call to this function
+will search for this module in configuration and subsequent calls return
+the cached string. The install commands are returned as they were in the
+configuration, concatenated by ';'. No other processing is made in this
+string.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mod</code></em> :</span></p></td>
+<td>kmod module</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a string with all install commands separated by semicolons. This
+string is owned by <em class="parameter"><code>mod</code></em>, do not free it.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-get-remove-commands"></a><h3>kmod_module_get_remove_commands ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * kmod_module_get_remove_commands (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>);</pre>
+<p>
+Get remove commands for this kmod module. Remove commands come from the
+configuration file and are cached in <em class="parameter"><code>mod</code></em>. The first call to this function
+will search for this module in configuration and subsequent calls return
+the cached string. The remove commands are returned as they were in the
+configuration, concatenated by ';'. No other processing is made in this
+string.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mod</code></em> :</span></p></td>
+<td>kmod module</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a string with all remove commands separated by semicolons. This
+string is owned by <em class="parameter"><code>mod</code></em>, do not free it.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-get-name"></a><h3>kmod_module_get_name ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * kmod_module_get_name (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>);</pre>
+<p>
+Get the name of this kmod module. Name is always available, independently
+if it was created by <a class="link" href="libkmod-libkmod-module.html#kmod-module-new-from-name" title="kmod_module_new_from_name ()"><code class="function">kmod_module_new_from_name()</code></a> or another function and
+it's always normalized (dashes are replaced with underscores).
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mod</code></em> :</span></p></td>
+<td>kmod module</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the name of this kmod module.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-get-options"></a><h3>kmod_module_get_options ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * kmod_module_get_options (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>);</pre>
+<p>
+Get options of this kmod module. Options come from the configuration file
+and are cached in <em class="parameter"><code>mod</code></em>. The first call to this function will search for
+this module in configuration and subsequent calls return the cached string.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mod</code></em> :</span></p></td>
+<td>kmod module</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a string with all the options separated by spaces. This string is
+owned by <em class="parameter"><code>mod</code></em>, do not free it.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-get-path"></a><h3>kmod_module_get_path ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * kmod_module_get_path (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>);</pre>
+<p>
+Get the path of this kmod module. If this kmod module was not created by
+path, it can search the modules.dep index in order to find out the module
+under context's dirname.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mod</code></em> :</span></p></td>
+<td>kmod module</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the path of this kmod module or NULL if such information is not
+available.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-get-dependency-symbols"></a><h3>kmod_module_get_dependency_symbols ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span> kmod_module_get_dependency_symbols (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>,
+ <em class="parameter"><code><span class="type">struct kmod_list</span> **list</code></em>);</pre>
+<p>
+Get a list of entries in ELF section ".symtab" or "__ksymtab_strings".
+</p>
+<p>
+After use, free the <em class="parameter"><code>list</code></em> by calling
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-dependency-symbols-free-list" title="kmod_module_dependency_symbols_free_list ()"><code class="function">kmod_module_dependency_symbols_free_list()</code></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mod</code></em> :</span></p></td>
+<td>kmod module</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td>where to return list of module dependency_symbols. Use
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-dependency-symbol-get-symbol" title="kmod_module_dependency_symbol_get_symbol ()"><code class="function">kmod_module_dependency_symbol_get_symbol()</code></a> and
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-dependency-symbol-get-crc" title="kmod_module_dependency_symbol_get_crc ()"><code class="function">kmod_module_dependency_symbol_get_crc()</code></a>. Release this list with
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-dependency-symbols-free-list" title="kmod_module_dependency_symbols_free_list ()"><code class="function">kmod_module_dependency_symbols_free_list()</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>0 on success or &lt; 0 otherwise.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-dependency-symbol-get-bind"></a><h3>kmod_module_dependency_symbol_get_bind ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span> kmod_module_dependency_symbol_get_bind
+ (<em class="parameter"><code>const <span class="type">struct kmod_list</span> *entry</code></em>);</pre>
+<p>
+Get the bind type of a kmod module dependency_symbol.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>entry</code></em> :</span></p></td>
+<td>a list entry representing a kmod module dependency_symbol</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the bind of this kmod module dependency_symbol on success
+or &lt; 0 on failure.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-dependency-symbol-get-crc"></a><h3>kmod_module_dependency_symbol_get_crc ()</h3>
+<pre class="programlisting"><span class="returnvalue">uint64_t</span> kmod_module_dependency_symbol_get_crc
+ (<em class="parameter"><code>const <span class="type">struct kmod_list</span> *entry</code></em>);</pre>
+<p>
+Get the crc of a kmod module dependency_symbol.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>entry</code></em> :</span></p></td>
+<td>a list entry representing a kmod module dependency_symbol</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the crc of this kmod module dependency_symbol on success or NULL on
+failure. The string is owned by the dependency_symbol, do not free it.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-dependency-symbol-get-symbol"></a><h3>kmod_module_dependency_symbol_get_symbol ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * kmod_module_dependency_symbol_get_symbol
+ (<em class="parameter"><code>const <span class="type">struct kmod_list</span> *entry</code></em>);</pre>
+<p>
+Get the dependency symbol of a kmod module
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>entry</code></em> :</span></p></td>
+<td>a list entry representing a kmod module dependency_symbols</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the symbol of this kmod module dependency_symbols on success or NULL
+on failure. The string is owned by the dependency_symbols, do not free it.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-dependency-symbols-free-list"></a><h3>kmod_module_dependency_symbols_free_list ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> kmod_module_dependency_symbols_free_list
+ (<em class="parameter"><code><span class="type">struct kmod_list</span> *list</code></em>);</pre>
+<p>
+Release the resources taken by <em class="parameter"><code>list</code></em>
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td>kmod module dependency_symbols list</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-get-sections"></a><h3>kmod_module_get_sections ()</h3>
+<pre class="programlisting">struct <a class="link" href="libkmod-libkmod-list.html#kmod-list" title="struct kmod_list"><span class="returnvalue">kmod_list</span></a> * kmod_module_get_sections (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>);</pre>
+<p>
+Get a list of kmod sections of this <em class="parameter"><code>mod</code></em>, as returned by Linux Kernel. The
+structure contained in this list is internal to libkmod and their fields
+can be obtained by calling <a class="link" href="libkmod-libkmod-module.html#kmod-module-section-get-name" title="kmod_module_section_get_name ()"><code class="function">kmod_module_section_get_name()</code></a> and
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-section-get-address" title="kmod_module_section_get_address ()"><code class="function">kmod_module_section_get_address()</code></a>.
+</p>
+<p>
+After use, free the <em class="parameter"><code>list</code></em> by calling <a class="link" href="libkmod-libkmod-module.html#kmod-module-section-free-list" title="kmod_module_section_free_list ()"><code class="function">kmod_module_section_free_list()</code></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mod</code></em> :</span></p></td>
+<td>kmod module</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new list of kmod module sections on success or NULL on failure.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-section-free-list"></a><h3>kmod_module_section_free_list ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> kmod_module_section_free_list (<em class="parameter"><code><span class="type">struct kmod_list</span> *list</code></em>);</pre>
+<p>
+Release the resources taken by <em class="parameter"><code>list</code></em>
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td>kmod module section list</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-section-get-address"></a><h3>kmod_module_section_get_address ()</h3>
+<pre class="programlisting">unsigned <span class="returnvalue">long</span> kmod_module_section_get_address (<em class="parameter"><code>const <span class="type">struct kmod_list</span> *entry</code></em>);</pre>
+<p>
+Get the address of a kmod module section.
+</p>
+<p>
+After use, free the <em class="parameter"><code>list</code></em> by calling <a class="link" href="libkmod-libkmod-module.html#kmod-module-section-free-list" title="kmod_module_section_free_list ()"><code class="function">kmod_module_section_free_list()</code></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>entry</code></em> :</span></p></td>
+<td>a list entry representing a kmod module section</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the address of this kmod module section on success or ULONG_MAX
+on failure.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-section-get-name"></a><h3>kmod_module_section_get_name ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * kmod_module_section_get_name (<em class="parameter"><code>const <span class="type">struct kmod_list</span> *entry</code></em>);</pre>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-get-symbols"></a><h3>kmod_module_get_symbols ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span> kmod_module_get_symbols (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>,
+ <em class="parameter"><code><span class="type">struct kmod_list</span> **list</code></em>);</pre>
+<p>
+Get a list of entries in ELF section ".symtab" or "__ksymtab_strings".
+</p>
+<p>
+After use, free the <em class="parameter"><code>list</code></em> by calling <a class="link" href="libkmod-libkmod-module.html#kmod-module-symbols-free-list" title="kmod_module_symbols_free_list ()"><code class="function">kmod_module_symbols_free_list()</code></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mod</code></em> :</span></p></td>
+<td>kmod module</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td>where to return list of module symbols. Use
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-symbol-get-symbol" title="kmod_module_symbol_get_symbol ()"><code class="function">kmod_module_symbol_get_symbol()</code></a> and
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-symbol-get-crc" title="kmod_module_symbol_get_crc ()"><code class="function">kmod_module_symbol_get_crc()</code></a>. Release this list with
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-symbols-free-list" title="kmod_module_symbols_free_list ()"><code class="function">kmod_module_symbols_free_list()</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>0 on success or &lt; 0 otherwise.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-symbol-get-crc"></a><h3>kmod_module_symbol_get_crc ()</h3>
+<pre class="programlisting"><span class="returnvalue">uint64_t</span> kmod_module_symbol_get_crc (<em class="parameter"><code>const <span class="type">struct kmod_list</span> *entry</code></em>);</pre>
+<p>
+Get the crc of a kmod module symbol.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>entry</code></em> :</span></p></td>
+<td>a list entry representing a kmod module symbol</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the crc of this kmod module symbol on success or NULL on
+failure. The string is owned by the symbol, do not free it.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-symbol-get-symbol"></a><h3>kmod_module_symbol_get_symbol ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * kmod_module_symbol_get_symbol (<em class="parameter"><code>const <span class="type">struct kmod_list</span> *entry</code></em>);</pre>
+<p>
+Get the symbol of a kmod module symbols.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>entry</code></em> :</span></p></td>
+<td>a list entry representing a kmod module symbols</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the symbol of this kmod module symbols on success or NULL
+on failure. The string is owned by the symbols, do not free it.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-symbols-free-list"></a><h3>kmod_module_symbols_free_list ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> kmod_module_symbols_free_list (<em class="parameter"><code><span class="type">struct kmod_list</span> *list</code></em>);</pre>
+<p>
+Release the resources taken by <em class="parameter"><code>list</code></em>
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td>kmod module symbols list</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-get-versions"></a><h3>kmod_module_get_versions ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span> kmod_module_get_versions (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>,
+ <em class="parameter"><code><span class="type">struct kmod_list</span> **list</code></em>);</pre>
+<p>
+Get a list of entries in ELF section "__versions".
+</p>
+<p>
+After use, free the <em class="parameter"><code>list</code></em> by calling <a class="link" href="libkmod-libkmod-module.html#kmod-module-versions-free-list" title="kmod_module_versions_free_list ()"><code class="function">kmod_module_versions_free_list()</code></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mod</code></em> :</span></p></td>
+<td>kmod module</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td>where to return list of module versions. Use
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-version-get-symbol" title="kmod_module_version_get_symbol ()"><code class="function">kmod_module_version_get_symbol()</code></a> and
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-version-get-crc" title="kmod_module_version_get_crc ()"><code class="function">kmod_module_version_get_crc()</code></a>. Release this list with
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-versions-free-list" title="kmod_module_versions_free_list ()"><code class="function">kmod_module_versions_free_list()</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>0 on success or &lt; 0 otherwise.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-version-get-crc"></a><h3>kmod_module_version_get_crc ()</h3>
+<pre class="programlisting"><span class="returnvalue">uint64_t</span> kmod_module_version_get_crc (<em class="parameter"><code>const <span class="type">struct kmod_list</span> *entry</code></em>);</pre>
+<p>
+Get the crc of a kmod module version.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>entry</code></em> :</span></p></td>
+<td>a list entry representing a kmod module version</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the crc of this kmod module version on success or NULL on
+failure. The string is owned by the version, do not free it.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-version-get-symbol"></a><h3>kmod_module_version_get_symbol ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * kmod_module_version_get_symbol (<em class="parameter"><code>const <span class="type">struct kmod_list</span> *entry</code></em>);</pre>
+<p>
+Get the symbol of a kmod module versions.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>entry</code></em> :</span></p></td>
+<td>a list entry representing a kmod module versions</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the symbol of this kmod module versions on success or NULL
+on failure. The string is owned by the versions, do not free it.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-versions-free-list"></a><h3>kmod_module_versions_free_list ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> kmod_module_versions_free_list (<em class="parameter"><code><span class="type">struct kmod_list</span> *list</code></em>);</pre>
+<p>
+Release the resources taken by <em class="parameter"><code>list</code></em>
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td>kmod module versions list</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-get-info"></a><h3>kmod_module_get_info ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span> kmod_module_get_info (<em class="parameter"><code>const <span class="type">struct kmod_module</span> *mod</code></em>,
+ <em class="parameter"><code><span class="type">struct kmod_list</span> **list</code></em>);</pre>
+<p>
+Get a list of entries in ELF section ".modinfo", these contain
+alias, license, depends, vermagic and other keys with respective
+values. If the module is signed (CONFIG_MODULE_SIG), information
+about the module signature is included as well: signer,
+sig_key and sig_hashalgo.
+</p>
+<p>
+After use, free the <em class="parameter"><code>list</code></em> by calling <a class="link" href="libkmod-libkmod-module.html#kmod-module-info-free-list" title="kmod_module_info_free_list ()"><code class="function">kmod_module_info_free_list()</code></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>mod</code></em> :</span></p></td>
+<td>kmod module</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td>where to return list of module information. Use
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-info-get-key" title="kmod_module_info_get_key ()"><code class="function">kmod_module_info_get_key()</code></a> and
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-info-get-value" title="kmod_module_info_get_value ()"><code class="function">kmod_module_info_get_value()</code></a>. Release this list with
+<a class="link" href="libkmod-libkmod-module.html#kmod-module-info-free-list" title="kmod_module_info_free_list ()"><code class="function">kmod_module_info_free_list()</code></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>0 on success or &lt; 0 otherwise.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-info-free-list"></a><h3>kmod_module_info_free_list ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> kmod_module_info_free_list (<em class="parameter"><code><span class="type">struct kmod_list</span> *list</code></em>);</pre>
+<p>
+Release the resources taken by <em class="parameter"><code>list</code></em>
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody><tr>
+<td><p><span class="term"><em class="parameter"><code>list</code></em> :</span></p></td>
+<td>kmod module info list</td>
+</tr></tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-info-get-key"></a><h3>kmod_module_info_get_key ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * kmod_module_info_get_key (<em class="parameter"><code>const <span class="type">struct kmod_list</span> *entry</code></em>);</pre>
+<p>
+Get the key of a kmod module info.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>entry</code></em> :</span></p></td>
+<td>a list entry representing a kmod module info</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the key of this kmod module info on success or NULL on
+failure. The string is owned by the info, do not free it.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-module-info-get-value"></a><h3>kmod_module_info_get_value ()</h3>
+<pre class="programlisting">const <span class="returnvalue">char</span> * kmod_module_info_get_value (<em class="parameter"><code>const <span class="type">struct kmod_list</span> *entry</code></em>);</pre>
+<p>
+Get the value of a kmod module info.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>entry</code></em> :</span></p></td>
+<td>a list entry representing a kmod module info</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the value of this kmod module info on success or NULL on
+failure. The string is owned by the info, do not free it.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/libkmod/docs/html/libkmod-libkmod.html b/libkmod/docs/html/libkmod-libkmod.html
new file mode 100644
index 0000000..22b804b
--- /dev/null
+++ b/libkmod/docs/html/libkmod-libkmod.html
@@ -0,0 +1,436 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>libkmod</title>
+<meta name="generator" content="DocBook XSL Stylesheets V1.78.1">
+<link rel="home" href="index.html" title="libkmod Reference Manual">
+<link rel="up" href="ch01.html" title="libkmod">
+<link rel="prev" href="ch01.html" title="libkmod">
+<link rel="next" href="libkmod-libkmod-list.html" title="libkmod-list">
+<meta name="generator" content="GTK-Doc V1.19 (XML mode)">
+<link rel="stylesheet" href="style.css" type="text/css">
+</head>
+<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
+<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2">
+<tr valign="middle">
+<td><a accesskey="p" href="ch01.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td>
+<td><a accesskey="u" href="ch01.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td>
+<td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td>
+<th width="100%" align="center">libkmod Reference Manual</th>
+<td><a accesskey="n" href="libkmod-libkmod-list.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td>
+</tr>
+<tr><td colspan="5" class="shortcuts">
+<a href="#libkmod-libkmod.synopsis" class="shortcut">Top</a>
+  | 
+ <a href="#libkmod-libkmod.description" class="shortcut">Description</a>
+</td></tr>
+</table>
+<div class="refentry">
+<a name="libkmod-libkmod"></a><div class="titlepage"></div>
+<div class="refnamediv"><table width="100%"><tr>
+<td valign="top">
+<h2><span class="refentrytitle"><a name="libkmod-libkmod.top_of_page"></a>libkmod</span></h2>
+<p>libkmod — libkmod context</p>
+</td>
+<td valign="top" align="right"></td>
+</tr></table></div>
+<div class="refsynopsisdiv">
+<a name="libkmod-libkmod.synopsis"></a><h2>Synopsis</h2>
+<pre class="synopsis">struct <a class="link" href="libkmod-libkmod.html#kmod-ctx" title="struct kmod_ctx">kmod_ctx</a>;
+struct <a class="link" href="libkmod-libkmod.html#kmod-ctx" title="struct kmod_ctx"><span class="returnvalue">kmod_ctx</span></a> * <a class="link" href="libkmod-libkmod.html#kmod-new" title="kmod_new ()">kmod_new</a> (<em class="parameter"><code>const <span class="type">char</span> *dirname</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> * const *config_paths</code></em>);
+struct <a class="link" href="libkmod-libkmod.html#kmod-ctx" title="struct kmod_ctx"><span class="returnvalue">kmod_ctx</span></a> * <a class="link" href="libkmod-libkmod.html#kmod-ref" title="kmod_ref ()">kmod_ref</a> (<em class="parameter"><code><span class="type">struct kmod_ctx</span> *ctx</code></em>);
+struct <a class="link" href="libkmod-libkmod.html#kmod-ctx" title="struct kmod_ctx"><span class="returnvalue">kmod_ctx</span></a> * <a class="link" href="libkmod-libkmod.html#kmod-unref" title="kmod_unref ()">kmod_unref</a> (<em class="parameter"><code><span class="type">struct kmod_ctx</span> *ctx</code></em>);
+<span class="returnvalue">int</span> <a class="link" href="libkmod-libkmod.html#kmod-load-resources" title="kmod_load_resources ()">kmod_load_resources</a> (<em class="parameter"><code><span class="type">struct kmod_ctx</span> *ctx</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="libkmod-libkmod.html#kmod-unload-resources" title="kmod_unload_resources ()">kmod_unload_resources</a> (<em class="parameter"><code><span class="type">struct kmod_ctx</span> *ctx</code></em>);
+<span class="returnvalue">int</span> <a class="link" href="libkmod-libkmod.html#kmod-validate-resources" title="kmod_validate_resources ()">kmod_validate_resources</a> (<em class="parameter"><code><span class="type">struct kmod_ctx</span> *ctx</code></em>);
+<span class="returnvalue">int</span> <a class="link" href="libkmod-libkmod.html#kmod-dump-index" title="kmod_dump_index ()">kmod_dump_index</a> (<em class="parameter"><code><span class="type">struct kmod_ctx</span> *ctx</code></em>,
+ <em class="parameter"><code><span class="type">enum kmod_index</span> type</code></em>,
+ <em class="parameter"><code><span class="type">int</span> fd</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="libkmod-libkmod.html#kmod-set-log-priority" title="kmod_set_log_priority ()">kmod_set_log_priority</a> (<em class="parameter"><code><span class="type">struct kmod_ctx</span> *ctx</code></em>,
+ <em class="parameter"><code><span class="type">int</span> priority</code></em>);
+<span class="returnvalue">int</span> <a class="link" href="libkmod-libkmod.html#kmod-get-log-priority" title="kmod_get_log_priority ()">kmod_get_log_priority</a> (<em class="parameter"><code>const <span class="type">struct kmod_ctx</span> *ctx</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="libkmod-libkmod.html#kmod-set-log-fn" title="kmod_set_log_fn ()">kmod_set_log_fn</a> (<em class="parameter"><code><span class="type">struct kmod_ctx</span> *ctx</code></em>,
+ <em class="parameter"><code><span class="type">void</span> (*log_fn) (void *log_data, int priority, const char *file, int line, const char *fn, const char *format, va_list args)</code></em>,
+ <em class="parameter"><code>const <span class="type">void</span> *data</code></em>);
+<span class="returnvalue">void</span> * <a class="link" href="libkmod-libkmod.html#kmod-get-userdata" title="kmod_get_userdata ()">kmod_get_userdata</a> (<em class="parameter"><code>const <span class="type">struct kmod_ctx</span> *ctx</code></em>);
+<span class="returnvalue">void</span> <a class="link" href="libkmod-libkmod.html#kmod-set-userdata" title="kmod_set_userdata ()">kmod_set_userdata</a> (<em class="parameter"><code><span class="type">struct kmod_ctx</span> *ctx</code></em>,
+ <em class="parameter"><code>const <span class="type">void</span> *userdata</code></em>);
+</pre>
+</div>
+<div class="refsect1">
+<a name="libkmod-libkmod.description"></a><h2>Description</h2>
+<p>
+The context contains the default values for the library user,
+and is passed to all library operations.
+</p>
+</div>
+<div class="refsect1">
+<a name="libkmod-libkmod.details"></a><h2>Details</h2>
+<div class="refsect2">
+<a name="kmod-ctx"></a><h3>struct kmod_ctx</h3>
+<pre class="programlisting">struct kmod_ctx;</pre>
+<p>
+Opaque object representing the library context.
+</p>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-new"></a><h3>kmod_new ()</h3>
+<pre class="programlisting">struct <a class="link" href="libkmod-libkmod.html#kmod-ctx" title="struct kmod_ctx"><span class="returnvalue">kmod_ctx</span></a> * kmod_new (<em class="parameter"><code>const <span class="type">char</span> *dirname</code></em>,
+ <em class="parameter"><code>const <span class="type">char</span> * const *config_paths</code></em>);</pre>
+<p>
+Create kmod library context. This reads the kmod configuration
+and fills in the default values.
+</p>
+<p>
+The initial refcount is 1, and needs to be decremented to
+release the resources of the kmod library context.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>dirname</code></em> :</span></p></td>
+<td>what to consider as linux module's directory, if NULL
+defaults to /lib/modules/`uname -r`. If it's relative,
+it's treated as relative to the current working directory.
+Otherwise, give an absolute dirname.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>config_paths</code></em> :</span></p></td>
+<td>ordered array of paths (directories or files) where
+to load from user-defined configuration parameters such as
+alias, blacklists, commands (install, remove). If
+NULL defaults to /run/modprobe.d, /etc/modprobe.d and
+/lib/modprobe.d. Give an empty vector if configuration should
+not be read. This array must be null terminated.</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>a new kmod library context</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-ref"></a><h3>kmod_ref ()</h3>
+<pre class="programlisting">struct <a class="link" href="libkmod-libkmod.html#kmod-ctx" title="struct kmod_ctx"><span class="returnvalue">kmod_ctx</span></a> * kmod_ref (<em class="parameter"><code><span class="type">struct kmod_ctx</span> *ctx</code></em>);</pre>
+<p>
+Take a reference of the kmod library context.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ctx</code></em> :</span></p></td>
+<td>kmod library context</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the passed kmod library context</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-unref"></a><h3>kmod_unref ()</h3>
+<pre class="programlisting">struct <a class="link" href="libkmod-libkmod.html#kmod-ctx" title="struct kmod_ctx"><span class="returnvalue">kmod_ctx</span></a> * kmod_unref (<em class="parameter"><code><span class="type">struct kmod_ctx</span> *ctx</code></em>);</pre>
+<p>
+Drop a reference of the kmod library context. If the refcount
+reaches zero, the resources of the context will be released.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ctx</code></em> :</span></p></td>
+<td>kmod library context</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the passed kmod library context or NULL if it's freed</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-load-resources"></a><h3>kmod_load_resources ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span> kmod_load_resources (<em class="parameter"><code><span class="type">struct kmod_ctx</span> *ctx</code></em>);</pre>
+<p>
+Load indexes and keep them open in <em class="parameter"><code>ctx</code></em>. This way it's faster to lookup
+information within the indexes. If this function is not called before a
+search, the necessary index is always opened and closed.
+</p>
+<p>
+If user will do more than one or two lookups, insertions, deletions, most
+likely it's good to call this function first. Particularly in a daemon like
+udev that on bootup issues hundreds of calls to lookup the index, calling
+this function will speedup the searches.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ctx</code></em> :</span></p></td>
+<td>kmod library context</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>0 on success or &lt; 0 otherwise.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-unload-resources"></a><h3>kmod_unload_resources ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> kmod_unload_resources (<em class="parameter"><code><span class="type">struct kmod_ctx</span> *ctx</code></em>);</pre>
+<p>
+Unload all the indexes. This will free the resources to maintain the index
+open and all subsequent searches will need to open and close the index.
+</p>
+<p>
+User is free to call <a class="link" href="libkmod-libkmod.html#kmod-load-resources" title="kmod_load_resources ()"><code class="function">kmod_load_resources()</code></a> and <a class="link" href="libkmod-libkmod.html#kmod-unload-resources" title="kmod_unload_resources ()"><code class="function">kmod_unload_resources()</code></a> as
+many times as wanted during the lifecycle of <em class="parameter"><code>ctx</code></em>. For example, if a daemon
+knows that when starting up it will lookup a lot of modules, it could call
+<a class="link" href="libkmod-libkmod.html#kmod-load-resources" title="kmod_load_resources ()"><code class="function">kmod_load_resources()</code></a> and after the first burst of searches is gone, it
+could free the resources by calling <a class="link" href="libkmod-libkmod.html#kmod-unload-resources" title="kmod_unload_resources ()"><code class="function">kmod_unload_resources()</code></a>.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ctx</code></em> :</span></p></td>
+<td>kmod library context</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>0 on success or &lt; 0 otherwise.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-validate-resources"></a><h3>kmod_validate_resources ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span> kmod_validate_resources (<em class="parameter"><code><span class="type">struct kmod_ctx</span> *ctx</code></em>);</pre>
+<p>
+Check if indexes and configuration files changed on disk and the current
+context is not valid anymore.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ctx</code></em> :</span></p></td>
+<td>kmod library context</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>KMOD_RESOURCES_OK if resources are still valid,
+KMOD_RESOURCES_MUST_RELOAD if it's sufficient to call
+<a class="link" href="libkmod-libkmod.html#kmod-unload-resources" title="kmod_unload_resources ()"><code class="function">kmod_unload_resources()</code></a> and <a class="link" href="libkmod-libkmod.html#kmod-load-resources" title="kmod_load_resources ()"><code class="function">kmod_load_resources()</code></a> or
+KMOD_RESOURCES_MUST_RECREATE if <em class="parameter"><code>ctx</code></em> must be re-created.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-dump-index"></a><h3>kmod_dump_index ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span> kmod_dump_index (<em class="parameter"><code><span class="type">struct kmod_ctx</span> *ctx</code></em>,
+ <em class="parameter"><code><span class="type">enum kmod_index</span> type</code></em>,
+ <em class="parameter"><code><span class="type">int</span> fd</code></em>);</pre>
+<p>
+Dump index to file descriptor. Note that this function doesn't use stdio.h
+so call <code class="function">fflush()</code> before calling this function to be sure data is written in
+order.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ctx</code></em> :</span></p></td>
+<td>kmod library context</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>type</code></em> :</span></p></td>
+<td>index to dump, valid indexes are
+KMOD_INDEX_MODULES_DEP: index of module dependencies;
+KMOD_INDEX_MODULES_ALIAS: index of module aliases;
+KMOD_INDEX_MODULES_SYMBOL: index of symbol aliases;
+KMOD_INDEX_MODULES_BUILTIN: index of builtin module.</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>fd</code></em> :</span></p></td>
+<td>file descriptor to dump index to</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>0 on success or &lt; 0 otherwise.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-set-log-priority"></a><h3>kmod_set_log_priority ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> kmod_set_log_priority (<em class="parameter"><code><span class="type">struct kmod_ctx</span> *ctx</code></em>,
+ <em class="parameter"><code><span class="type">int</span> priority</code></em>);</pre>
+<p>
+Set the current logging priority. The value controls which messages
+are logged.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ctx</code></em> :</span></p></td>
+<td>kmod library context</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>priority</code></em> :</span></p></td>
+<td>the new logging priority</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-get-log-priority"></a><h3>kmod_get_log_priority ()</h3>
+<pre class="programlisting"><span class="returnvalue">int</span> kmod_get_log_priority (<em class="parameter"><code>const <span class="type">struct kmod_ctx</span> *ctx</code></em>);</pre>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ctx</code></em> :</span></p></td>
+<td>kmod library context</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>the current logging priority</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-set-log-fn"></a><h3>kmod_set_log_fn ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> kmod_set_log_fn (<em class="parameter"><code><span class="type">struct kmod_ctx</span> *ctx</code></em>,
+ <em class="parameter"><code><span class="type">void</span> (*log_fn) (void *log_data, int priority, const char *file, int line, const char *fn, const char *format, va_list args)</code></em>,
+ <em class="parameter"><code>const <span class="type">void</span> *data</code></em>);</pre>
+<p>
+The built-in logging writes to stderr. It can be
+overridden by a custom function, to plug log messages
+into the user's logging functionality.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ctx</code></em> :</span></p></td>
+<td>kmod library context</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>log_fn</code></em> :</span></p></td>
+<td>function to be called for logging messages</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>data</code></em> :</span></p></td>
+<td>data to pass to log function</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-get-userdata"></a><h3>kmod_get_userdata ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> * kmod_get_userdata (<em class="parameter"><code>const <span class="type">struct kmod_ctx</span> *ctx</code></em>);</pre>
+<p>
+Retrieve stored data pointer from library context. This might be useful
+to access from callbacks.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ctx</code></em> :</span></p></td>
+<td>kmod library context</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>stored userdata</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+<hr>
+<div class="refsect2">
+<a name="kmod-set-userdata"></a><h3>kmod_set_userdata ()</h3>
+<pre class="programlisting"><span class="returnvalue">void</span> kmod_set_userdata (<em class="parameter"><code><span class="type">struct kmod_ctx</span> *ctx</code></em>,
+ <em class="parameter"><code>const <span class="type">void</span> *userdata</code></em>);</pre>
+<p>
+Store custom <em class="parameter"><code>userdata</code></em> in the library context.
+</p>
+<div class="variablelist"><table border="0" class="variablelist">
+<colgroup>
+<col align="left" valign="top">
+<col>
+</colgroup>
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>ctx</code></em> :</span></p></td>
+<td>kmod library context</td>
+</tr>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>userdata</code></em> :</span></p></td>
+<td>data pointer</td>
+</tr>
+</tbody>
+</table></div>
+</div>
+</div>
+</div>
+<div class="footer">
+<hr>
+ Generated by GTK-Doc V1.19</div>
+</body>
+</html> \ No newline at end of file
diff --git a/libkmod/docs/html/libkmod.devhelp2 b/libkmod/docs/html/libkmod.devhelp2
new file mode 100644
index 0000000..b2dca73
--- /dev/null
+++ b/libkmod/docs/html/libkmod.devhelp2
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE book PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
+<book xmlns="http://www.devhelp.net/book" title="libkmod Reference Manual" link="index.html" author="" name="libkmod" version="2" language="c">
+ <chapters>
+ <sub name="libkmod" link="ch01.html">
+ <sub name="libkmod" link="libkmod-libkmod.html"/>
+ <sub name="libkmod-list" link="libkmod-libkmod-list.html"/>
+ <sub name="libkmod-config" link="libkmod-libkmod-config.html"/>
+ <sub name="libkmod-module" link="libkmod-libkmod-module.html"/>
+ <sub name="libkmod-loaded" link="libkmod-libkmod-loaded.html"/>
+ </sub>
+ <sub name="API Index" link="api-index-full.html"/>
+ </chapters>
+ <functions>
+ <keyword type="struct" name="struct kmod_ctx" link="libkmod-libkmod.html#kmod-ctx"/>
+ <keyword type="function" name="kmod_new ()" link="libkmod-libkmod.html#kmod-new"/>
+ <keyword type="function" name="kmod_ref ()" link="libkmod-libkmod.html#kmod-ref"/>
+ <keyword type="function" name="kmod_unref ()" link="libkmod-libkmod.html#kmod-unref"/>
+ <keyword type="function" name="kmod_load_resources ()" link="libkmod-libkmod.html#kmod-load-resources"/>
+ <keyword type="function" name="kmod_unload_resources ()" link="libkmod-libkmod.html#kmod-unload-resources"/>
+ <keyword type="function" name="kmod_validate_resources ()" link="libkmod-libkmod.html#kmod-validate-resources"/>
+ <keyword type="function" name="kmod_dump_index ()" link="libkmod-libkmod.html#kmod-dump-index"/>
+ <keyword type="function" name="kmod_set_log_priority ()" link="libkmod-libkmod.html#kmod-set-log-priority"/>
+ <keyword type="function" name="kmod_get_log_priority ()" link="libkmod-libkmod.html#kmod-get-log-priority"/>
+ <keyword type="function" name="kmod_set_log_fn ()" link="libkmod-libkmod.html#kmod-set-log-fn"/>
+ <keyword type="function" name="kmod_get_userdata ()" link="libkmod-libkmod.html#kmod-get-userdata"/>
+ <keyword type="function" name="kmod_set_userdata ()" link="libkmod-libkmod.html#kmod-set-userdata"/>
+ <keyword type="struct" name="struct kmod_list" link="libkmod-libkmod-list.html#kmod-list"/>
+ <keyword type="macro" name="kmod_list_foreach()" link="libkmod-libkmod-list.html#kmod-list-foreach"/>
+ <keyword type="macro" name="kmod_list_foreach_reverse()" link="libkmod-libkmod-list.html#kmod-list-foreach-reverse"/>
+ <keyword type="function" name="kmod_list_last ()" link="libkmod-libkmod-list.html#kmod-list-last"/>
+ <keyword type="function" name="kmod_list_next ()" link="libkmod-libkmod-list.html#kmod-list-next"/>
+ <keyword type="function" name="kmod_list_prev ()" link="libkmod-libkmod-list.html#kmod-list-prev"/>
+ <keyword type="struct" name="struct kmod_config_iter" link="libkmod-libkmod-config.html#kmod-config-iter"/>
+ <keyword type="function" name="kmod_config_get_blacklists ()" link="libkmod-libkmod-config.html#kmod-config-get-blacklists"/>
+ <keyword type="function" name="kmod_config_get_install_commands ()" link="libkmod-libkmod-config.html#kmod-config-get-install-commands"/>
+ <keyword type="function" name="kmod_config_get_remove_commands ()" link="libkmod-libkmod-config.html#kmod-config-get-remove-commands"/>
+ <keyword type="function" name="kmod_config_get_aliases ()" link="libkmod-libkmod-config.html#kmod-config-get-aliases"/>
+ <keyword type="function" name="kmod_config_get_options ()" link="libkmod-libkmod-config.html#kmod-config-get-options"/>
+ <keyword type="function" name="kmod_config_get_softdeps ()" link="libkmod-libkmod-config.html#kmod-config-get-softdeps"/>
+ <keyword type="function" name="kmod_config_iter_get_key ()" link="libkmod-libkmod-config.html#kmod-config-iter-get-key"/>
+ <keyword type="function" name="kmod_config_iter_get_value ()" link="libkmod-libkmod-config.html#kmod-config-iter-get-value"/>
+ <keyword type="function" name="kmod_config_iter_next ()" link="libkmod-libkmod-config.html#kmod-config-iter-next"/>
+ <keyword type="function" name="kmod_config_iter_free_iter ()" link="libkmod-libkmod-config.html#kmod-config-iter-free-iter"/>
+ <keyword type="struct" name="struct kmod_module" link="libkmod-libkmod-module.html#kmod-module"/>
+ <keyword type="function" name="kmod_module_new_from_lookup ()" link="libkmod-libkmod-module.html#kmod-module-new-from-lookup"/>
+ <keyword type="function" name="kmod_module_new_from_name ()" link="libkmod-libkmod-module.html#kmod-module-new-from-name"/>
+ <keyword type="function" name="kmod_module_new_from_path ()" link="libkmod-libkmod-module.html#kmod-module-new-from-path"/>
+ <keyword type="function" name="kmod_module_ref ()" link="libkmod-libkmod-module.html#kmod-module-ref"/>
+ <keyword type="function" name="kmod_module_unref ()" link="libkmod-libkmod-module.html#kmod-module-unref"/>
+ <keyword type="function" name="kmod_module_unref_list ()" link="libkmod-libkmod-module.html#kmod-module-unref-list"/>
+ <keyword type="function" name="kmod_module_insert_module ()" link="libkmod-libkmod-module.html#kmod-module-insert-module"/>
+ <keyword type="function" name="kmod_module_probe_insert_module ()" link="libkmod-libkmod-module.html#kmod-module-probe-insert-module"/>
+ <keyword type="function" name="kmod_module_remove_module ()" link="libkmod-libkmod-module.html#kmod-module-remove-module"/>
+ <keyword type="function" name="kmod_module_get_module ()" link="libkmod-libkmod-module.html#kmod-module-get-module"/>
+ <keyword type="function" name="kmod_module_get_dependencies ()" link="libkmod-libkmod-module.html#kmod-module-get-dependencies"/>
+ <keyword type="function" name="kmod_module_get_softdeps ()" link="libkmod-libkmod-module.html#kmod-module-get-softdeps"/>
+ <keyword type="function" name="kmod_module_apply_filter ()" link="libkmod-libkmod-module.html#kmod-module-apply-filter"/>
+ <keyword type="function" name="kmod_module_get_filtered_blacklist ()" link="libkmod-libkmod-module.html#kmod-module-get-filtered-blacklist"/>
+ <keyword type="function" name="kmod_module_get_install_commands ()" link="libkmod-libkmod-module.html#kmod-module-get-install-commands"/>
+ <keyword type="function" name="kmod_module_get_remove_commands ()" link="libkmod-libkmod-module.html#kmod-module-get-remove-commands"/>
+ <keyword type="function" name="kmod_module_get_name ()" link="libkmod-libkmod-module.html#kmod-module-get-name"/>
+ <keyword type="function" name="kmod_module_get_options ()" link="libkmod-libkmod-module.html#kmod-module-get-options"/>
+ <keyword type="function" name="kmod_module_get_path ()" link="libkmod-libkmod-module.html#kmod-module-get-path"/>
+ <keyword type="function" name="kmod_module_get_dependency_symbols ()" link="libkmod-libkmod-module.html#kmod-module-get-dependency-symbols"/>
+ <keyword type="function" name="kmod_module_dependency_symbol_get_bind ()" link="libkmod-libkmod-module.html#kmod-module-dependency-symbol-get-bind"/>
+ <keyword type="function" name="kmod_module_dependency_symbol_get_crc ()" link="libkmod-libkmod-module.html#kmod-module-dependency-symbol-get-crc"/>
+ <keyword type="function" name="kmod_module_dependency_symbol_get_symbol ()" link="libkmod-libkmod-module.html#kmod-module-dependency-symbol-get-symbol"/>
+ <keyword type="function" name="kmod_module_dependency_symbols_free_list ()" link="libkmod-libkmod-module.html#kmod-module-dependency-symbols-free-list"/>
+ <keyword type="function" name="kmod_module_get_sections ()" link="libkmod-libkmod-module.html#kmod-module-get-sections"/>
+ <keyword type="function" name="kmod_module_section_free_list ()" link="libkmod-libkmod-module.html#kmod-module-section-free-list"/>
+ <keyword type="function" name="kmod_module_section_get_address ()" link="libkmod-libkmod-module.html#kmod-module-section-get-address"/>
+ <keyword type="function" name="kmod_module_section_get_name ()" link="libkmod-libkmod-module.html#kmod-module-section-get-name"/>
+ <keyword type="function" name="kmod_module_get_symbols ()" link="libkmod-libkmod-module.html#kmod-module-get-symbols"/>
+ <keyword type="function" name="kmod_module_symbol_get_crc ()" link="libkmod-libkmod-module.html#kmod-module-symbol-get-crc"/>
+ <keyword type="function" name="kmod_module_symbol_get_symbol ()" link="libkmod-libkmod-module.html#kmod-module-symbol-get-symbol"/>
+ <keyword type="function" name="kmod_module_symbols_free_list ()" link="libkmod-libkmod-module.html#kmod-module-symbols-free-list"/>
+ <keyword type="function" name="kmod_module_get_versions ()" link="libkmod-libkmod-module.html#kmod-module-get-versions"/>
+ <keyword type="function" name="kmod_module_version_get_crc ()" link="libkmod-libkmod-module.html#kmod-module-version-get-crc"/>
+ <keyword type="function" name="kmod_module_version_get_symbol ()" link="libkmod-libkmod-module.html#kmod-module-version-get-symbol"/>
+ <keyword type="function" name="kmod_module_versions_free_list ()" link="libkmod-libkmod-module.html#kmod-module-versions-free-list"/>
+ <keyword type="function" name="kmod_module_get_info ()" link="libkmod-libkmod-module.html#kmod-module-get-info"/>
+ <keyword type="function" name="kmod_module_info_free_list ()" link="libkmod-libkmod-module.html#kmod-module-info-free-list"/>
+ <keyword type="function" name="kmod_module_info_get_key ()" link="libkmod-libkmod-module.html#kmod-module-info-get-key"/>
+ <keyword type="function" name="kmod_module_info_get_value ()" link="libkmod-libkmod-module.html#kmod-module-info-get-value"/>
+ <keyword type="function" name="kmod_module_new_from_loaded ()" link="libkmod-libkmod-loaded.html#kmod-module-new-from-loaded"/>
+ <keyword type="function" name="kmod_module_get_initstate ()" link="libkmod-libkmod-loaded.html#kmod-module-get-initstate"/>
+ <keyword type="function" name="kmod_module_initstate_str ()" link="libkmod-libkmod-loaded.html#kmod-module-initstate-str"/>
+ <keyword type="function" name="kmod_module_get_size ()" link="libkmod-libkmod-loaded.html#kmod-module-get-size"/>
+ <keyword type="function" name="kmod_module_get_refcnt ()" link="libkmod-libkmod-loaded.html#kmod-module-get-refcnt"/>
+ <keyword type="function" name="kmod_module_get_holders ()" link="libkmod-libkmod-loaded.html#kmod-module-get-holders"/>
+ </functions>
+</book>
diff --git a/libkmod/docs/html/right.png b/libkmod/docs/html/right.png
new file mode 100644
index 0000000..92832e3
--- /dev/null
+++ b/libkmod/docs/html/right.png
Binary files differ
diff --git a/libkmod/docs/html/style.css b/libkmod/docs/html/style.css
new file mode 100644
index 0000000..d6f6c26
--- /dev/null
+++ b/libkmod/docs/html/style.css
@@ -0,0 +1,266 @@
+.synopsis, .classsynopsis
+{
+ /* tango:aluminium 1/2 */
+ background: #eeeeec;
+ border: solid 1px #d3d7cf;
+ padding: 0.5em;
+}
+.programlisting
+{
+ /* tango:sky blue 0/1 */
+ background: #e6f3ff;
+ border: solid 1px #729fcf;
+ padding: 0.5em;
+}
+.variablelist
+{
+ padding: 4px;
+ margin-left: 3em;
+}
+.variablelist td:first-child
+{
+ vertical-align: top;
+}
+
+@media screen {
+ sup a.footnote
+ {
+ position: relative;
+ top: 0em ! important;
+
+ }
+ /* this is needed so that the local anchors are displayed below the naviagtion */
+ div.footnote a[name], div.refnamediv a[name], div.refsect1 a[name], div.refsect2 a[name], div.index a[name], div.glossary a[name], div.sect1 a[name]
+ {
+ display: inline-block;
+ position: relative;
+ top:-5em;
+ }
+ /* this seems to be a bug in the xsl style sheets when generating indexes */
+ div.index div.index
+ {
+ top: 0em;
+ }
+ /* make space for the fixed navigation bar and add space at the bottom so that
+ * link targets appear somewhat close to top
+ */
+ body
+ {
+ padding-top: 3.2em;
+ padding-bottom: 20em;
+ }
+ /* style and size the navigation bar */
+ table.navigation#top
+ {
+ position: fixed;
+ /* tango:scarlet red 0/1 */
+ background: #ffe6e6;
+ border: solid 1px #ef2929;
+ margin-top: 0;
+ margin-bottom: 0;
+ top: 0;
+ left: 0;
+ height: 3em;
+ z-index: 10;
+ }
+ .navigation a, .navigation a:visited
+ {
+ /* tango:scarlet red 3 */
+ color: #a40000;
+ }
+ .navigation a:hover
+ {
+ /* tango:scarlet red 1 */
+ color: #ef2929;
+ }
+ td.shortcuts
+ {
+ /* tango:scarlet red 1 */
+ color: #ef2929;
+ font-size: 80%;
+ white-space: nowrap;
+ }
+}
+@media print {
+ table.navigation {
+ visibility: collapse;
+ display: none;
+ }
+ div.titlepage table.navigation {
+ visibility: visible;
+ display: table;
+ /* tango:scarlet red 0/1 */
+ background: #ffe6e6;
+ border: solid 1px #ef2929;
+ margin-top: 0;
+ margin-bottom: 0;
+ top: 0;
+ left: 0;
+ height: 3em;
+ }
+}
+
+.navigation .title
+{
+ font-size: 200%;
+}
+
+div.gallery-float
+{
+ float: left;
+ padding: 10px;
+}
+div.gallery-float img
+{
+ border-style: none;
+}
+div.gallery-spacer
+{
+ clear: both;
+}
+
+a, a:visited
+{
+ text-decoration: none;
+ /* tango:sky blue 2 */
+ color: #3465a4;
+}
+a:hover
+{
+ text-decoration: underline;
+ /* tango:sky blue 1 */
+ color: #729fcf;
+}
+
+div.table table
+{
+ border-collapse: collapse;
+ border-spacing: 0px;
+ /* tango:aluminium 3 */
+ border: solid 1px #babdb6;
+}
+
+div.table table td, div.table table th
+{
+ /* tango:aluminium 3 */
+ border: solid 1px #babdb6;
+ padding: 3px;
+ vertical-align: top;
+}
+
+div.table table th
+{
+ /* tango:aluminium 2 */
+ background-color: #d3d7cf;
+}
+
+hr
+{
+ /* tango:aluminium 3 */
+ color: #babdb6;
+ background: #babdb6;
+ border: none 0px;
+ height: 1px;
+ clear: both;
+}
+
+.footer
+{
+ padding-top: 3.5em;
+ /* tango:aluminium 3 */
+ color: #babdb6;
+ text-align: center;
+ font-size: 80%;
+}
+
+.warning
+{
+ /* tango:orange 0/1 */
+ background: #ffeed9;
+ border-color: #ffb04f;
+}
+.note
+{
+ /* tango:chameleon 0/0.5 */
+ background: #d8ffb2;
+ border-color: #abf562;
+}
+.note, .warning
+{
+ padding: 0.5em;
+ border-width: 1px;
+ border-style: solid;
+}
+.note h3, .warning h3
+{
+ margin-top: 0.0em
+}
+.note p, .warning p
+{
+ margin-bottom: 0.0em
+}
+
+/* blob links */
+h2 .extralinks, h3 .extralinks
+{
+ float: right;
+ /* tango:aluminium 3 */
+ color: #babdb6;
+ font-size: 80%;
+ font-weight: normal;
+}
+
+.annotation
+{
+ /* tango:aluminium 5 */
+ color: #555753;
+ font-size: 80%;
+ font-weight: normal;
+}
+
+/* code listings */
+
+.listing_code .programlisting .cbracket { color: #a40000; } /* tango: scarlet red 3 */
+.listing_code .programlisting .comment { color: #a1a39d; } /* tango: aluminium 4 */
+.listing_code .programlisting .function { color: #000000; font-weight: bold; }
+.listing_code .programlisting .function a { color: #11326b; font-weight: bold; } /* tango: sky blue 4 */
+.listing_code .programlisting .keyword { color: #4e9a06; } /* tango: chameleon 3 */
+.listing_code .programlisting .linenum { color: #babdb6; } /* tango: aluminium 3 */
+.listing_code .programlisting .normal { color: #000000; }
+.listing_code .programlisting .number { color: #75507b; } /* tango: plum 2 */
+.listing_code .programlisting .preproc { color: #204a87; } /* tango: sky blue 3 */
+.listing_code .programlisting .string { color: #c17d11; } /* tango: chocolate 2 */
+.listing_code .programlisting .type { color: #000000; }
+.listing_code .programlisting .type a { color: #11326b; } /* tango: sky blue 4 */
+.listing_code .programlisting .symbol { color: #ce5c00; } /* tango: orange 3 */
+
+.listing_frame {
+ /* tango:sky blue 1 */
+ border: solid 1px #729fcf;
+ padding: 0px;
+}
+
+.listing_lines, .listing_code {
+ margin-top: 0px;
+ margin-bottom: 0px;
+ padding: 0.5em;
+}
+.listing_lines {
+ /* tango:sky blue 0.5 */
+ background: #a6c5e3;
+ /* tango:aluminium 6 */
+ color: #2e3436;
+}
+.listing_code {
+ /* tango:sky blue 0 */
+ background: #e6f3ff;
+}
+.listing_code .programlisting {
+ /* override from previous */
+ border: none 0px;
+ padding: 0px;
+}
+.listing_lines pre, .listing_code pre {
+ margin: 0px;
+}
+
diff --git a/libkmod/docs/html/up.png b/libkmod/docs/html/up.png
new file mode 100644
index 0000000..85b3e2a
--- /dev/null
+++ b/libkmod/docs/html/up.png
Binary files differ
diff --git a/libkmod/docs/libkmod-overrides.txt b/libkmod/docs/libkmod-overrides.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libkmod/docs/libkmod-overrides.txt
diff --git a/libkmod/docs/version.xml b/libkmod/docs/version.xml
new file mode 100644
index 0000000..60d3b2f
--- /dev/null
+++ b/libkmod/docs/version.xml
@@ -0,0 +1 @@
+15
diff --git a/libkmod/libkmod-array.c b/libkmod/libkmod-array.c
index f9ca5cf..8417f9a 100644
--- a/libkmod/libkmod-array.c
+++ b/libkmod/libkmod-array.c
@@ -1,7 +1,7 @@
/*
* libkmod - interface to kernel module operations
*
- * Copyright (C) 2011-2012 ProFUSION embedded systems
+ * Copyright (C) 2011-2013 ProFUSION embedded systems
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
diff --git a/libkmod/libkmod-config.c b/libkmod/libkmod-config.c
index 398468e..24978c1 100644
--- a/libkmod/libkmod-config.c
+++ b/libkmod/libkmod-config.c
@@ -1,7 +1,7 @@
/*
* libkmod - interface to kernel module operations
*
- * Copyright (C) 2011-2012 ProFUSION embedded systems
+ * Copyright (C) 2011-2013 ProFUSION embedded systems
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -31,7 +31,7 @@
#include <dirent.h>
#include "libkmod.h"
-#include "libkmod-private.h"
+#include "libkmod-internal.h"
struct kmod_alias {
char *name;
@@ -518,7 +518,7 @@ static void kmod_config_free_softdep(struct kmod_config *config,
static void kcmdline_parse_result(struct kmod_config *config, char *modname,
char *param, char *value)
{
- if (modname == NULL || param == NULL || value == NULL)
+ if (modname == NULL || param == NULL)
return;
DBG(config->ctx, "%s %s\n", modname, param);
@@ -833,7 +833,7 @@ static int conf_files_list(struct kmod_ctx *ctx, struct kmod_list **list,
if (S_ISREG(st.st_mode)) {
conf_files_insert_sorted(ctx, list, path, NULL);
return 0;
- } if (!S_ISDIR(st.st_mode)) {
+ } else if (!S_ISDIR(st.st_mode)) {
ERR(ctx, "unsupported file mode %s: %#x\n",
path, st.st_mode);
return -EINVAL;
diff --git a/libkmod/libkmod-elf.c b/libkmod/libkmod-elf.c
index ef6bd2a..1c11a24 100644
--- a/libkmod/libkmod-elf.c
+++ b/libkmod/libkmod-elf.c
@@ -1,7 +1,7 @@
/*
* libkmod - interface to kernel module operations
*
- * Copyright (C) 2011-2012 ProFUSION embedded systems
+ * Copyright (C) 2011-2013 ProFUSION embedded systems
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -25,7 +25,7 @@
#include <errno.h>
#include "libkmod.h"
-#include "libkmod-private.h"
+#include "libkmod-internal.h"
enum kmod_elf_class {
KMOD_ELF_32 = (1 << 1),
@@ -280,10 +280,10 @@ struct kmod_elf *kmod_elf_new(const void *memory, off_t size)
size_t hdr_size, shdr_size, min_size;
int class;
- assert(sizeof(uint16_t) == sizeof(Elf32_Half));
- assert(sizeof(uint16_t) == sizeof(Elf64_Half));
- assert(sizeof(uint32_t) == sizeof(Elf32_Word));
- assert(sizeof(uint32_t) == sizeof(Elf64_Word));
+ assert_cc(sizeof(uint16_t) == sizeof(Elf32_Half));
+ assert_cc(sizeof(uint16_t) == sizeof(Elf64_Half));
+ assert_cc(sizeof(uint32_t) == sizeof(Elf32_Word));
+ assert_cc(sizeof(uint32_t) == sizeof(Elf64_Word));
class = elf_identify(memory, size);
if (class < 0) {
@@ -513,7 +513,7 @@ int kmod_elf_get_modversions(const struct kmod_elf *elf, struct kmod_modversion
int i, count, err;
#define MODVERSION_SEC_SIZE (sizeof(struct kmod_modversion64))
- assert(sizeof(struct kmod_modversion64) ==
+ assert_cc(sizeof(struct kmod_modversion64) ==
sizeof(struct kmod_modversion32));
if (elf->class == KMOD_ELF_32)
diff --git a/libkmod/libkmod-file.c b/libkmod/libkmod-file.c
index 679edef..390f018 100644
--- a/libkmod/libkmod-file.c
+++ b/libkmod/libkmod-file.c
@@ -1,7 +1,7 @@
/*
* libkmod - interface to kernel module operations
*
- * Copyright (C) 2011-2012 ProFUSION embedded systems
+ * Copyright (C) 2011-2013 ProFUSION embedded systems
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -29,7 +29,7 @@
#include <unistd.h>
#include "libkmod.h"
-#include "libkmod-private.h"
+#include "libkmod-internal.h"
#ifdef ENABLE_XZ
#include <lzma.h>
@@ -52,6 +52,7 @@ struct kmod_file {
gzFile gzf;
#endif
int fd;
+ bool direct;
off_t size;
void *memory;
const struct file_ops *ops;
@@ -254,9 +255,11 @@ static int load_reg(struct kmod_file *file)
return -errno;
file->size = st.st_size;
- file->memory = mmap(0, file->size, PROT_READ, MAP_PRIVATE, file->fd, 0);
+ file->memory = mmap(NULL, file->size, PROT_READ, MAP_PRIVATE,
+ file->fd, 0);
if (file->memory == MAP_FAILED)
return -errno;
+ file->direct = true;
return 0;
}
@@ -300,6 +303,7 @@ struct kmod_file *kmod_file_open(const struct kmod_ctx *ctx,
magic_size_max = itr->magic_size;
}
+ file->direct = false;
if (magic_size_max > 0) {
char *buf = alloca(magic_size_max + 1);
ssize_t sz;
@@ -353,6 +357,16 @@ off_t kmod_file_get_size(const struct kmod_file *file)
return file->size;
}
+bool kmod_file_get_direct(const struct kmod_file *file)
+{
+ return file->direct;
+}
+
+int kmod_file_get_fd(const struct kmod_file *file)
+{
+ return file->fd;
+}
+
void kmod_file_unref(struct kmod_file *file)
{
if (file->elf)
diff --git a/libkmod/libkmod-hash.c b/libkmod/libkmod-hash.c
index dc9910b..57f475c 100644
--- a/libkmod/libkmod-hash.c
+++ b/libkmod/libkmod-hash.c
@@ -1,7 +1,7 @@
/*
* libkmod - interface to kernel module operations
*
- * Copyright (C) 2011-2012 ProFUSION embedded systems
+ * Copyright (C) 2011-2013 ProFUSION embedded systems
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
diff --git a/libkmod/libkmod-index.c b/libkmod/libkmod-index.c
index a5933e2..fa7db41 100644
--- a/libkmod/libkmod-index.c
+++ b/libkmod/libkmod-index.c
@@ -1,7 +1,7 @@
/*
* libkmod - interface to kernel module operations
*
- * Copyright (C) 2011-2012 ProFUSION embedded systems
+ * Copyright (C) 2011-2013 ProFUSION embedded systems
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -27,7 +27,7 @@
#include <assert.h>
#include <inttypes.h>
-#include "libkmod-private.h"
+#include "libkmod-internal.h"
#include "libkmod-index.h"
#include "macro.h"
@@ -432,9 +432,12 @@ void index_dump(struct index_file *in, int fd, const char *prefix)
struct index_node_f *root;
struct buffer buf;
+ root = index_readroot(in);
+ if (root == NULL)
+ return;
+
buf_init(&buf);
buf_pushchars(&buf, prefix);
- root = index_readroot(in);
index_dump_node(root, &buf, fd);
buf_release(&buf);
}
@@ -801,9 +804,9 @@ struct index_mm *index_mm_open(struct kmod_ctx *ctx, const char *filename,
if ((size_t) st.st_size < sizeof(hdr))
goto fail_nommap;
- if ((idx->mm = mmap(0, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0))
+ if ((idx->mm = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0))
== MAP_FAILED) {
- ERR(ctx, "mmap(0, %"PRIu64", PROT_READ, %d, MAP_PRIVATE, 0): %m\n",
+ ERR(ctx, "mmap(NULL, %"PRIu64", PROT_READ, %d, MAP_PRIVATE, 0): %m\n",
st.st_size, fd);
goto fail_nommap;
}
@@ -902,9 +905,12 @@ void index_mm_dump(struct index_mm *idx, int fd, const char *prefix)
struct index_mm_node *root;
struct buffer buf;
+ root = index_mm_readroot(idx);
+ if (root == NULL)
+ return;
+
buf_init(&buf);
buf_pushchars(&buf, prefix);
- root = index_mm_readroot(idx);
index_mm_dump_node(root, &buf, fd);
buf_release(&buf);
}
diff --git a/libkmod/libkmod-index.h b/libkmod/libkmod-index.h
index 6eb77b9..ad63e15 100644
--- a/libkmod/libkmod-index.h
+++ b/libkmod/libkmod-index.h
@@ -1,7 +1,7 @@
/*
* libkmod - interface to kernel module operations
*
- * Copyright (C) 2011-2012 ProFUSION embedded systems
+ * Copyright (C) 2011-2013 ProFUSION embedded systems
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
diff --git a/libkmod/libkmod-private.h b/libkmod/libkmod-internal.h
index 4760733..0180124 100644
--- a/libkmod/libkmod-private.h
+++ b/libkmod/libkmod-internal.h
@@ -5,6 +5,7 @@
#include <syslog.h>
#include <limits.h>
+#include "missing.h"
#include "macro.h"
#include "libkmod.h"
@@ -35,6 +36,15 @@ static _always_inline_ _printf_format_(2, 3) void
#define KCMD_LINE_SIZE 4096
+#ifndef HAVE_SECURE_GETENV
+# ifdef HAVE___SECURE_GETENV
+# define secure_getenv __secure_getenv
+# else
+# warning neither secure_getenv nor __secure_getenv is available
+# define secure_getenv getenv
+# endif
+#endif
+
void kmod_log(const struct kmod_ctx *ctx,
int priority, const char *file, int line, const char *fn,
const char *format, ...) __attribute__((format(printf, 6, 7))) __attribute__((nonnull(1, 3, 5)));
@@ -87,8 +97,8 @@ void kmod_set_modules_visited(struct kmod_ctx *ctx, bool visited) __attribute__(
char *kmod_search_moddep(struct kmod_ctx *ctx, const char *name) __attribute__((nonnull(1,2)));
struct kmod_module *kmod_pool_get_module(struct kmod_ctx *ctx, const char *key) __attribute__((nonnull(1,2)));
-void kmod_pool_add_module(struct kmod_ctx *ctx, struct kmod_module *mod, const char *key) __attribute__((nonnull(1,2, 3)));
-void kmod_pool_del_module(struct kmod_ctx *ctx, struct kmod_module *mod, const char *key) __attribute__((nonnull(1,2, 3)));
+void kmod_pool_add_module(struct kmod_ctx *ctx, struct kmod_module *mod, const char *key) __attribute__((nonnull(1, 2, 3)));
+void kmod_pool_del_module(struct kmod_ctx *ctx, struct kmod_module *mod, const char *key) __attribute__((nonnull(1, 2, 3)));
const struct kmod_config *kmod_get_config(const struct kmod_ctx *ctx) __attribute__((nonnull(1)));
@@ -142,6 +152,8 @@ struct kmod_file *kmod_file_open(const struct kmod_ctx *ctx, const char *filenam
struct kmod_elf *kmod_file_get_elf(struct kmod_file *file) __attribute__((nonnull(1)));
void *kmod_file_get_contents(const struct kmod_file *file) _must_check_ __attribute__((nonnull(1)));
off_t kmod_file_get_size(const struct kmod_file *file) _must_check_ __attribute__((nonnull(1)));
+bool kmod_file_get_direct(const struct kmod_file *file) _must_check_ __attribute__((nonnull(1)));
+int kmod_file_get_fd(const struct kmod_file *file) _must_check_ __attribute__((nonnull(1)));
void kmod_file_unref(struct kmod_file *file) __attribute__((nonnull(1)));
/* libkmod-elf.c */
@@ -168,5 +180,14 @@ int kmod_elf_strip_vermagic(struct kmod_elf *elf) _must_check_ __attribute__((no
*/
int kmod_elf_get_section(const struct kmod_elf *elf, const char *section, const void **buf, uint64_t *buf_size) _must_check_ __attribute__((nonnull(1,2,3,4)));
+/* libkmod-signature.c */
+struct kmod_signature_info {
+ const char *signer;
+ size_t signer_len;
+ const char *key_id;
+ size_t key_id_len;
+ const char *algo, *hash_algo, *id_type;
+};
+bool kmod_module_signature_info(const struct kmod_file *file, struct kmod_signature_info *sig_info) _must_check_ __attribute__((nonnull(1, 2)));
/* util functions */
#include "libkmod-util.h"
diff --git a/libkmod/libkmod-list.c b/libkmod/libkmod-list.c
index 982c4ab..45f512a 100644
--- a/libkmod/libkmod-list.c
+++ b/libkmod/libkmod-list.c
@@ -1,7 +1,7 @@
/*
* libkmod - interface to kernel module operations
*
- * Copyright (C) 2011-2012 ProFUSION embedded systems
+ * Copyright (C) 2011-2013 ProFUSION embedded systems
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -21,7 +21,7 @@
#include <stdlib.h>
#include "libkmod.h"
-#include "libkmod-private.h"
+#include "libkmod-internal.h"
/**
* SECTION:libkmod-list
diff --git a/libkmod/libkmod-module.c b/libkmod/libkmod-module.c
index 0d87ce1..0fc1101 100644
--- a/libkmod/libkmod-module.c
+++ b/libkmod/libkmod-module.c
@@ -1,7 +1,7 @@
/*
* libkmod - interface to kernel module operations
*
- * Copyright (C) 2011-2012 ProFUSION embedded systems
+ * Copyright (C) 2011-2013 ProFUSION embedded systems
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -33,12 +33,17 @@
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/mman.h>
+#include <sys/syscall.h>
#include <sys/wait.h>
#include <string.h>
#include <fnmatch.h>
+#ifdef HAVE_LINUX_MODULE_H
+#include <linux/module.h>
+#endif
+
#include "libkmod.h"
-#include "libkmod-private.h"
+#include "libkmod-internal.h"
/**
* SECTION:libkmod-module
@@ -565,8 +570,7 @@ fail:
* Drop a reference of each kmod module in @list and releases the resources
* taken by the list itself.
*
- * Returns: NULL if @mod is NULL or if the module was released. Otherwise it
- * returns the passed @mod with its refcount decremented.
+ * Returns: 0
*/
KMOD_EXPORT int kmod_module_unref_list(struct kmod_list *list)
{
@@ -624,9 +628,8 @@ static const struct kmod_list *module_get_dependencies_noref(const struct kmod_m
* The result is cached in @mod, so subsequent calls to this function will
* return the already searched list of modules.
*
- * Returns: NULL on failure or if there are any dependencies. Otherwise it
- * returns a list of kmod modules that can be released by calling
- * kmod_module_unref_list().
+ * Returns: NULL on failure. Otherwise it returns a list of kmod modules
+ * that can be released by calling kmod_module_unref_list().
*/
KMOD_EXPORT struct kmod_list *kmod_module_get_dependencies(const struct kmod_module *mod)
{
@@ -735,7 +738,15 @@ extern long delete_module(const char *name, unsigned int flags);
/**
* kmod_module_remove_module:
* @mod: kmod module
- * @flags: flags to pass to Linux kernel when removing the module
+ * @flags: flags to pass to Linux kernel when removing the module, valid flags are
+ * KMOD_REMOVE_FORCE: force remove module regardless if it's still in
+ * use by a kernel subsystem or other process;
+ * KMOD_REMOVE_NOWAIT: return immediately. It will fail if the module
+ * is in using and KMOD_REMOVE_FORCE is not specified.
+ * If this module is in use by any kernel subsystem or process, not using
+ * this flag will cause the call to block indefinitely, until the module
+ * is not in use anymore. Always use this flag, it's deprecated not using
+ * it and the default behavior might change in future to always set it.
*
* Remove a module from Linux kernel.
*
@@ -767,7 +778,9 @@ extern long init_module(const void *mem, unsigned long len, const char *args);
* kmod_module_insert_module:
* @mod: kmod module
* @flags: flags are not passed to Linux Kernel, but instead they dictate the
- * behavior of this function.
+ * behavior of this function, valid flags are
+ * KMOD_INSERT_FORCE_VERMAGIC: ignore kernel version magic;
+ * KMOD_INSERT_FORCE_MODVERSION: ignore symbol version hashes.
* @options: module's options to pass to Linux Kernel.
*
* Insert a module in Linux kernel. It opens the file pointed by @mod,
@@ -803,6 +816,19 @@ KMOD_EXPORT int kmod_module_insert_module(struct kmod_module *mod,
return err;
}
+ if (kmod_file_get_direct(file)) {
+ unsigned int kernel_flags = 0;
+
+ if (flags & KMOD_INSERT_FORCE_VERMAGIC)
+ kernel_flags |= MODULE_INIT_IGNORE_VERMAGIC;
+ if (flags & KMOD_INSERT_FORCE_MODVERSION)
+ kernel_flags |= MODULE_INIT_IGNORE_MODVERSIONS;
+
+ err = finit_module(kmod_file_get_fd(file), args, kernel_flags);
+ if (err == 0 || errno != ENOSYS)
+ goto init_finished;
+ }
+
size = kmod_file_get_size(file);
mem = kmod_file_get_contents(file);
@@ -829,6 +855,7 @@ KMOD_EXPORT int kmod_module_insert_module(struct kmod_module *mod,
}
err = init_module(mem, size, args);
+init_finished:
if (err < 0) {
err = -errno;
INFO(mod->ctx, "Failed to insert module '%s': %m\n", path);
@@ -862,7 +889,9 @@ static bool module_is_blacklisted(struct kmod_module *mod)
/**
* kmod_module_apply_filter
* @ctx: kmod library context
- * @filter_type: bitmask to filter modules on
+ * @filter_type: bitmask to filter modules out, valid types are
+ * KMOD_FILTER_BLACKLIST: filter modules in blacklist out;
+ * KMOD_FILTER_BUILTIN: filter builtin modules out.
* @input: list of kmod_module to be filtered
* @output: where to save the new list
*
@@ -1133,7 +1162,25 @@ static int kmod_module_get_probe_list(struct kmod_module *mod,
* kmod_module_probe_insert_module:
* @mod: kmod module
* @flags: flags are not passed to Linux Kernel, but instead they dictate the
- * behavior of this function.
+ * behavior of this function, valid flags are
+ * KMOD_PROBE_FORCE_VERMAGIC: ignore kernel version magic;
+ * KMOD_PROBE_FORCE_MODVERSION: ignore symbol version hashes;
+ * KMOD_PROBE_IGNORE_COMMAND: whether the probe should ignore install
+ * commands and softdeps configured in the system;
+ * KMOD_PROBE_IGNORE_LOADED: do not check whether the module is already
+ * live in kernel or not;
+ * KMOD_PROBE_DRY_RUN: dry run, do not insert module, just call the
+ * associated callback function;
+ * KMOD_PROBE_FAIL_ON_LOADED: if KMOD_PROBE_IGNORE_LOADED is not specified
+ * and the module is already live in kernel, the function will fail if this
+ * flag is specified;
+ * KMOD_PROBE_APPLY_BLACKLIST_ALL: probe will apply KMOD_FILTER_BLACKLIST
+ * filter to this module and its dependencies. If any of the dependencies (or
+ * the module) is blacklisted, the probe will fail, unless the blacklisted
+ * module is already live in kernel;
+ * KMOD_PROBE_APPLY_BLACKLIST: probe will fail if the module is blacklisted;
+ * KMOD_PROBE_APPLY_BLACKLIST_ALIAS_ONLY: probe will fail if the module is an
+ * alias and is blacklisted.
* @extra_options: module's options to pass to Linux Kernel. It applies only
* to @mod, not to its dependencies.
* @run_install: function to run when @mod is backed by an install command.
@@ -1545,7 +1592,7 @@ void kmod_module_set_remove_commands(struct kmod_module *mod, const char *cmd)
* Create a new list of kmod modules with all modules currently loaded in
* kernel. It uses /proc/modules to get the names of loaded modules and to
* create kmod modules by calling kmod_module_new_from_name() in each of them.
- * They are put are put in @list in no particular order.
+ * They are put in @list in no particular order.
*
* The initial refcount is 1, and needs to be decremented to release the
* resources of the kmod_module. The returned @list must be released by
@@ -1633,7 +1680,11 @@ KMOD_EXPORT const char *kmod_module_initstate_str(enum kmod_module_initstate sta
* Get the initstate of this @mod, as returned by Linux Kernel, by reading
* /sys filesystem.
*
- * Returns: < 0 on error or enum kmod_initstate if module is found in kernel.
+ * Returns: < 0 on error or module state if module is found in kernel, valid states are
+ * KMOD_MODULE_BUILTIN: module is builtin;
+ * KMOD_MODULE_LIVE: module is live in kernel;
+ * KMOD_MODULE_COMING: module is being loaded;
+ * KMOD_MODULE_GOING: module is being unloaded.
*/
KMOD_EXPORT int kmod_module_get_initstate(const struct kmod_module *mod)
{
@@ -1820,7 +1871,7 @@ KMOD_EXPORT struct kmod_list *kmod_module_get_holders(const struct kmod_module *
struct kmod_list *list = NULL;
DIR *d;
- if (mod == NULL)
+ if (mod == NULL || mod->ctx == NULL)
return NULL;
snprintf(dname, sizeof(dname), "/sys/module/%s/holders", mod->name);
@@ -2081,7 +2132,7 @@ static struct kmod_module_info *kmod_module_info_new(const char *key, size_t key
return NULL;
info->key = (char *)info + sizeof(struct kmod_module_info)
- + valuelen + 1;
+ + valuelen + 1;
memcpy(info->key, key, keylen);
info->key[keylen] = '\0';
memcpy(info->value, value, valuelen);
@@ -2094,6 +2145,22 @@ static void kmod_module_info_free(struct kmod_module_info *info)
free(info);
}
+static struct kmod_list *kmod_module_info_append(struct kmod_list **list, const char *key, size_t keylen, const char *value, size_t valuelen)
+{
+ struct kmod_module_info *info;
+ struct kmod_list *n;
+
+ info = kmod_module_info_new(key, keylen, value, valuelen);
+ if (info == NULL)
+ return NULL;
+ n = kmod_list_append(*list, info);
+ if (n != NULL)
+ *list = n;
+ else
+ kmod_module_info_free(info);
+ return n;
+}
+
/**
* kmod_module_get_info:
* @mod: kmod module
@@ -2104,7 +2171,9 @@ static void kmod_module_info_free(struct kmod_module_info *info)
*
* Get a list of entries in ELF section ".modinfo", these contain
* alias, license, depends, vermagic and other keys with respective
- * values.
+ * values. If the module is signed (CONFIG_MODULE_SIG), information
+ * about the module signature is included as well: signer,
+ * sig_key and sig_hashalgo.
*
* After use, free the @list by calling kmod_module_info_free_list().
*
@@ -2114,7 +2183,8 @@ KMOD_EXPORT int kmod_module_get_info(const struct kmod_module *mod, struct kmod_
{
struct kmod_elf *elf;
char **strings;
- int i, count, ret = 0;
+ int i, count, ret = -ENOMEM;
+ struct kmod_signature_info sig_info;
if (mod == NULL || list == NULL)
return -ENOENT;
@@ -2130,7 +2200,6 @@ KMOD_EXPORT int kmod_module_get_info(const struct kmod_module *mod, struct kmod_
return count;
for (i = 0; i < count; i++) {
- struct kmod_module_info *info;
struct kmod_list *n;
const char *key, *value;
size_t keylen, valuelen;
@@ -2140,34 +2209,64 @@ KMOD_EXPORT int kmod_module_get_info(const struct kmod_module *mod, struct kmod_
if (value == NULL) {
keylen = strlen(key);
valuelen = 0;
+ value = key;
} else {
keylen = value - key;
value++;
valuelen = strlen(value);
}
- info = kmod_module_info_new(key, keylen, value, valuelen);
- if (info == NULL) {
- ret = -errno;
- kmod_module_info_free_list(*list);
- *list = NULL;
+ n = kmod_module_info_append(list, key, keylen, value, valuelen);
+ if (n == NULL)
goto list_error;
- }
+ }
- n = kmod_list_append(*list, info);
- if (n != NULL)
- *list = n;
- else {
- kmod_module_info_free(info);
- kmod_module_info_free_list(*list);
- *list = NULL;
- ret = -ENOMEM;
+ if (kmod_module_signature_info(mod->file, &sig_info)) {
+ struct kmod_list *n;
+ char *key_hex;
+
+ n = kmod_module_info_append(list, "signer", strlen("signer"),
+ sig_info.signer, sig_info.signer_len);
+ if (n == NULL)
goto list_error;
+ count++;
+
+ /* Display the key id as 01:12:DE:AD:BE:EF:... */
+ key_hex = malloc(sig_info.key_id_len * 3);
+ if (key_hex == NULL)
+ goto list_error;
+ for (i = 0; i < (int)sig_info.key_id_len; i++) {
+ sprintf(key_hex + i * 3, "%02X",
+ (unsigned char)sig_info.key_id[i]);
+ if (i < (int)sig_info.key_id_len - 1)
+ key_hex[i * 3 + 2] = ':';
}
+ n = kmod_module_info_append(list, "sig_key", strlen("sig_key"),
+ key_hex, sig_info.key_id_len * 3 - 1);
+ free(key_hex);
+ if (n == NULL)
+ goto list_error;
+ count++;
+
+ n = kmod_module_info_append(list,
+ "sig_hashalgo", strlen("sig_hashalgo"),
+ sig_info.hash_algo, strlen(sig_info.hash_algo));
+ if (n == NULL)
+ goto list_error;
+ count++;
+
+ /*
+ * Omit sig_info.id_type and sig_info.algo for now, as these
+ * are currently constant.
+ */
}
ret = count;
list_error:
+ if (ret < 0) {
+ kmod_module_info_free_list(*list);
+ *list = NULL;
+ }
free(strings);
return ret;
}
@@ -2314,7 +2413,7 @@ list_error:
}
/**
- * kmod_module_versions_get_symbol:
+ * kmod_module_version_get_symbol:
* @entry: a list entry representing a kmod module versions
*
* Get the symbol of a kmod module versions.
diff --git a/libkmod/libkmod-signature.c b/libkmod/libkmod-signature.c
new file mode 100644
index 0000000..6237ab7
--- /dev/null
+++ b/libkmod/libkmod-signature.c
@@ -0,0 +1,141 @@
+/*
+ * libkmod - module signature display
+ *
+ * Copyright (C) 2013 Michal Marek, SUSE
+ *
+ * This library 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.
+ *
+ * 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <endian.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+
+#include "libkmod-internal.h"
+
+/* These types and tables were copied from the 3.7 kernel sources.
+ * As this is just description of the signature format, it should not be
+ * considered derived work (so libkmod can use the LGPL license).
+ */
+enum pkey_algo {
+ PKEY_ALGO_DSA,
+ PKEY_ALGO_RSA,
+ PKEY_ALGO__LAST
+};
+
+static const char *const pkey_algo[PKEY_ALGO__LAST] = {
+ [PKEY_ALGO_DSA] = "DSA",
+ [PKEY_ALGO_RSA] = "RSA",
+};
+
+enum pkey_hash_algo {
+ PKEY_HASH_MD4,
+ PKEY_HASH_MD5,
+ PKEY_HASH_SHA1,
+ PKEY_HASH_RIPE_MD_160,
+ PKEY_HASH_SHA256,
+ PKEY_HASH_SHA384,
+ PKEY_HASH_SHA512,
+ PKEY_HASH_SHA224,
+ PKEY_HASH__LAST
+};
+
+const char *const pkey_hash_algo[PKEY_HASH__LAST] = {
+ [PKEY_HASH_MD4] = "md4",
+ [PKEY_HASH_MD5] = "md5",
+ [PKEY_HASH_SHA1] = "sha1",
+ [PKEY_HASH_RIPE_MD_160] = "rmd160",
+ [PKEY_HASH_SHA256] = "sha256",
+ [PKEY_HASH_SHA384] = "sha384",
+ [PKEY_HASH_SHA512] = "sha512",
+ [PKEY_HASH_SHA224] = "sha224",
+};
+
+enum pkey_id_type {
+ PKEY_ID_PGP, /* OpenPGP generated key ID */
+ PKEY_ID_X509, /* X.509 arbitrary subjectKeyIdentifier */
+ PKEY_ID_TYPE__LAST
+};
+
+const char *const pkey_id_type[PKEY_ID_TYPE__LAST] = {
+ [PKEY_ID_PGP] = "PGP",
+ [PKEY_ID_X509] = "X509",
+};
+
+/*
+ * Module signature information block.
+ *
+ * The constituents of the signature section are, in order:
+ *
+ * - Signer's name
+ * - Key identifier
+ * - Signature data
+ * - Information block
+ */
+struct module_signature {
+ uint8_t algo; /* Public-key crypto algorithm [enum pkey_algo] */
+ uint8_t hash; /* Digest algorithm [enum pkey_hash_algo] */
+ uint8_t id_type; /* Key identifier type [enum pkey_id_type] */
+ uint8_t signer_len; /* Length of signer's name */
+ uint8_t key_id_len; /* Length of key identifier */
+ uint8_t __pad[3];
+ uint32_t sig_len; /* Length of signature data (big endian) */
+};
+
+#define SIG_MAGIC "~Module signature appended~\n"
+
+bool kmod_module_signature_info(const struct kmod_file *file, struct kmod_signature_info *sig_info)
+{
+ const char *mem;
+ off_t size;
+ const struct module_signature *modsig;
+ size_t sig_len;
+
+
+ size = kmod_file_get_size(file);
+ mem = kmod_file_get_contents(file);
+ if (size < (off_t)strlen(SIG_MAGIC))
+ return false;
+ size -= strlen(SIG_MAGIC);
+ if (memcmp(SIG_MAGIC, mem + size, strlen(SIG_MAGIC)) != 0)
+ return false;
+
+ if (size < (off_t)sizeof(struct module_signature))
+ return false;
+ size -= sizeof(struct module_signature);
+ modsig = (struct module_signature *)(mem + size);
+ if (modsig->algo >= PKEY_ALGO__LAST ||
+ modsig->hash >= PKEY_HASH__LAST ||
+ modsig->id_type >= PKEY_ID_TYPE__LAST)
+ return false;
+ sig_len = be32toh(modsig->sig_len);
+ if (size < (off_t)(modsig->signer_len + modsig->key_id_len + sig_len))
+ return false;
+
+ size -= modsig->key_id_len + sig_len;
+ sig_info->key_id = mem + size;
+ sig_info->key_id_len = modsig->key_id_len;
+
+ size -= modsig->signer_len;
+ sig_info->signer = mem + size;
+ sig_info->signer_len = modsig->signer_len;
+
+ sig_info->algo = pkey_algo[modsig->algo];
+ sig_info->hash_algo = pkey_hash_algo[modsig->hash];
+ sig_info->id_type = pkey_id_type[modsig->id_type];
+
+ return true;
+}
diff --git a/libkmod/libkmod-util.c b/libkmod/libkmod-util.c
index 71bf51d..d686250 100644
--- a/libkmod/libkmod-util.c
+++ b/libkmod/libkmod-util.c
@@ -1,7 +1,9 @@
/*
* libkmod - interface to kernel module operations
*
- * Copyright (C) 2011-2012 ProFUSION embedded systems
+ * Copyright (C) 2011-2013 ProFUSION embedded systems
+ * Copyright (C) 2012 Lucas De Marchi <lucas.de.marchi@gmail.com>
+ * Copyright (C) 2013 Intel Corporation. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -29,7 +31,7 @@
#include <ctype.h>
#include "libkmod.h"
-#include "libkmod-private.h"
+#include "libkmod-internal.h"
/*
* Read one logical line from a configuration file.
@@ -308,6 +310,77 @@ char *path_make_absolute_cwd(const char *p)
return r;
}
+static inline int is_dir(const char *path)
+{
+ struct stat st;
+
+ if (stat(path, &st) >= 0)
+ return S_ISDIR(st.st_mode);
+
+ return -errno;
+}
+
+int mkdir_p(const char *path, int len, mode_t mode)
+{
+ char *start, *end;
+
+ start = strndupa(path, len);
+ end = start + len;
+
+ /*
+ * scan backwards, replacing '/' with '\0' while the component doesn't
+ * exist
+ */
+ for (;;) {
+ int r = is_dir(start);
+ if (r > 0) {
+ end += strlen(end);
+
+ if (end == start + len)
+ return 0;
+
+ /* end != start, since it would be caught on the first
+ * iteration */
+ *end = '/';
+ break;
+ } else if (r == 0)
+ return -ENOTDIR;
+
+ if (end == start)
+ break;
+
+ *end = '\0';
+
+ /* Find the next component, backwards, discarding extra '/'*/
+ while (end > start && *end != '/')
+ end--;
+
+ while (end > start && *(end - 1) == '/')
+ end--;
+ }
+
+ for (; end < start + len;) {
+ if (mkdir(start, mode) < 0 && errno != EEXIST)
+ return -errno;
+
+ end += strlen(end);
+ *end = '/';
+ }
+
+ return 0;
+}
+
+int mkdir_parents(const char *path, mode_t mode)
+{
+ char *end = strrchr(path, '/');
+
+ /* no parent directories */
+ if (end == NULL)
+ return 0;
+
+ return mkdir_p(path, end - path, mode);
+}
+
const struct kmod_ext kmod_exts[] = {
{".ko", sizeof(".ko") - 1},
#ifdef ENABLE_ZLIB
diff --git a/libkmod/libkmod-util.h b/libkmod/libkmod-util.h
index 258184d..f7f3e90 100644
--- a/libkmod/libkmod-util.h
+++ b/libkmod/libkmod-util.h
@@ -5,6 +5,7 @@
#include <stdbool.h>
#include <stdio.h>
#include <sys/types.h>
+#include <sys/stat.h>
char *getline_wrapped(FILE *fp, unsigned int *linenum) __attribute__((nonnull(1)));
@@ -19,6 +20,8 @@ int read_str_ulong(int fd, unsigned long *value, int base) _must_check_ __attrib
char *strchr_replace(char *s, int c, char r);
bool path_is_absolute(const char *p) _must_check_ __attribute__((nonnull(1)));
char *path_make_absolute_cwd(const char *p) _must_check_ __attribute__((nonnull(1)));
+int mkdir_p(const char *path, int len, mode_t mode);
+int mkdir_parents(const char *path, mode_t mode);
int alias_normalize(const char *alias, char buf[PATH_MAX], size_t *len) _must_check_ __attribute__((nonnull(1,2)));
char *modname_normalize(const char *modname, char buf[PATH_MAX], size_t *len) __attribute__((nonnull(1, 2)));
char *path_to_modname(const char *path, char buf[PATH_MAX], size_t *len) __attribute__((nonnull(2)));
diff --git a/libkmod/libkmod.c b/libkmod/libkmod.c
index f898438..ef83e31 100644
--- a/libkmod/libkmod.c
+++ b/libkmod/libkmod.c
@@ -1,7 +1,7 @@
/*
* libkmod - interface to kernel module operations
*
- * Copyright (C) 2011-2012 ProFUSION embedded systems
+ * Copyright (C) 2011-2013 ProFUSION embedded systems
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -33,7 +33,7 @@
#include <sys/stat.h>
#include "libkmod.h"
-#include "libkmod-private.h"
+#include "libkmod-internal.h"
#include "libkmod-index.h"
#define KMOD_HASH_SIZE (256)
@@ -99,6 +99,7 @@ void kmod_log(const struct kmod_ctx *ctx,
va_end(args);
}
+_printf_format_(6, 0)
static void log_filep(void *data,
int priority, const char *file, int line,
const char *fn, const char *format, va_list args)
@@ -218,8 +219,8 @@ static char *get_kernel_release(const char *dirname)
* kmod_new:
* @dirname: what to consider as linux module's directory, if NULL
* defaults to /lib/modules/`uname -r`. If it's relative,
- * it's treated as relative to current the current working
- * directory. Otherwise, give an absolute dirname.
+ * it's treated as relative to the current working directory.
+ * Otherwise, give an absolute dirname.
* @config_paths: ordered array of paths (directories or files) where
* to load from user-defined configuration parameters such as
* alias, blacklists, commands (install, remove). If
@@ -254,7 +255,7 @@ KMOD_EXPORT struct kmod_ctx *kmod_new(const char *dirname,
ctx->dirname = get_kernel_release(dirname);
/* environment overwrites config */
- env = getenv("KMOD_LOG");
+ env = secure_getenv("KMOD_LOG");
if (env != NULL)
kmod_set_log_priority(ctx, log_priority(env));
@@ -306,6 +307,8 @@ KMOD_EXPORT struct kmod_ctx *kmod_ref(struct kmod_ctx *ctx)
*
* Drop a reference of the kmod library context. If the refcount
* reaches zero, the resources of the context will be released.
+ *
+ * Returns: the passed kmod library context or NULL if it's freed
*/
KMOD_EXPORT struct kmod_ctx *kmod_unref(struct kmod_ctx *ctx)
{
@@ -853,7 +856,11 @@ KMOD_EXPORT void kmod_unload_resources(struct kmod_ctx *ctx)
/**
* kmod_dump_index:
* @ctx: kmod library context
- * @type: index to dump
+ * @type: index to dump, valid indexes are
+ * KMOD_INDEX_MODULES_DEP: index of module dependencies;
+ * KMOD_INDEX_MODULES_ALIAS: index of module aliases;
+ * KMOD_INDEX_MODULES_SYMBOL: index of symbol aliases;
+ * KMOD_INDEX_MODULES_BUILTIN: index of builtin module.
* @fd: file descriptor to dump index to
*
* Dump index to file descriptor. Note that this function doesn't use stdio.h
diff --git a/libkmod/libkmod.h b/libkmod/libkmod.h
index d03ab19..3397f87 100644
--- a/libkmod/libkmod.h
+++ b/libkmod/libkmod.h
@@ -1,7 +1,7 @@
/*
* libkmod - interface to kernel module operations
*
- * Copyright (C) 2011-2012 ProFUSION embedded systems
+ * Copyright (C) 2011-2013 ProFUSION embedded systems
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
diff --git a/libkmod/macro.h b/libkmod/macro.h
index 689c57a..c6ba855 100644
--- a/libkmod/macro.h
+++ b/libkmod/macro.h
@@ -1,7 +1,7 @@
/*
* libkmod - interface to kernel module operations
*
- * Copyright (C) 2011-2012 ProFUSION embedded systems
+ * Copyright (C) 2011-2013 ProFUSION embedded systems
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -21,25 +21,16 @@
#include <stddef.h>
-#define BUILD_ASSERT(cond) \
- do { (void) sizeof(char [1 - 2*!(cond)]); } while(0)
-
-#define EXPR_BUILD_ASSERT(cond) \
- (sizeof(char [1 - 2*!(cond)]) - 1)
+#define assert_cc(expr) \
+ _Static_assert((expr), #expr)
#if HAVE_TYPEOF
-#define check_type(expr, type) \
- ((typeof(expr) *)0 != (type *)0)
-
#define check_types_match(expr1, expr2) \
((typeof(expr1) *)0 != (typeof(expr2) *)0)
#else
/* Without typeof, we can only test the sizes. */
-#define check_type(expr, type) \
- EXPR_BUILD_ASSERT(sizeof(expr) == sizeof(type))
-
#define check_types_match(expr1, expr2) \
- EXPR_BUILD_ASSERT(sizeof(expr1) == sizeof(expr2))
+ assert_cc(sizeof(expr1) == sizeof(expr2))
#endif /* HAVE_TYPEOF */
#define container_of(member_ptr, containing_type, member) \
@@ -47,26 +38,13 @@
((char *)(member_ptr) - offsetof(containing_type, member)) \
- check_types_match(*(member_ptr), ((containing_type *)0)->member))
-/*
- * BUILD_ASSERT_OR_ZERO - assert a build-time dependency, as an expression.
- * @cond: the compile-time condition which must be true.
- *
- * Your compile will fail if the condition isn't true, or can't be evaluated
- * by the compiler. This can be used in an expression: its value is "0".
- *
- * Example:
- * #define foo_to_char(foo) \
- * ((char *)(foo) \
- * + BUILD_ASSERT_OR_ZERO(offsetof(struct foo, string) == 0))
- */
-#define BUILD_ASSERT_OR_ZERO(cond) \
- (sizeof(char [1 - 2*!(cond)]) - 1)
/* Two gcc extensions.
* &a[0] degrades to a pointer: a different type from an array */
-#define _array_size_chk(arr) \
- BUILD_ASSERT_OR_ZERO(!__builtin_types_compatible_p(typeof(arr), \
- typeof(&(arr)[0])))
+#define _array_size_chk(arr) ({ \
+ assert_cc(!__builtin_types_compatible_p(typeof(arr), typeof(&(arr)[0]))); \
+ 0; \
+ })
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + _array_size_chk(arr))
diff --git a/libkmod/missing.h b/libkmod/missing.h
new file mode 100644
index 0000000..b45bbe2
--- /dev/null
+++ b/libkmod/missing.h
@@ -0,0 +1,34 @@
+#pragma once
+
+#include <unistd.h>
+#include <sys/syscall.h>
+
+#ifdef HAVE_LINUX_MODULE_H
+#include <linux/module.h>
+#endif
+
+#ifndef MODULE_INIT_IGNORE_MODVERSIONS
+# define MODULE_INIT_IGNORE_MODVERSIONS 1
+#endif
+
+#ifndef MODULE_INIT_IGNORE_VERMAGIC
+# define MODULE_INIT_IGNORE_VERMAGIC 2
+#endif
+
+#ifndef __NR_finit_module
+# define __NR_finit_module -1
+#endif
+
+#ifndef HAVE_FINIT_MODULE
+#include <errno.h>
+
+static inline int finit_module(int fd, const char *uargs, int flags)
+{
+ if (__NR_finit_module == -1) {
+ errno = ENOSYS;
+ return -1;
+ }
+
+ return syscall(__NR_finit_module, fd, uargs, flags);
+}
+#endif