summaryrefslogtreecommitdiff
path: root/package/libqb
diff options
context:
space:
mode:
authorWaldemar Brodkorb <wbx@openadk.org>2013-09-09 07:50:05 +0200
committerWaldemar Brodkorb <wbx@openadk.org>2013-09-09 07:50:05 +0200
commitb445e8bc0d2f03ed559aaf18a698dd1c2a6a9349 (patch)
tree45522b8c3b69d7c95e972981f6adafeb41ca1112 /package/libqb
parent07a121f174c7550d05c0a8184eff084731cbc9b0 (diff)
update to latest upstream
Diffstat (limited to 'package/libqb')
-rw-r--r--package/libqb/Makefile4
-rw-r--r--package/libqb/patches/patch-Makefile_in11
-rw-r--r--package/libqb/patches/patch-docs_man3_qbarray_h_3106
-rw-r--r--package/libqb/patches/patch-docs_man3_qbatomic_h_3157
-rw-r--r--package/libqb/patches/patch-docs_man3_qbhdb_h_3165
-rw-r--r--package/libqb/patches/patch-docs_man3_qbipc_common_h_367
-rw-r--r--package/libqb/patches/patch-docs_man3_qbipcc_h_3167
-rw-r--r--package/libqb/patches/patch-docs_man3_qbipcs_h_3383
-rw-r--r--package/libqb/patches/patch-docs_man3_qblist_h_3248
-rw-r--r--package/libqb/patches/patch-docs_man3_qblog_h_3649
-rw-r--r--package/libqb/patches/patch-docs_man3_qbloop_h_3222
-rw-r--r--package/libqb/patches/patch-docs_man3_qbmap_h_3261
-rw-r--r--package/libqb/patches/patch-docs_man3_qbutil_h_3284
13 files changed, 2722 insertions, 2 deletions
diff --git a/package/libqb/Makefile b/package/libqb/Makefile
index 6a3ddb3f2..a2d897bcd 100644
--- a/package/libqb/Makefile
+++ b/package/libqb/Makefile
@@ -4,9 +4,9 @@
include $(TOPDIR)/rules.mk
PKG_NAME:= libqb
-PKG_VERSION:= 0.14.1
+PKG_VERSION:= 0.16.0
PKG_RELEASE:= 1
-PKG_MD5SUM:= c144a5e0cd5b69c8d46a051646609f11
+PKG_MD5SUM:= 88a256ce5217efa420598ade393879ff
PKG_DESCR:= high performance client server reusable features
PKG_SECTION:= libs
PKG_URL:= https://github.com/asalkeld/libqb/wiki#wiki-Releases
diff --git a/package/libqb/patches/patch-Makefile_in b/package/libqb/patches/patch-Makefile_in
new file mode 100644
index 000000000..f73094833
--- /dev/null
+++ b/package/libqb/patches/patch-Makefile_in
@@ -0,0 +1,11 @@
+--- libqb-0.16.0.orig/Makefile.in 2013-07-25 20:16:10.000000000 +0200
++++ libqb-0.16.0/Makefile.in 2013-09-09 06:26:09.718825909 +0200
+@@ -352,7 +352,7 @@ MAINTAINERCLEANFILES = Makefile.in acloc
+
+ ACLOCAL_AMFLAGS = -I m4
+ dist_doc_DATA = COPYING INSTALL README.markdown
+-SUBDIRS = include lib docs tools tests examples
++SUBDIRS = include lib docs tools
+ RPMBUILDOPTS = --define "_sourcedir $(abs_builddir)" \
+ --define "_specdir $(abs_builddir)" \
+ --define "_builddir $(abs_builddir)" \
diff --git a/package/libqb/patches/patch-docs_man3_qbarray_h_3 b/package/libqb/patches/patch-docs_man3_qbarray_h_3
new file mode 100644
index 000000000..b3159f602
--- /dev/null
+++ b/package/libqb/patches/patch-docs_man3_qbarray_h_3
@@ -0,0 +1,106 @@
+--- libqb-0.16.0.orig/docs/man3/qbarray.h.3 2013-07-25 20:16:18.000000000 +0200
++++ libqb-0.16.0/docs/man3/qbarray.h.3 2013-09-09 05:26:31.375811771 +0200
+@@ -1,4 +1,4 @@
+-.TH "qbarray.h" 3 "Thu Jul 25 2013" "Version 0.16.0" "libqb" \" -*- nroff -*-
++.TH "qbarray.h" 3 "Mon Sep 9 2013" "Version 0.16.0" "libqb" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -69,28 +69,25 @@ This is a dynamic array (it can grow, bu
+
+ .PP
+ .nf
+-arr = qb_array_create_2(64, sizeof(struct my_struct), 256);
+-\&.\&.\&.
+-res = qb_array_index(arr, idx, (void**)&my_ptr);
+-if (res < 0) {
+- return res;
+-}
+-// use my_ptr, now even if there is a grow, this pointer will be valid\&.
++ arr = qb_array_create_2(64, sizeof(struct my_struct), 256);
++ \&.\&.\&.
++ res = qb_array_index(arr, idx, (void**)&my_ptr);
++ if (res < 0) {
++ return res;
++ }
++ // use my_ptr, now even if there is a grow, this pointer will be valid\&.
+ .fi
+ .PP
+
+ .SH "Typedef Documentation"
+ .PP
+-.SS "typedef void(* qb_array_new_bin_cb_fn)(\fBqb_array_t\fP *a, uint32_t bin)"
+-
++.SS "typedef void(* \fBqb_array_new_bin_cb_fn\fP)(\fBqb_array_t\fP *a, uint32_t bin)"
+ .SS "typedef struct qb_array \fBqb_array_t\fP"
+-
+ .PP
+ This is an opaque data type representing an instance of an array\&.
+ .SH "Function Documentation"
+ .PP
+-.SS "\fBqb_array_t\fP* qb_array_create (size_tmax_elements, size_telement_size)"
+-
++.SS "\fBqb_array_t\fP* \fBqb_array_create\fP (size_tmax_elements, size_telement_size)"
+ .PP
+ Create an array with fixed sized elements\&. \fBParameters:\fP
+ .RS 4
+@@ -105,8 +102,7 @@ array instance\&.
+ .RE
+ .PP
+
+-.SS "\fBqb_array_t\fP* qb_array_create_2 (size_tmax_elements, size_telement_size, size_tautogrow_elements)"
+-
++.SS "\fBqb_array_t\fP* \fBqb_array_create_2\fP (size_tmax_elements, size_telement_size, size_tautogrow_elements)"
+ .PP
+ Create an array with fixed sized elements\&. \fBParameters:\fP
+ .RS 4
+@@ -123,12 +119,10 @@ array instance\&.
+ .RE
+ .PP
+
+-.SS "size_t qb_array_elems_per_bin_get (\fBqb_array_t\fP *a)"
+-
++.SS "size_t \fBqb_array_elems_per_bin_get\fP (\fBqb_array_t\fP *a)"
+ .PP
+ Get the number of elements per bin\&.
+-.SS "void qb_array_free (\fBqb_array_t\fP *a)"
+-
++.SS "void \fBqb_array_free\fP (\fBqb_array_t\fP *a)"
+ .PP
+ Free all the memory used by the array\&. \fBParameters:\fP
+ .RS 4
+@@ -136,8 +130,7 @@ Free all the memory used by the array\&.
+ .RE
+ .PP
+
+-.SS "int32_t qb_array_grow (\fBqb_array_t\fP *a, size_tmax_elements)"
+-
++.SS "int32_t \fBqb_array_grow\fP (\fBqb_array_t\fP *a, size_tmax_elements)"
+ .PP
+ Grow the array\&. \fBParameters:\fP
+ .RS 4
+@@ -152,8 +145,7 @@ Grow the array\&. \fBParameters:\fP
+ .RE
+ .PP
+
+-.SS "int32_t qb_array_index (\fBqb_array_t\fP *a, int32_tidx, void **element_out)"
+-
++.SS "int32_t \fBqb_array_index\fP (\fBqb_array_t\fP *a, int32_tidx, void **element_out)"
+ .PP
+ Get an element at a particular index\&. \fBParameters:\fP
+ .RS 4
+@@ -170,12 +162,10 @@ Get an element at a particular index\&.
+ .RE
+ .PP
+
+-.SS "int32_t qb_array_new_bin_cb_set (\fBqb_array_t\fP *a, \fBqb_array_new_bin_cb_fn\fPfn)"
+-
++.SS "int32_t \fBqb_array_new_bin_cb_set\fP (\fBqb_array_t\fP *a, \fBqb_array_new_bin_cb_fn\fPfn)"
+ .PP
+ Get a callback when a new bin is allocated\&.
+-.SS "size_t qb_array_num_bins_get (\fBqb_array_t\fP *a)"
+-
++.SS "size_t \fBqb_array_num_bins_get\fP (\fBqb_array_t\fP *a)"
+ .PP
+ Get the number of bins used or the array\&.
+ .SH "Author"
diff --git a/package/libqb/patches/patch-docs_man3_qbatomic_h_3 b/package/libqb/patches/patch-docs_man3_qbatomic_h_3
new file mode 100644
index 000000000..f41ad1f02
--- /dev/null
+++ b/package/libqb/patches/patch-docs_man3_qbatomic_h_3
@@ -0,0 +1,157 @@
+--- libqb-0.16.0.orig/docs/man3/qbatomic.h.3 2013-07-25 20:16:18.000000000 +0200
++++ libqb-0.16.0/docs/man3/qbatomic.h.3 2013-09-09 05:26:31.415811269 +0200
+@@ -1,4 +1,4 @@
+-.TH "qbatomic.h" 3 "Thu Jul 25 2013" "Version 0.16.0" "libqb" \" -*- nroff -*-
++.TH "qbatomic.h" 3 "Mon Sep 9 2013" "Version 0.16.0" "libqb" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -16,7 +16,7 @@ Basic atomic integer and pointer operati
+ \fC#include <qb/qbconfig\&.h>\fP
+ .br
+
+-.SS "Macros"
++.SS "Defines"
+
+ .in +1c
+ .ti -1c
+@@ -92,10 +92,9 @@ You must not directly read integers or p
+ If you are using those functions for anything apart from simple reference counting, you should really be aware of the implications of doing that\&. There are literally thousands of ways to shoot yourself in the foot\&. So if in doubt, use a pthread_mutex\&. If you don't know, what memory barriers are, do not use anything but \fBqb_atomic_int_inc()\fP and \fBqb_atomic_int_dec_and_test()\fP\&.
+ .PP
+ It is not safe to set an integer or pointer just by assigning to it, when it is concurrently accessed by other threads with the following functions\&. Use \fBqb_atomic_int_compare_and_exchange()\fP or \fBqb_atomic_pointer_compare_and_exchange()\fP respectively\&.
+-.SH "Macro Definition Documentation"
++.SH "Define Documentation"
+ .PP
+-.SS "#define qb_atomic_int_dec_and_test(atomic) (\fBqb_atomic_int_exchange_and_add\fP ((atomic), -1) == 1)"
+-
++.SS "#define \fBqb_atomic_int_dec_and_test\fP(atomic) (\fBqb_atomic_int_exchange_and_add\fP ((atomic), -1) == 1)"
+ .PP
+ Atomically decrements the integer pointed to by atomic by 1\&. \fBParameters:\fP
+ .RS 4
+@@ -108,15 +107,13 @@ QB_TRUE if the integer pointed to by ato
+ .RE
+ .PP
+
+-.SS "#define qb_atomic_int_get(atomic)"
+-\fBValue:\fP
++.SS "#define \fBqb_atomic_int_get\fP(atomic)"\fBValue:\fP
+ .PP
+ .nf
+ ((void) sizeof (char* [sizeof (*(atomic)) == sizeof (int32_t) ? 1 : -1]), \
+ (qb_atomic_int_get) ((volatile int32_t QB_GNUC_MAY_ALIAS *) (volatile void *) (atomic)))
+ .fi
+-.SS "#define qb_atomic_int_inc(atomic) (\fBqb_atomic_int_add\fP ((atomic), 1))"
+-
++.SS "#define \fBqb_atomic_int_inc\fP(atomic) (\fBqb_atomic_int_add\fP ((atomic), 1))"
+ .PP
+ Atomically increments the integer pointed to by atomic by 1\&. \fBParameters:\fP
+ .RS 4
+@@ -124,22 +121,19 @@ Atomically increments the integer pointe
+ .RE
+ .PP
+
+-.SS "#define qb_atomic_int_set(atomic, newval)"
+-\fBValue:\fP
++.SS "#define \fBqb_atomic_int_set\fP(atomic, newval)"\fBValue:\fP
+ .PP
+ .nf
+ ((void) sizeof (char* [sizeof (*(atomic)) == sizeof (int32_t) ? 1 : -1]), \
+ (qb_atomic_int_set) ((volatile int32_t QB_GNUC_MAY_ALIAS *) (volatile void *) (atomic), (newval)))
+ .fi
+-.SS "#define qb_atomic_pointer_get(atomic)"
+-\fBValue:\fP
++.SS "#define \fBqb_atomic_pointer_get\fP(atomic)"\fBValue:\fP
+ .PP
+ .nf
+ ((void) sizeof (char* [sizeof (*(atomic)) == sizeof (void*) ? 1 : -1]), \
+ (qb_atomic_pointer_get) ((volatile void* QB_GNUC_MAY_ALIAS *) (volatile void *) (atomic)))
+ .fi
+-.SS "#define qb_atomic_pointer_set(atomic, newval)"
+-\fBValue:\fP
++.SS "#define \fBqb_atomic_pointer_set\fP(atomic, newval)"\fBValue:\fP
+ .PP
+ .nf
+ ((void) sizeof (char* [sizeof (*(atomic)) == sizeof (void*) ? 1 : -1]), \
+@@ -147,10 +141,8 @@ Atomically increments the integer pointe
+ .fi
+ .SH "Function Documentation"
+ .PP
+-.SS "void qb_atomic_init (void)"
+-
+-.SS "void qb_atomic_int_add (volatile int32_t \fBQB_GNUC_MAY_ALIAS\fP *atomic, int32_tval)"
+-
++.SS "void \fBqb_atomic_init\fP (void)"
++.SS "void \fBqb_atomic_int_add\fP (volatile int32_t \fBQB_GNUC_MAY_ALIAS\fP *atomic, int32_tval)"
+ .PP
+ Atomically adds val to the integer pointed to by atomic\&. Also acts as a memory barrier\&.
+ .PP
+@@ -162,8 +154,7 @@ Atomically adds val to the integer point
+ .RE
+ .PP
+
+-.SS "int32_t qb_atomic_int_compare_and_exchange (volatile int32_t \fBQB_GNUC_MAY_ALIAS\fP *atomic, int32_toldval, int32_tnewval)"
+-
++.SS "int32_t \fBqb_atomic_int_compare_and_exchange\fP (volatile int32_t \fBQB_GNUC_MAY_ALIAS\fP *atomic, int32_toldval, int32_tnewval)"
+ .PP
+ Compares oldval with the integer pointed to by atomic and if they are equal, atomically exchanges *atomic with newval\&. Also acts as a memory barrier\&.
+ .PP
+@@ -182,8 +173,7 @@ QB_TRUE, if *atomic was equal oldval\&.
+ .RE
+ .PP
+
+-.SS "int32_t qb_atomic_int_exchange_and_add (volatile int32_t \fBQB_GNUC_MAY_ALIAS\fP *atomic, int32_tval)"
+-
++.SS "int32_t \fBqb_atomic_int_exchange_and_add\fP (volatile int32_t \fBQB_GNUC_MAY_ALIAS\fP *atomic, int32_tval)"
+ .PP
+ Atomically adds val to the integer pointed to by atomic\&. It returns the value of *atomic just before the addition took place\&. Also acts as a memory barrier\&.
+ .PP
+@@ -200,8 +190,7 @@ the value of *atomic before the addition
+ .RE
+ .PP
+
+-.SS "int32_t qb_atomic_int_get (volatile int32_t \fBQB_GNUC_MAY_ALIAS\fP *atomic)"
+-
++.SS "int32_t \fBqb_atomic_int_get\fP (volatile int32_t \fBQB_GNUC_MAY_ALIAS\fP *atomic)"
+ .PP
+ Reads the value of the integer pointed to by atomic\&. Also acts as a memory barrier\&.
+ .PP
+@@ -216,8 +205,7 @@ the value of atomic
+ .RE
+ .PP
+
+-.SS "void qb_atomic_int_set (volatile int32_t \fBQB_GNUC_MAY_ALIAS\fP *atomic, int32_tnewval)"
+-
++.SS "void \fBqb_atomic_int_set\fP (volatile int32_t \fBQB_GNUC_MAY_ALIAS\fP *atomic, int32_tnewval)"
+ .PP
+ Sets the value of the integer pointed to by atomic\&. Also acts as a memory barrier\&.
+ .PP
+@@ -229,8 +217,7 @@ Sets the value of the integer pointed to
+ .RE
+ .PP
+
+-.SS "int32_t qb_atomic_pointer_compare_and_exchange (volatile void *\fBQB_GNUC_MAY_ALIAS\fP *atomic, void *oldval, void *newval)"
+-
++.SS "int32_t \fBqb_atomic_pointer_compare_and_exchange\fP (volatile void *\fBQB_GNUC_MAY_ALIAS\fP *atomic, void *oldval, void *newval)"
+ .PP
+ Compares oldval with the pointer pointed to by atomic and if they are equal, atomically exchanges *atomic with newval\&. Also acts as a memory barrier\&.
+ .PP
+@@ -249,8 +236,7 @@ QB_TRUE if atomic was equal oldval, else
+ .RE
+ .PP
+
+-.SS "void* qb_atomic_pointer_get (volatile void *\fBQB_GNUC_MAY_ALIAS\fP *atomic)"
+-
++.SS "void* \fBqb_atomic_pointer_get\fP (volatile void *\fBQB_GNUC_MAY_ALIAS\fP *atomic)"
+ .PP
+ Reads the value of the pointer pointed to by atomic\&. Also acts as a memory barrier\&.
+ .PP
+@@ -265,8 +251,7 @@ the value to add to atomic\&.
+ .RE
+ .PP
+
+-.SS "void qb_atomic_pointer_set (volatile void *\fBQB_GNUC_MAY_ALIAS\fP *atomic, void *newval)"
+-
++.SS "void \fBqb_atomic_pointer_set\fP (volatile void *\fBQB_GNUC_MAY_ALIAS\fP *atomic, void *newval)"
+ .PP
+ Sets the value of the pointer pointed to by atomic\&. Also acts as a memory barrier\&.
+ .PP
diff --git a/package/libqb/patches/patch-docs_man3_qbhdb_h_3 b/package/libqb/patches/patch-docs_man3_qbhdb_h_3
new file mode 100644
index 000000000..91a3ae198
--- /dev/null
+++ b/package/libqb/patches/patch-docs_man3_qbhdb_h_3
@@ -0,0 +1,165 @@
+--- libqb-0.16.0.orig/docs/man3/qbhdb.h.3 2013-07-25 20:16:18.000000000 +0200
++++ libqb-0.16.0/docs/man3/qbhdb.h.3 2013-09-09 05:26:31.447810868 +0200
+@@ -1,4 +1,4 @@
+-.TH "qbhdb.h" 3 "Thu Jul 25 2013" "Version 0.16.0" "libqb" \" -*- nroff -*-
++.TH "qbhdb.h" 3 "Mon Sep 9 2013" "Version 0.16.0" "libqb" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -28,7 +28,7 @@ The handle database is for reference cou
+ .RI "struct \fBqb_hdb\fP"
+ .br
+ .in -1c
+-.SS "Macros"
++.SS "Defines"
+
+ .in +1c
+ .ti -1c
+@@ -108,14 +108,11 @@ The handle database is for reference cou
+ The handle database is for reference counting objects\&.
+
+
+-.SH "Macro Definition Documentation"
++.SH "Define Documentation"
+ .PP
+-.SS "#define _GNU_SOURCE"
+-
+-.SS "#define QB_HDB_D_FORMAT '%'PRIu64"
+-
+-.SS "#define QB_HDB_DECLARE(database_name, destructor_function)"
+-\fBValue:\fP
++.SS "#define \fB_GNU_SOURCE\fP"
++.SS "#define \fBQB_HDB_D_FORMAT\fP '%'PRIu64"
++.SS "#define \fBQB_HDB_DECLARE\fP(database_name, destructor_function)"\fBValue:\fP
+ .PP
+ .nf
+ static struct qb_hdb (database_name) = { \
+@@ -129,24 +126,20 @@ static struct qb_hdb (database_name) = {
+ .PP
+ Convience macro for declaring a file scoped handle database\&. .PP
+ .nf
+-QB_HDB_DECLARE(my_handle_database, NULL);
++ QB_HDB_DECLARE(my_handle_database, NULL);
+ .fi
+ .PP
+
+-.SS "#define QB_HDB_X_FORMAT '%'PRIx64"
+-
++.SS "#define \fBQB_HDB_X_FORMAT\fP '%'PRIx64"
+ .SH "Typedef Documentation"
+ .PP
+ .SS "typedef uint64_t \fBqb_handle_t\fP"
+-
+ .PP
+ Generic handle type is 64 bits\&.
+ .SH "Function Documentation"
+ .PP
+-.SS "uint32_t qb_hdb_base_convert (\fBqb_handle_t\fPhandle)"
+-
+-.SS "void qb_hdb_create (struct \fBqb_hdb\fP *hdb)"
+-
++.SS "uint32_t \fBqb_hdb_base_convert\fP (\fBqb_handle_t\fPhandle)"
++.SS "void \fBqb_hdb_create\fP (struct \fBqb_hdb\fP *hdb)"
+ .PP
+ Create a new database\&. \fBParameters:\fP
+ .RS 4
+@@ -154,8 +147,7 @@ Create a new database\&. \fBParameters:\
+ .RE
+ .PP
+
+-.SS "void qb_hdb_destroy (struct \fBqb_hdb\fP *hdb)"
+-
++.SS "void \fBqb_hdb_destroy\fP (struct \fBqb_hdb\fP *hdb)"
+ .PP
+ Destroy a handle database\&. \fBParameters:\fP
+ .RS 4
+@@ -163,8 +155,7 @@ Destroy a handle database\&. \fBParamete
+ .RE
+ .PP
+
+-.SS "int32_t qb_hdb_handle_create (struct \fBqb_hdb\fP *hdb, int32_tinstance_size, \fBqb_handle_t\fP *handle_id_out)"
+-
++.SS "int32_t \fBqb_hdb_handle_create\fP (struct \fBqb_hdb\fP *hdb, int32_tinstance_size, \fBqb_handle_t\fP *handle_id_out)"
+ .PP
+ Create a new handle\&. \fBParameters:\fP
+ .RS 4
+@@ -181,8 +172,7 @@ Create a new handle\&. \fBParameters:\fP
+ .RE
+ .PP
+
+-.SS "int32_t qb_hdb_handle_destroy (struct \fBqb_hdb\fP *hdb, \fBqb_handle_t\fPhandle_in)"
+-
++.SS "int32_t \fBqb_hdb_handle_destroy\fP (struct \fBqb_hdb\fP *hdb, \fBqb_handle_t\fPhandle_in)"
+ .PP
+ Request the destruction of the object\&. When the refcount is 0, it will be destroyed\&.
+ .PP
+@@ -199,8 +189,7 @@ Request the destruction of the object\&.
+ .RE
+ .PP
+
+-.SS "int32_t qb_hdb_handle_get (struct \fBqb_hdb\fP *hdb, \fBqb_handle_t\fPhandle_in, void **instance)"
+-
++.SS "int32_t \fBqb_hdb_handle_get\fP (struct \fBqb_hdb\fP *hdb, \fBqb_handle_t\fPhandle_in, void **instance)"
+ .PP
+ Get the instance associated with this handle and increase it's refcount\&. \fBParameters:\fP
+ .RS 4
+@@ -217,8 +206,7 @@ Get the instance associated with this ha
+ .RE
+ .PP
+
+-.SS "int32_t qb_hdb_handle_get_always (struct \fBqb_hdb\fP *hdb, \fBqb_handle_t\fPhandle_in, void **instance)"
+-
++.SS "int32_t \fBqb_hdb_handle_get_always\fP (struct \fBqb_hdb\fP *hdb, \fBqb_handle_t\fPhandle_in, void **instance)"
+ .PP
+ Get the instance associated with this handle and increase it's refcount\&. \fBParameters:\fP
+ .RS 4
+@@ -235,8 +223,7 @@ Get the instance associated with this ha
+ .RE
+ .PP
+
+-.SS "int32_t qb_hdb_handle_put (struct \fBqb_hdb\fP *hdb, \fBqb_handle_t\fPhandle_in)"
+-
++.SS "int32_t \fBqb_hdb_handle_put\fP (struct \fBqb_hdb\fP *hdb, \fBqb_handle_t\fPhandle_in)"
+ .PP
+ Put the instance associated with this handle and decrease it's refcount\&. \fBParameters:\fP
+ .RS 4
+@@ -251,8 +238,7 @@ Put the instance associated with this ha
+ .RE
+ .PP
+
+-.SS "int32_t qb_hdb_handle_refcount_get (struct \fBqb_hdb\fP *hdb, \fBqb_handle_t\fPhandle_in)"
+-
++.SS "int32_t \fBqb_hdb_handle_refcount_get\fP (struct \fBqb_hdb\fP *hdb, \fBqb_handle_t\fPhandle_in)"
+ .PP
+ Get the current refcount\&. \fBParameters:\fP
+ .RS 4
+@@ -267,8 +253,7 @@ Get the current refcount\&. \fBParameter
+ .RE
+ .PP
+
+-.SS "int32_t qb_hdb_iterator_next (struct \fBqb_hdb\fP *hdb, void **instance, \fBqb_handle_t\fP *handle)"
+-
++.SS "int32_t \fBqb_hdb_iterator_next\fP (struct \fBqb_hdb\fP *hdb, void **instance, \fBqb_handle_t\fP *handle)"
+ .PP
+ Get the next object and increament it's refcount\&. Remember to call \fBqb_hdb_handle_put()\fP
+ .PP
+@@ -287,8 +272,7 @@ Get the next object and increament it's
+ .RE
+ .PP
+
+-.SS "void qb_hdb_iterator_reset (struct \fBqb_hdb\fP *hdb)"
+-
++.SS "void \fBqb_hdb_iterator_reset\fP (struct \fBqb_hdb\fP *hdb)"
+ .PP
+ Reset the iterator\&. \fBParameters:\fP
+ .RS 4
+@@ -296,8 +280,7 @@ Reset the iterator\&. \fBParameters:\fP
+ .RE
+ .PP
+
+-.SS "uint64_t qb_hdb_nocheck_convert (uint32_thandle)"
+-
++.SS "uint64_t \fBqb_hdb_nocheck_convert\fP (uint32_thandle)"
+ .SH "Author"
+ .PP
+ Generated automatically by Doxygen for libqb from the source code\&.
diff --git a/package/libqb/patches/patch-docs_man3_qbipc_common_h_3 b/package/libqb/patches/patch-docs_man3_qbipc_common_h_3
new file mode 100644
index 000000000..57bd1b059
--- /dev/null
+++ b/package/libqb/patches/patch-docs_man3_qbipc_common_h_3
@@ -0,0 +1,67 @@
+--- libqb-0.16.0.orig/docs/man3/qbipc_common.h.3 2013-07-25 20:16:18.000000000 +0200
++++ libqb-0.16.0/docs/man3/qbipc_common.h.3 2013-09-09 05:26:31.455810766 +0200
+@@ -1,4 +1,4 @@
+-.TH "qbipc_common.h" 3 "Thu Jul 25 2013" "Version 0.16.0" "libqb" \" -*- nroff -*-
++.TH "qbipc_common.h" 3 "Mon Sep 9 2013" "Version 0.16.0" "libqb" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -19,7 +19,7 @@ qbipc_common.h \-
+ .RI "struct \fBqb_ipc_response_header\fP"
+ .br
+ .in -1c
+-.SS "Macros"
++.SS "Defines"
+
+ .in +1c
+ .ti -1c
+@@ -59,24 +59,18 @@ qbipc_common.h \-
+ .RI "enum \fBqb_ipc_type\fP \fB__attribute__\fP"
+ .br
+ .in -1c
+-.SH "Macro Definition Documentation"
++.SH "Define Documentation"
+ .PP
+-.SS "#define QB_IPC_MSG_AUTHENTICATE -1"
+-
+-.SS "#define QB_IPC_MSG_DISCONNECT -3"
+-
+-.SS "#define QB_IPC_MSG_NEW_EVENT_SOCK -2"
+-
+-.SS "#define QB_IPC_MSG_NEW_MESSAGE 0"
+-
+-.SS "#define QB_IPC_MSG_USER_START \fBQB_IPC_MSG_NEW_MESSAGE\fP"
+-
++.SS "#define \fBQB_IPC_MSG_AUTHENTICATE\fP -1"
++.SS "#define \fBQB_IPC_MSG_DISCONNECT\fP -3"
++.SS "#define \fBQB_IPC_MSG_NEW_EVENT_SOCK\fP -2"
++.SS "#define \fBQB_IPC_MSG_NEW_MESSAGE\fP 0"
++.SS "#define \fBQB_IPC_MSG_USER_START\fP \fBQB_IPC_MSG_NEW_MESSAGE\fP"
+ .SH "Enumeration Type Documentation"
+ .PP
+ .SS "enum \fBqb_ipc_type\fP"
+-
+ .PP
+-\fBEnumerator\fP
++\fBEnumerator: \fP
+ .in +1c
+ .TP
+ \fB\fIQB_IPC_SOCKET \fP\fP
+@@ -88,14 +82,13 @@ qbipc_common.h \-
+ \fB\fIQB_IPC_SYSV_MQ \fP\fP
+ .TP
+ \fB\fIQB_IPC_NATIVE \fP\fP
++
+ .SH "Function Documentation"
+ .PP
+-.SS "struct \fBqb_ipc_request_header\fP __attribute__ ((aligned(8)))"
+-
++.SS "struct \fBqb_ipc_request_header\fP \fB__attribute__\fP ((aligned(8)))"
+ .SH "Variable Documentation"
+ .PP
+-.SS "int32_t error __attribute__"
+-
++.SS "int32_t error \fB__attribute__\fP"
+ .SH "Author"
+ .PP
+ Generated automatically by Doxygen for libqb from the source code\&.
diff --git a/package/libqb/patches/patch-docs_man3_qbipcc_h_3 b/package/libqb/patches/patch-docs_man3_qbipcc_h_3
new file mode 100644
index 000000000..d3fdd0eec
--- /dev/null
+++ b/package/libqb/patches/patch-docs_man3_qbipcc_h_3
@@ -0,0 +1,167 @@
+--- libqb-0.16.0.orig/docs/man3/qbipcc.h.3 2013-07-25 20:16:18.000000000 +0200
++++ libqb-0.16.0/docs/man3/qbipcc.h.3 2013-09-09 05:26:31.487810365 +0200
+@@ -1,4 +1,4 @@
+-.TH "qbipcc.h" 3 "Thu Jul 25 2013" "Version 0.16.0" "libqb" \" -*- nroff -*-
++.TH "qbipcc.h" 3 "Mon Sep 9 2013" "Version 0.16.0" "libqb" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -113,11 +113,9 @@ The \fBqb_ipcc_event_recv()\fP function
+ .SH "Typedef Documentation"
+ .PP
+ .SS "typedef struct qb_ipcc_connection \fBqb_ipcc_connection_t\fP"
+-
+ .SH "Function Documentation"
+ .PP
+-.SS "\fBqb_ipcc_connection_t\fP* qb_ipcc_connect (const char *name, size_tmax_msg_size)"
+-
++.SS "\fBqb_ipcc_connection_t\fP* \fBqb_ipcc_connect\fP (const char *name, size_tmax_msg_size)"
+ .PP
+ Create a connection to an IPC service\&. \fBParameters:\fP
+ .RS 4
+@@ -133,12 +131,11 @@ NULL (error: see errno) or a connection
+ .PP
+ \fBNote:\fP
+ .RS 4
+-It is recommended to do a one time check on the max_msg_size value using qb_ipcc_verify_dgram_max_msg_size \fIBEFORE\fP calling the connect function when IPC_SOCKET is in use\&. Some distributions while allow large message buffers to be set on the socket, but not actually honor them because of kernel state values\&. The qb_ipcc_verify_dgram_max_msg_size function both sets the socket buffer size and verifies it by doing a send/recv\&.
++It is recommended to do a one time check on the max_msg_size value using qb_ipcc_verify_dgram_max_msg_size _BEFORE_ calling the connect function when IPC_SOCKET is in use\&. Some distributions while allow large message buffers to be set on the socket, but not actually honor them because of kernel state values\&. The qb_ipcc_verify_dgram_max_msg_size function both sets the socket buffer size and verifies it by doing a send/recv\&.
+ .RE
+ .PP
+
+-.SS "void* qb_ipcc_context_get (\fBqb_ipcc_connection_t\fP *c)"
+-
++.SS "void* \fBqb_ipcc_context_get\fP (\fBqb_ipcc_connection_t\fP *c)"
+ .PP
+ Get the context (set previously) \fBParameters:\fP
+ .RS 4
+@@ -150,14 +147,13 @@ Get the context (set previously) \fBPara
+ the context
+ .RE
+ .PP
+-\fBSee Also:\fP
++\fBSee also:\fP
+ .RS 4
+ \fBqb_ipcc_context_set()\fP
+ .RE
+ .PP
+
+-.SS "void qb_ipcc_context_set (\fBqb_ipcc_connection_t\fP *c, void *context)"
+-
++.SS "void \fBqb_ipcc_context_set\fP (\fBqb_ipcc_connection_t\fP *c, void *context)"
+ .PP
+ Associate a 'user' pointer with this connection\&. \fBParameters:\fP
+ .RS 4
+@@ -166,14 +162,13 @@ Associate a 'user' pointer with this con
+ \fIc\fP connection instance
+ .RE
+ .PP
+-\fBSee Also:\fP
++\fBSee also:\fP
+ .RS 4
+ \fBqb_ipcc_context_get()\fP
+ .RE
+ .PP
+
+-.SS "void qb_ipcc_disconnect (\fBqb_ipcc_connection_t\fP *c)"
+-
++.SS "void \fBqb_ipcc_disconnect\fP (\fBqb_ipcc_connection_t\fP *c)"
+ .PP
+ Disconnect an IPC connection\&. \fBParameters:\fP
+ .RS 4
+@@ -181,8 +176,7 @@ Disconnect an IPC connection\&. \fBParam
+ .RE
+ .PP
+
+-.SS "ssize_t qb_ipcc_event_recv (\fBqb_ipcc_connection_t\fP *c, void *msg_ptr, size_tmsg_len, int32_tms_timeout)"
+-
++.SS "ssize_t \fBqb_ipcc_event_recv\fP (\fBqb_ipcc_connection_t\fP *c, void *msg_ptr, size_tmsg_len, int32_tms_timeout)"
+ .PP
+ Receive an event\&. \fBParameters:\fP
+ .RS 4
+@@ -208,8 +202,7 @@ that msg_ptr will include a \fBqb_ipc_re
+ .RE
+ .PP
+
+-.SS "int32_t qb_ipcc_fc_enable_max_set (\fBqb_ipcc_connection_t\fP *c, uint32_tmax)"
+-
++.SS "int32_t \fBqb_ipcc_fc_enable_max_set\fP (\fBqb_ipcc_connection_t\fP *c, uint32_tmax)"
+ .PP
+ Set the maximum allowable flowcontrol value\&. \fBNote:\fP
+ .RS 4
+@@ -224,8 +217,7 @@ the default is 1
+ .RE
+ .PP
+
+-.SS "int32_t qb_ipcc_fd_get (\fBqb_ipcc_connection_t\fP *c, int32_t *fd)"
+-
++.SS "int32_t \fBqb_ipcc_fd_get\fP (\fBqb_ipcc_connection_t\fP *c, int32_t *fd)"
+ .PP
+ Get the file descriptor to poll\&. \fBParameters:\fP
+ .RS 4
+@@ -235,8 +227,7 @@ Get the file descriptor to poll\&. \fBPa
+ .RE
+ .PP
+
+-.SS "int32_t qb_ipcc_is_connected (\fBqb_ipcc_connection_t\fP *c)"
+-
++.SS "int32_t \fBqb_ipcc_is_connected\fP (\fBqb_ipcc_connection_t\fP *c)"
+ .PP
+ Is the connection connected? \fBParameters:\fP
+ .RS 4
+@@ -251,8 +242,7 @@ Is the connection connected? \fBParamete
+ .RE
+ .PP
+
+-.SS "ssize_t qb_ipcc_recv (\fBqb_ipcc_connection_t\fP *c, void *msg_ptr, size_tmsg_len, int32_tms_timeout)"
+-
++.SS "ssize_t \fBqb_ipcc_recv\fP (\fBqb_ipcc_connection_t\fP *c, void *msg_ptr, size_tmsg_len, int32_tms_timeout)"
+ .PP
+ Receive a response\&. \fBParameters:\fP
+ .RS 4
+@@ -276,8 +266,7 @@ that msg_ptr will include a \fBqb_ipc_re
+ .RE
+ .PP
+
+-.SS "ssize_t qb_ipcc_send (\fBqb_ipcc_connection_t\fP *c, const void *msg_ptr, size_tmsg_len)"
+-
++.SS "ssize_t \fBqb_ipcc_send\fP (\fBqb_ipcc_connection_t\fP *c, const void *msg_ptr, size_tmsg_len)"
+ .PP
+ Send a message\&. \fBParameters:\fP
+ .RS 4
+@@ -299,8 +288,7 @@ the msg_ptr must include a \fBqb_ipc_req
+ .RE
+ .PP
+
+-.SS "ssize_t qb_ipcc_sendv (\fBqb_ipcc_connection_t\fP *c, const struct iovec *iov, size_tiov_len)"
+-
++.SS "ssize_t \fBqb_ipcc_sendv\fP (\fBqb_ipcc_connection_t\fP *c, const struct iovec *iov, size_tiov_len)"
+ .PP
+ Send a message (iovec)\&. \fBParameters:\fP
+ .RS 4
+@@ -322,8 +310,7 @@ the iov[0] must be a \fBqb_ipc_request_h
+ .RE
+ .PP
+
+-.SS "ssize_t qb_ipcc_sendv_recv (\fBqb_ipcc_connection_t\fP *c, const struct iovec *iov, uint32_tiov_len, void *msg_ptr, size_tmsg_len, int32_tms_timeout)"
+-
++.SS "ssize_t \fBqb_ipcc_sendv_recv\fP (\fBqb_ipcc_connection_t\fP *c, const struct iovec *iov, uint32_tiov_len, void *msg_ptr, size_tmsg_len, int32_tms_timeout)"
+ .PP
+ This is a convenience function that simply sends and then recvs\&. \fBParameters:\fP
+ .RS 4
+@@ -347,14 +334,13 @@ the iov[0] must include a \fBqb_ipc_requ
+ that msg_ptr will include a \fBqb_ipc_response_header\fP at the top of the message\&.
+ .RE
+ .PP
+-\fBSee Also:\fP
++\fBSee also:\fP
+ .RS 4
+ \fBqb_ipcc_sendv()\fP \fBqb_ipcc_recv()\fP
+ .RE
+ .PP
+
+-.SS "int32_t qb_ipcc_verify_dgram_max_msg_size (size_tmax_msg_size)"
+-
++.SS "int32_t \fBqb_ipcc_verify_dgram_max_msg_size\fP (size_tmax_msg_size)"
+ .PP
+ Test kernel dgram socket buffers to verify the largest size up to the max_msg_size value a single msg can be\&. Rounds down to the nearest 1k\&.
+ .PP
diff --git a/package/libqb/patches/patch-docs_man3_qbipcs_h_3 b/package/libqb/patches/patch-docs_man3_qbipcs_h_3
new file mode 100644
index 000000000..224543484
--- /dev/null
+++ b/package/libqb/patches/patch-docs_man3_qbipcs_h_3
@@ -0,0 +1,383 @@
+--- libqb-0.16.0.orig/docs/man3/qbipcs.h.3 2013-07-25 20:16:18.000000000 +0200
++++ libqb-0.16.0/docs/man3/qbipcs.h.3 2013-09-09 05:26:31.551809560 +0200
+@@ -1,4 +1,4 @@
+-.TH "qbipcs.h" 3 "Thu Jul 25 2013" "Version 0.16.0" "libqb" \" -*- nroff -*-
++.TH "qbipcs.h" 3 "Mon Sep 9 2013" "Version 0.16.0" "libqb" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -206,8 +206,7 @@ Server IPC API\&.
+
+ .SH "Typedef Documentation"
+ .PP
+-.SS "typedef int32_t(* qb_ipcs_connection_accept_fn)(\fBqb_ipcs_connection_t\fP *c, uid_t uid, gid_t gid)"
+-
++.SS "typedef int32_t(* \fBqb_ipcs_connection_accept_fn\fP)(\fBqb_ipcs_connection_t\fP *c, uid_t uid, gid_t gid)"
+ .PP
+ This callback is to check wether you want to accept a new connection\&. The type of checks you should do are authentication, service availabilty or process resource constraints\&.
+ .PP
+@@ -222,8 +221,7 @@ you can call \fBqb_ipcs_connection_auth_
+ .RE
+ .PP
+
+-.SS "typedef int32_t(* qb_ipcs_connection_closed_fn)(\fBqb_ipcs_connection_t\fP *c)"
+-
++.SS "typedef int32_t(* \fBqb_ipcs_connection_closed_fn\fP)(\fBqb_ipcs_connection_t\fP *c)"
+ .PP
+ This is called after a connection has been disconnected\&. \fBNote:\fP
+ .RS 4
+@@ -231,38 +229,27 @@ if you return anything but 0 this functi
+ .RE
+ .PP
+
+-.SS "typedef void(* qb_ipcs_connection_created_fn)(\fBqb_ipcs_connection_t\fP *c)"
+-
++.SS "typedef void(* \fBqb_ipcs_connection_created_fn\fP)(\fBqb_ipcs_connection_t\fP *c)"
+ .PP
+ This is called after a new connection has been created\&.
+-.SS "typedef void(* qb_ipcs_connection_destroyed_fn)(\fBqb_ipcs_connection_t\fP *c)"
+-
++.SS "typedef void(* \fBqb_ipcs_connection_destroyed_fn\fP)(\fBqb_ipcs_connection_t\fP *c)"
+ .PP
+ This is called just before a connection is freed\&.
+ .SS "typedef struct qb_ipcs_connection \fBqb_ipcs_connection_t\fP"
+-
+-.SS "typedef int32_t(* qb_ipcs_dispatch_add_fn)(enum \fBqb_loop_priority\fP p, int32_t fd, int32_t events, void *data, \fBqb_ipcs_dispatch_fn_t\fP fn)"
+-
+-.SS "typedef int32_t(* qb_ipcs_dispatch_del_fn)(int32_t fd)"
+-
+-.SS "typedef int32_t(* qb_ipcs_dispatch_fn_t)(int32_t fd, int32_t revents, void *data)"
+-
+-.SS "typedef int32_t(* qb_ipcs_dispatch_mod_fn)(enum \fBqb_loop_priority\fP p, int32_t fd, int32_t events, void *data, \fBqb_ipcs_dispatch_fn_t\fP fn)"
+-
+-.SS "typedef int32_t(* qb_ipcs_job_add_fn)(enum \fBqb_loop_priority\fP p, void *data, \fBqb_loop_job_dispatch_fn\fP dispatch_fn)"
+-
+-.SS "typedef int32_t(* qb_ipcs_msg_process_fn)(\fBqb_ipcs_connection_t\fP *c, void *data, size_t size)"
+-
++.SS "typedef int32_t(* \fBqb_ipcs_dispatch_add_fn\fP)(enum \fBqb_loop_priority\fP p, int32_t fd, int32_t events, void *data, \fBqb_ipcs_dispatch_fn_t\fP fn)"
++.SS "typedef int32_t(* \fBqb_ipcs_dispatch_del_fn\fP)(int32_t fd)"
++.SS "typedef int32_t(* \fBqb_ipcs_dispatch_fn_t\fP)(int32_t fd, int32_t revents, void *data)"
++.SS "typedef int32_t(* \fBqb_ipcs_dispatch_mod_fn\fP)(enum \fBqb_loop_priority\fP p, int32_t fd, int32_t events, void *data, \fBqb_ipcs_dispatch_fn_t\fP fn)"
++.SS "typedef int32_t(* \fBqb_ipcs_job_add_fn\fP)(enum \fBqb_loop_priority\fP p, void *data, \fBqb_loop_job_dispatch_fn\fP dispatch_fn)"
++.SS "typedef int32_t(* \fBqb_ipcs_msg_process_fn\fP)(\fBqb_ipcs_connection_t\fP *c, void *data, size_t size)"
+ .PP
+ This is the message processing calback\&. It is called with the message data\&.
+ .SS "typedef struct qb_ipcs_service \fBqb_ipcs_service_t\fP"
+-
+ .SH "Enumeration Type Documentation"
+ .PP
+ .SS "enum \fBqb_ipcs_rate_limit\fP"
+-
+ .PP
+-\fBEnumerator\fP
++\fBEnumerator: \fP
+ .in +1c
+ .TP
+ \fB\fIQB_IPCS_RATE_FAST \fP\fP
+@@ -274,10 +261,10 @@ This is the message processing calback\&
+ \fB\fIQB_IPCS_RATE_OFF \fP\fP
+ .TP
+ \fB\fIQB_IPCS_RATE_OFF_2 \fP\fP
++
+ .SH "Function Documentation"
+ .PP
+-.SS "void qb_ipcs_connection_auth_set (\fBqb_ipcs_connection_t\fP *conn, uid_tuid, gid_tgid, mode_tmode)"
+-
++.SS "void \fBqb_ipcs_connection_auth_set\fP (\fBqb_ipcs_connection_t\fP *conn, uid_tuid, gid_tgid, mode_tmode)"
+ .PP
+ Set the permissions on and shared memory files so that both processes can read and write to them\&. \fBParameters:\fP
+ .RS 4
+@@ -290,7 +277,7 @@ Set the permissions on and shared memory
+ \fImode\fP the mode to set\&.
+ .RE
+ .PP
+-\fBSee Also:\fP
++\fBSee also:\fP
+ .RS 4
+ chmod() chown()
+ .RE
+@@ -301,8 +288,7 @@ this must be called within the \fBqb_ipc
+ .RE
+ .PP
+
+-.SS "\fBqb_ipcs_connection_t\fP* qb_ipcs_connection_first_get (\fBqb_ipcs_service_t\fP *pt)"
+-
++.SS "\fBqb_ipcs_connection_t\fP* \fBqb_ipcs_connection_first_get\fP (\fBqb_ipcs_service_t\fP *pt)"
+ .PP
+ Get the first connection\&. \fBNote:\fP
+ .RS 4
+@@ -320,8 +306,7 @@ first connection
+ .RE
+ .PP
+
+-.SS "\fBqb_ipcs_connection_t\fP* qb_ipcs_connection_next_get (\fBqb_ipcs_service_t\fP *pt, \fBqb_ipcs_connection_t\fP *current)"
+-
++.SS "\fBqb_ipcs_connection_t\fP* \fBqb_ipcs_connection_next_get\fP (\fBqb_ipcs_service_t\fP *pt, \fBqb_ipcs_connection_t\fP *current)"
+ .PP
+ Get the next connection\&. \fBNote:\fP
+ .RS 4
+@@ -341,8 +326,7 @@ next connection
+ .RE
+ .PP
+
+-.SS "void qb_ipcs_connection_ref (\fBqb_ipcs_connection_t\fP *c)"
+-
++.SS "void \fBqb_ipcs_connection_ref\fP (\fBqb_ipcs_connection_t\fP *c)"
+ .PP
+ Increment the connection's reference counter\&. \fBParameters:\fP
+ .RS 4
+@@ -350,8 +334,7 @@ Increment the connection's reference cou
+ .RE
+ .PP
+
+-.SS "void* qb_ipcs_connection_service_context_get (\fBqb_ipcs_connection_t\fP *c)"
+-
++.SS "void* \fBqb_ipcs_connection_service_context_get\fP (\fBqb_ipcs_connection_t\fP *c)"
+ .PP
+ Get the context previously set on the service backing this connection\&. \fBParameters:\fP
+ .RS 4
+@@ -363,14 +346,13 @@ Get the context previously set on the se
+ the context
+ .RE
+ .PP
+-\fBSee Also:\fP
++\fBSee also:\fP
+ .RS 4
+ \fBqb_ipcs_service_context_set\fP
+ .RE
+ .PP
+
+-.SS "int32_t qb_ipcs_connection_stats_get (\fBqb_ipcs_connection_t\fP *c, struct \fBqb_ipcs_connection_stats\fP *stats, int32_tclear_after_read)"
+-
++.SS "int32_t \fBqb_ipcs_connection_stats_get\fP (\fBqb_ipcs_connection_t\fP *c, struct \fBqb_ipcs_connection_stats\fP *stats, int32_tclear_after_read)"
+ .PP
+ Get the connection statistics\&. \fBDeprecated\fP
+ .RS 4
+@@ -392,8 +374,7 @@ from v0\&.13\&.0 onwards, use qb_ipcs_co
+ .RE
+ .PP
+
+-.SS "struct \fBqb_ipcs_connection_stats_2\fP* qb_ipcs_connection_stats_get_2 (\fBqb_ipcs_connection_t\fP *c, int32_tclear_after_read)\fC [read]\fP"
+-
++.SS "struct \fBqb_ipcs_connection_stats_2\fP* \fBqb_ipcs_connection_stats_get_2\fP (\fBqb_ipcs_connection_t\fP *c, int32_tclear_after_read)\fC [read]\fP"
+ .PP
+ Get (and allocate) the connection statistics\&. \fBParameters:\fP
+ .RS 4
+@@ -410,8 +391,7 @@ Get (and allocate) the connection statis
+ .RE
+ .PP
+
+-.SS "void qb_ipcs_connection_unref (\fBqb_ipcs_connection_t\fP *c)"
+-
++.SS "void \fBqb_ipcs_connection_unref\fP (\fBqb_ipcs_connection_t\fP *c)"
+ .PP
+ Decrement the connection's reference counter\&. \fBParameters:\fP
+ .RS 4
+@@ -419,8 +399,7 @@ Decrement the connection's reference cou
+ .RE
+ .PP
+
+-.SS "void* qb_ipcs_context_get (\fBqb_ipcs_connection_t\fP *c)"
+-
++.SS "void* \fBqb_ipcs_context_get\fP (\fBqb_ipcs_connection_t\fP *c)"
+ .PP
+ Get the context (set previously) \fBParameters:\fP
+ .RS 4
+@@ -432,14 +411,13 @@ Get the context (set previously) \fBPara
+ the context
+ .RE
+ .PP
+-\fBSee Also:\fP
++\fBSee also:\fP
+ .RS 4
+ \fBqb_ipcs_context_set()\fP
+ .RE
+ .PP
+
+-.SS "void qb_ipcs_context_set (\fBqb_ipcs_connection_t\fP *c, void *context)"
+-
++.SS "void \fBqb_ipcs_context_set\fP (\fBqb_ipcs_connection_t\fP *c, void *context)"
+ .PP
+ Associate a 'user' pointer with this connection\&. \fBParameters:\fP
+ .RS 4
+@@ -448,14 +426,13 @@ Associate a 'user' pointer with this con
+ \fIc\fP connection instance
+ .RE
+ .PP
+-\fBSee Also:\fP
++\fBSee also:\fP
+ .RS 4
+ \fBqb_ipcs_context_get()\fP
+ .RE
+ .PP
+
+-.SS "\fBqb_ipcs_service_t\fP* qb_ipcs_create (const char *name, int32_tservice_id, enum \fBqb_ipc_type\fPtype, struct \fBqb_ipcs_service_handlers\fP *handlers)"
+-
++.SS "\fBqb_ipcs_service_t\fP* \fBqb_ipcs_create\fP (const char *name, int32_tservice_id, enum \fBqb_ipc_type\fPtype, struct \fBqb_ipcs_service_handlers\fP *handlers)"
+ .PP
+ Create a new IPC server\&. \fBParameters:\fP
+ .RS 4
+@@ -474,8 +451,7 @@ the new service instance\&.
+ .RE
+ .PP
+
+-.SS "void qb_ipcs_destroy (\fBqb_ipcs_service_t\fP *s)"
+-
++.SS "void \fBqb_ipcs_destroy\fP (\fBqb_ipcs_service_t\fP *s)"
+ .PP
+ Destroy the IPC server\&. \fBParameters:\fP
+ .RS 4
+@@ -483,8 +459,7 @@ Destroy the IPC server\&. \fBParameters:
+ .RE
+ .PP
+
+-.SS "void qb_ipcs_disconnect (\fBqb_ipcs_connection_t\fP *c)"
+-
++.SS "void \fBqb_ipcs_disconnect\fP (\fBqb_ipcs_connection_t\fP *c)"
+ .PP
+ Disconnect from this client\&. \fBParameters:\fP
+ .RS 4
+@@ -492,8 +467,7 @@ Disconnect from this client\&. \fBParame
+ .RE
+ .PP
+
+-.SS "ssize_t qb_ipcs_event_send (\fBqb_ipcs_connection_t\fP *c, const void *data, size_tsize)"
+-
++.SS "ssize_t \fBqb_ipcs_event_send\fP (\fBqb_ipcs_connection_t\fP *c, const void *data, size_tsize)"
+ .PP
+ Send an asyncronous event message to the client\&. \fBParameters:\fP
+ .RS 4
+@@ -515,8 +489,7 @@ the data must include a \fBqb_ipc_respon
+ .RE
+ .PP
+
+-.SS "ssize_t qb_ipcs_event_sendv (\fBqb_ipcs_connection_t\fP *c, const struct iovec *iov, size_tiov_len)"
+-
++.SS "ssize_t \fBqb_ipcs_event_sendv\fP (\fBqb_ipcs_connection_t\fP *c, const struct iovec *iov, size_tiov_len)"
+ .PP
+ Send an asyncronous event message to the client\&. \fBParameters:\fP
+ .RS 4
+@@ -538,8 +511,7 @@ the iov[0] must be a \fBqb_ipc_response_
+ .RE
+ .PP
+
+-.SS "void qb_ipcs_poll_handlers_set (\fBqb_ipcs_service_t\fP *s, struct \fBqb_ipcs_poll_handlers\fP *handlers)"
+-
++.SS "void \fBqb_ipcs_poll_handlers_set\fP (\fBqb_ipcs_service_t\fP *s, struct \fBqb_ipcs_poll_handlers\fP *handlers)"
+ .PP
+ Set your poll callbacks\&. \fBParameters:\fP
+ .RS 4
+@@ -549,8 +521,7 @@ Set your poll callbacks\&. \fBParameters
+ .RE
+ .PP
+
+-.SS "void qb_ipcs_ref (\fBqb_ipcs_service_t\fP *s)"
+-
++.SS "void \fBqb_ipcs_ref\fP (\fBqb_ipcs_service_t\fP *s)"
+ .PP
+ Increase the reference counter on the service object\&. \fBParameters:\fP
+ .RS 4
+@@ -558,8 +529,7 @@ Increase the reference counter on the se
+ .RE
+ .PP
+
+-.SS "void qb_ipcs_request_rate_limit (\fBqb_ipcs_service_t\fP *s, enum \fBqb_ipcs_rate_limit\fPrl)"
+-
++.SS "void \fBqb_ipcs_request_rate_limit\fP (\fBqb_ipcs_service_t\fP *s, enum \fBqb_ipcs_rate_limit\fPrl)"
+ .PP
+ Limit the incomming request rate\&. \fBParameters:\fP
+ .RS 4
+@@ -569,8 +539,7 @@ Limit the incomming request rate\&. \fBP
+ .RE
+ .PP
+
+-.SS "ssize_t qb_ipcs_response_send (\fBqb_ipcs_connection_t\fP *c, const void *data, size_tsize)"
+-
++.SS "ssize_t \fBqb_ipcs_response_send\fP (\fBqb_ipcs_connection_t\fP *c, const void *data, size_tsize)"
+ .PP
+ Send a response to a incomming request\&. \fBParameters:\fP
+ .RS 4
+@@ -592,8 +561,7 @@ the data must include a \fBqb_ipc_respon
+ .RE
+ .PP
+
+-.SS "ssize_t qb_ipcs_response_sendv (\fBqb_ipcs_connection_t\fP *c, const struct iovec *iov, size_tiov_len)"
+-
++.SS "ssize_t \fBqb_ipcs_response_sendv\fP (\fBqb_ipcs_connection_t\fP *c, const struct iovec *iov, size_tiov_len)"
+ .PP
+ Send a response to a incomming request\&. \fBParameters:\fP
+ .RS 4
+@@ -615,8 +583,7 @@ the iov[0] must be a \fBqb_ipc_response_
+ .RE
+ .PP
+
+-.SS "int32_t qb_ipcs_run (\fBqb_ipcs_service_t\fP *s)"
+-
++.SS "int32_t \fBqb_ipcs_run\fP (\fBqb_ipcs_service_t\fP *s)"
+ .PP
+ run the new IPC server\&. \fBParameters:\fP
+ .RS 4
+@@ -629,8 +596,7 @@ run the new IPC server\&. \fBParameters:
+ .RE
+ .PP
+
+-.SS "void* qb_ipcs_service_context_get (\fBqb_ipcs_service_t\fP *s)"
+-
++.SS "void* \fBqb_ipcs_service_context_get\fP (\fBqb_ipcs_service_t\fP *s)"
+ .PP
+ Get the context (set previously) \fBParameters:\fP
+ .RS 4
+@@ -642,14 +608,13 @@ Get the context (set previously) \fBPara
+ the context
+ .RE
+ .PP
+-\fBSee Also:\fP
++\fBSee also:\fP
+ .RS 4
+ \fBqb_ipcs_service_context_set()\fP
+ .RE
+ .PP
+
+-.SS "void qb_ipcs_service_context_set (\fBqb_ipcs_service_t\fP *s, void *context)"
+-
++.SS "void \fBqb_ipcs_service_context_set\fP (\fBqb_ipcs_service_t\fP *s, void *context)"
+ .PP
+ Associate a 'user' pointer with this service\&. \fBParameters:\fP
+ .RS 4
+@@ -658,14 +623,13 @@ Associate a 'user' pointer with this ser
+ \fIcontext\fP the pointer to associate with this service\&.
+ .RE
+ .PP
+-\fBSee Also:\fP
++\fBSee also:\fP
+ .RS 4
+ \fBqb_ipcs_service_context_get()\fP
+ .RE
+ .PP
+
+-.SS "int32_t qb_ipcs_service_id_get (\fBqb_ipcs_connection_t\fP *c)"
+-
++.SS "int32_t \fBqb_ipcs_service_id_get\fP (\fBqb_ipcs_connection_t\fP *c)"
+ .PP
+ Get the service id related to this connection's service\&. (as passed into \fBqb_ipcs_create()\fP
+ .PP
+@@ -675,8 +639,7 @@ service id\&.
+ .RE
+ .PP
+
+-.SS "int32_t qb_ipcs_stats_get (\fBqb_ipcs_service_t\fP *pt, struct \fBqb_ipcs_stats\fP *stats, int32_tclear_after_read)"
+-
++.SS "int32_t \fBqb_ipcs_stats_get\fP (\fBqb_ipcs_service_t\fP *pt, struct \fBqb_ipcs_stats\fP *stats, int32_tclear_after_read)"
+ .PP
+ Get the service statistics\&. \fBParameters:\fP
+ .RS 4
+@@ -693,8 +656,7 @@ Get the service statistics\&. \fBParamet
+ .RE
+ .PP
+
+-.SS "void qb_ipcs_unref (\fBqb_ipcs_service_t\fP *s)"
+-
++.SS "void \fBqb_ipcs_unref\fP (\fBqb_ipcs_service_t\fP *s)"
+ .PP
+ Decrease the reference counter on the service object\&. \fBParameters:\fP
+ .RS 4
diff --git a/package/libqb/patches/patch-docs_man3_qblist_h_3 b/package/libqb/patches/patch-docs_man3_qblist_h_3
new file mode 100644
index 000000000..114147f8b
--- /dev/null
+++ b/package/libqb/patches/patch-docs_man3_qblist_h_3
@@ -0,0 +1,248 @@
+--- libqb-0.16.0.orig/docs/man3/qblist.h.3 2013-07-25 20:16:18.000000000 +0200
++++ libqb-0.16.0/docs/man3/qblist.h.3 2013-09-09 05:26:31.607808856 +0200
+@@ -1,4 +1,4 @@
+-.TH "qblist.h" 3 "Thu Jul 25 2013" "Version 0.16.0" "libqb" \" -*- nroff -*-
++.TH "qblist.h" 3 "Mon Sep 9 2013" "Version 0.16.0" "libqb" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -21,7 +21,7 @@ This is a kernel style list implementati
+ .RI "struct \fBqb_list_head\fP"
+ .br
+ .in -1c
+-.SS "Macros"
++.SS "Defines"
+
+ .in +1c
+ .ti -1c
+@@ -122,26 +122,23 @@ This is a kernel style list implementati
+
+ \fBAuthor:\fP
+ .RS 4
+-Steven Dake sdake@redhat.com
++Steven Dake <sdake@redhat.com>
+ .RE
+ .PP
+
+-.SH "Macro Definition Documentation"
++.SH "Define Documentation"
+ .PP
+-.SS "#define QB_INIT_LIST_HEAD(ptr)"
+-\fBValue:\fP
++.SS "#define \fBQB_INIT_LIST_HEAD\fP(ptr)"\fBValue:\fP
+ .PP
+ .nf
+ do { \
+ (ptr)->next = (ptr); (ptr)->prev = (ptr); \
+ } while (0)
+ .fi
+-.SS "#define QB_LIST_DECLARE(name) struct \fBqb_list_head\fP name = { &(name), &(name) }"
+-
++.SS "#define \fBQB_LIST_DECLARE\fP(name) struct \fBqb_list_head\fP name = { &(name), &(name) }"
+ .PP
+ Declare and initialize a list head\&.
+-.SS "#define qb_list_entry(ptr, type, member) ((type *)((char *)(ptr)-(char*)(&((type *)0)->member)))"
+-
++.SS "#define \fBqb_list_entry\fP(ptr, type, member) ((type *)((char *)(ptr)-(char*)(&((type *)0)->member)))"
+ .PP
+ Get the struct for this entry\&. \fBParameters:\fP
+ .RS 4
+@@ -153,8 +150,7 @@ Get the struct for this entry\&. \fBPara
+ .RE
+ .PP
+
+-.SS "#define qb_list_first_entry(ptr, type, member) \fBqb_list_entry\fP((ptr)->next, type, member)"
+-
++.SS "#define \fBqb_list_first_entry\fP(ptr, type, member) \fBqb_list_entry\fP((ptr)->next, type, member)"
+ .PP
+ Get the first element from a list\&. \fBParameters:\fP
+ .RS 4
+@@ -166,8 +162,7 @@ Get the first element from a list\&. \fB
+ .RE
+ .PP
+
+-.SS "#define qb_list_for_each(pos, head) for (pos = (head)->next; pos != (head); pos = pos->next)"
+-
++.SS "#define \fBqb_list_for_each\fP(pos, head) for (pos = (head)->next; pos != (head); pos = pos->next)"
+ .PP
+ Iterate over a list\&. \fBParameters:\fP
+ .RS 4
+@@ -179,8 +174,7 @@ Iterate over a list\&. \fBParameters:\fP
+
+ .PP
+ Referenced by qb_list_length()\&.
+-.SS "#define qb_list_for_each_entry(pos, head, member)"
+-\fBValue:\fP
++.SS "#define \fBqb_list_for_each_entry\fP(pos, head, member)"\fBValue:\fP
+ .PP
+ .nf
+ for (pos = qb_list_entry((head)->next, typeof(*pos), member); \
+@@ -198,8 +192,7 @@ Iterate over list of given type\&. \fBPa
+ .RE
+ .PP
+
+-.SS "#define qb_list_for_each_entry_from(pos, head, member)"
+-\fBValue:\fP
++.SS "#define \fBqb_list_for_each_entry_from\fP(pos, head, member)"\fBValue:\fP
+ .PP
+ .nf
+ for (; &pos->member != (head); \
+@@ -216,8 +209,7 @@ Iterate over list of given type from the
+ .RE
+ .PP
+
+-.SS "#define qb_list_for_each_entry_reverse(pos, head, member)"
+-\fBValue:\fP
++.SS "#define \fBqb_list_for_each_entry_reverse\fP(pos, head, member)"\fBValue:\fP
+ .PP
+ .nf
+ for (pos = qb_list_entry((head)->prev, typeof(*pos), member); \
+@@ -235,8 +227,7 @@ Iterate backwards over list of given typ
+ .RE
+ .PP
+
+-.SS "#define qb_list_for_each_entry_safe(pos, n, head, member)"
+-\fBValue:\fP
++.SS "#define \fBqb_list_for_each_entry_safe\fP(pos, n, head, member)"\fBValue:\fP
+ .PP
+ .nf
+ for (pos = qb_list_entry((head)->next, typeof(*pos), member), \
+@@ -257,8 +248,7 @@ Iterate over list of given type safe aga
+ .RE
+ .PP
+
+-.SS "#define qb_list_for_each_entry_safe_reverse(pos, n, head, member)"
+-\fBValue:\fP
++.SS "#define \fBqb_list_for_each_entry_safe_reverse\fP(pos, n, head, member)"\fBValue:\fP
+ .PP
+ .nf
+ for (pos = qb_list_entry((head)->prev, typeof(*pos), member), \
+@@ -279,8 +269,7 @@ Iterate backwards over list safe against
+ .RE
+ .PP
+
+-.SS "#define qb_list_for_each_reverse(pos, head) for (pos = (head)->prev; pos != (head); pos = pos->prev)"
+-
++.SS "#define \fBqb_list_for_each_reverse\fP(pos, head) for (pos = (head)->prev; pos != (head); pos = pos->prev)"
+ .PP
+ Iterate over a list backwards\&. \fBParameters:\fP
+ .RS 4
+@@ -290,8 +279,7 @@ Iterate over a list backwards\&. \fBPara
+ .RE
+ .PP
+
+-.SS "#define qb_list_for_each_safe(pos, n, head)"
+-\fBValue:\fP
++.SS "#define \fBqb_list_for_each_safe\fP(pos, n, head)"\fBValue:\fP
+ .PP
+ .nf
+ for (pos = (head)->next, n = pos->next; pos != (head); \
+@@ -310,8 +298,7 @@ Iterate over a list safe against removal
+
+ .SH "Function Documentation"
+ .PP
+-.SS "static void qb_list_add (struct \fBqb_list_head\fP *element, struct \fBqb_list_head\fP *head)\fC [inline]\fP, \fC [static]\fP"
+-
++.SS "static void \fBqb_list_add\fP (struct \fBqb_list_head\fP *element, struct \fBqb_list_head\fP *head)\fC [inline, static]\fP"
+ .PP
+ Add this element to the list\&. \fBParameters:\fP
+ .RS 4
+@@ -323,8 +310,7 @@ Add this element to the list\&. \fBParam
+
+ .PP
+ References qb_list_head::next, and qb_list_head::prev\&.
+-.SS "static void qb_list_add_tail (struct \fBqb_list_head\fP *element, struct \fBqb_list_head\fP *head)\fC [inline]\fP, \fC [static]\fP"
+-
++.SS "static void \fBqb_list_add_tail\fP (struct \fBqb_list_head\fP *element, struct \fBqb_list_head\fP *head)\fC [inline, static]\fP"
+ .PP
+ Add to the list (but at the end of the list)\&. \fBParameters:\fP
+ .RS 4
+@@ -333,7 +319,7 @@ Add to the list (but at the end of the l
+ \fIhead\fP pointer to the list head
+ .RE
+ .PP
+-\fBSee Also:\fP
++\fBSee also:\fP
+ .RS 4
+ \fBqb_list_add()\fP
+ .RE
+@@ -341,8 +327,7 @@ Add to the list (but at the end of the l
+
+ .PP
+ References qb_list_head::next, and qb_list_head::prev\&.
+-.SS "static void qb_list_del (struct \fBqb_list_head\fP *_remove)\fC [inline]\fP, \fC [static]\fP"
+-
++.SS "static void \fBqb_list_del\fP (struct \fBqb_list_head\fP *_remove)\fC [inline, static]\fP"
+ .PP
+ Delete an entry from the list\&. \fBParameters:\fP
+ .RS 4
+@@ -352,8 +337,7 @@ Delete an entry from the list\&. \fBPara
+
+ .PP
+ References qb_list_head::next, and qb_list_head::prev\&.
+-.SS "static int32_t qb_list_empty (const struct \fBqb_list_head\fP *head)\fC [inline]\fP, \fC [static]\fP"
+-
++.SS "static int32_t \fBqb_list_empty\fP (const struct \fBqb_list_head\fP *head)\fC [inline, static]\fP"
+ .PP
+ A quick test to see if the list is empty (pointing to it's self)\&. \fBParameters:\fP
+ .RS 4
+@@ -370,8 +354,7 @@ boolean true/false
+ References qb_list_head::next\&.
+ .PP
+ Referenced by qb_list_splice(), and qb_list_splice_tail()\&.
+-.SS "static void qb_list_init (struct \fBqb_list_head\fP *head)\fC [inline]\fP, \fC [static]\fP"
+-
++.SS "static void \fBqb_list_init\fP (struct \fBqb_list_head\fP *head)\fC [inline, static]\fP"
+ .PP
+ Initialize the list entry\&. Points next and prev pointers to head\&.
+ .PP
+@@ -383,8 +366,7 @@ Initialize the list entry\&. Points next
+
+ .PP
+ References qb_list_head::next, and qb_list_head::prev\&.
+-.SS "static int qb_list_is_last (const struct \fBqb_list_head\fP *list, const struct \fBqb_list_head\fP *head)\fC [inline]\fP, \fC [static]\fP"
+-
++.SS "static int \fBqb_list_is_last\fP (const struct \fBqb_list_head\fP *list, const struct \fBqb_list_head\fP *head)\fC [inline, static]\fP"
+ .PP
+ Tests whether list is the last entry in list head\&. \fBParameters:\fP
+ .RS 4
+@@ -401,8 +383,7 @@ boolean true/false
+
+ .PP
+ References qb_list_head::next\&.
+-.SS "static int32_t qb_list_length (struct \fBqb_list_head\fP *head)\fC [inline]\fP, \fC [static]\fP"
+-
++.SS "static int32_t \fBqb_list_length\fP (struct \fBqb_list_head\fP *head)\fC [inline, static]\fP"
+ .PP
+ Count the number of items in the list\&. \fBParameters:\fP
+ .RS 4
+@@ -417,8 +398,7 @@ length of the list\&.
+
+ .PP
+ References qb_list_for_each\&.
+-.SS "static void qb_list_replace (struct \fBqb_list_head\fP *old, struct \fBqb_list_head\fP *new)\fC [inline]\fP, \fC [static]\fP"
+-
++.SS "static void \fBqb_list_replace\fP (struct \fBqb_list_head\fP *old, struct \fBqb_list_head\fP *new)\fC [inline, static]\fP"
+ .PP
+ Replace old entry by new one\&. \fBParameters:\fP
+ .RS 4
+@@ -430,8 +410,7 @@ Replace old entry by new one\&. \fBParam
+
+ .PP
+ References qb_list_head::next, and qb_list_head::prev\&.
+-.SS "static void qb_list_splice (struct \fBqb_list_head\fP *list, struct \fBqb_list_head\fP *head)\fC [inline]\fP, \fC [static]\fP"
+-
++.SS "static void \fBqb_list_splice\fP (struct \fBqb_list_head\fP *list, struct \fBqb_list_head\fP *head)\fC [inline, static]\fP"
+ .PP
+ Join two lists\&. \fBParameters:\fP
+ .RS 4
+@@ -448,8 +427,7 @@ The 'list' is reinitialised
+
+ .PP
+ References qb_list_head::next, qb_list_head::prev, and qb_list_empty()\&.
+-.SS "static void qb_list_splice_tail (struct \fBqb_list_head\fP *list, struct \fBqb_list_head\fP *head)\fC [inline]\fP, \fC [static]\fP"
+-
++.SS "static void \fBqb_list_splice_tail\fP (struct \fBqb_list_head\fP *list, struct \fBqb_list_head\fP *head)\fC [inline, static]\fP"
+ .PP
+ Join two lists, each list being a queue\&. \fBParameters:\fP
+ .RS 4
diff --git a/package/libqb/patches/patch-docs_man3_qblog_h_3 b/package/libqb/patches/patch-docs_man3_qblog_h_3
new file mode 100644
index 000000000..de83d0f86
--- /dev/null
+++ b/package/libqb/patches/patch-docs_man3_qblog_h_3
@@ -0,0 +1,649 @@
+--- libqb-0.16.0.orig/docs/man3/qblog.h.3 2013-07-25 20:16:18.000000000 +0200
++++ libqb-0.16.0/docs/man3/qblog.h.3 2013-09-09 05:26:31.703807649 +0200
+@@ -1,4 +1,4 @@
+-.TH "qblog.h" 3 "Thu Jul 25 2013" "Version 0.16.0" "libqb" \" -*- nroff -*-
++.TH "qblog.h" 3 "Mon Sep 9 2013" "Version 0.16.0" "libqb" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -36,7 +36,7 @@ The logging API provides four main parts
+ .br
+ .RI "\fIAn instance of this structure is created in a special ELF section at every dynamic debug callsite\&. \fP"
+ .in -1c
+-.SS "Macros"
++.SS "Defines"
+
+ .in +1c
+ .ti -1c
+@@ -117,7 +117,7 @@ The logging API provides four main parts
+
+ .in +1c
+ .ti -1c
+-.RI "enum \fBqb_log_target_state\fP { \fBQB_LOG_STATE_UNUSED\fP = 1, \fBQB_LOG_STATE_DISABLED\fP = 2, \fBQB_LOG_STATE_ENABLED\fP = 3 }"
++.RI "enum \fBqb_log_target_state\fP { \fBQB_LOG_STATE_UNUSED\fP = 1, \fBQB_LOG_STATE_DISABLED\fP = 2, \fBQB_LOG_STATE_ENABLED\fP = 3 }"
+ .br
+ .ti -1c
+ .RI "enum \fBqb_log_conf\fP { \fBQB_LOG_CONF_ENABLED\fP, \fBQB_LOG_CONF_FACILITY\fP, \fBQB_LOG_CONF_DEBUG\fP, \fBQB_LOG_CONF_SIZE\fP, \fBQB_LOG_CONF_THREADED\fP, \fBQB_LOG_CONF_PRIORITY_BUMP\fP, \fBQB_LOG_CONF_STATE_GET\fP, \fBQB_LOG_CONF_FILE_SYNC\fP }"
+@@ -294,13 +294,13 @@ Call \fBqb_log()\fP to generate a log me
+ Simplist possible use:
+ .PP
+ .nf
+-main() {
+- qb_log_init('simple-log', LOG_DAEMON, LOG_INFO);
++ main() {
++ qb_log_init('simple-log', LOG_DAEMON, LOG_INFO);
+ // \&.\&.\&.
+- qb_log(LOG_WARNING, 'watch out');
++ qb_log(LOG_WARNING, 'watch out');
+ // \&.\&.\&.
+- qb_log_fini();
+-}
++ qb_log_fini();
++ }
+
+ .fi
+ .PP
+@@ -313,7 +313,7 @@ A log target can by syslog, stderr, the
+ To enable a target do the following
+ .PP
+ .nf
+-qb_log_ctl(QB_LOG_BLACKBOX, QB_LOG_CONF_ENABLED, QB_TRUE);
++ qb_log_ctl(QB_LOG_BLACKBOX, QB_LOG_CONF_ENABLED, QB_TRUE);
+
+ .fi
+ .PP
+@@ -321,8 +321,8 @@ qb_log_ctl(QB_LOG_BLACKBOX, QB_LOG_CONF_
+ syslog, stderr and the blackbox are static (they don't need to be created, just enabled or disabled\&. However you can open multiple logfiles (32 - QB_LOG_BLACKBOX)\&. To do this use the following code\&.
+ .PP
+ .nf
+-mytarget = qb_log_file_open('/var/log/mylogfile');
+-qb_log_ctl(mytarget, QB_LOG_CONF_ENABLED, QB_TRUE);
++ mytarget = qb_log_file_open('/var/log/mylogfile');
++ qb_log_ctl(mytarget, QB_LOG_CONF_ENABLED, QB_TRUE);
+
+ .fi
+ .PP
+@@ -330,7 +330,7 @@ qb_log_ctl(mytarget, QB_LOG_CONF_ENABLED
+ Once your targets are enabled/opened you can configure them as follows: Configure the size of blackbox
+ .PP
+ .nf
+-qb_log_ctl(QB_LOG_BLACKBOX, QB_LOG_CONF_SIZE, 1024*10);
++ qb_log_ctl(QB_LOG_BLACKBOX, QB_LOG_CONF_SIZE, 1024*10);
+
+ .fi
+ .PP
+@@ -338,7 +338,7 @@ qb_log_ctl(QB_LOG_BLACKBOX, QB_LOG_CONF_
+ Make logging to file threaded:
+ .PP
+ .nf
+-qb_log_ctl(mytarget, QB_LOG_CONF_THREADED, QB_TRUE);
++ qb_log_ctl(mytarget, QB_LOG_CONF_THREADED, QB_TRUE);
+
+ .fi
+ .PP
+@@ -346,8 +346,8 @@ qb_log_ctl(mytarget, QB_LOG_CONF_THREADE
+ To workaround your syslog daemon filtering all messages > LOG_INFO
+ .PP
+ .nf
+-qb_log_ctl(QB_LOG_SYSLOG, QB_LOG_CONF_PRIORITY_BUMP,
+- LOG_INFO - LOG_DEBUG);
++ qb_log_ctl(QB_LOG_SYSLOG, QB_LOG_CONF_PRIORITY_BUMP,
++ LOG_INFO - LOG_DEBUG);
+
+ .fi
+ .PP
+@@ -355,7 +355,7 @@ qb_log_ctl(QB_LOG_SYSLOG, QB_LOG_CONF_PR
+ To ensure all logs to file targets are fsync'ed (default QB_FALSE)
+ .PP
+ .nf
+-qb_log_ctl(mytarget, QB_LOG_CONF_FILE_SYNC, QB_TRUE);
++ qb_log_ctl(mytarget, QB_LOG_CONF_FILE_SYNC, QB_TRUE);
+
+ .fi
+ .PP
+@@ -375,8 +375,8 @@ format string + priority
+ So to make all logs from evil_fnunction() go to stderr do the following:
+ .PP
+ .nf
+-qb_log_filter_ctl(QB_LOG_STDERR, QB_LOG_FILTER_ADD,
+- QB_LOG_FILTER_FUNCTION, 'evil_fnunction', LOG_TRACE);
++ qb_log_filter_ctl(QB_LOG_STDERR, QB_LOG_FILTER_ADD,
++ QB_LOG_FILTER_FUNCTION, 'evil_fnunction', LOG_TRACE);
+
+ .fi
+ .PP
+@@ -384,8 +384,8 @@ qb_log_filter_ctl(QB_LOG_STDERR, QB_LOG_
+ So to make all logs from totem* (with a priority <= LOG_INFO) go to stderr do the following:
+ .PP
+ .nf
+-qb_log_filter_ctl(QB_LOG_STDERR, QB_LOG_FILTER_ADD,
+- QB_LOG_FILTER_FILE, 'totem', LOG_INFO);
++ qb_log_filter_ctl(QB_LOG_STDERR, QB_LOG_FILTER_ADD,
++ QB_LOG_FILTER_FILE, 'totem', LOG_INFO);
+
+ .fi
+ .PP
+@@ -393,8 +393,8 @@ qb_log_filter_ctl(QB_LOG_STDERR, QB_LOG_
+ So to make all logs with the substring 'ringbuffer' go to stderr do the following:
+ .PP
+ .nf
+-qb_log_filter_ctl(QB_LOG_STDERR, QB_LOG_FILTER_ADD,
+- QB_LOG_FILTER_FORMAT, 'ringbuffer', LOG_TRACE);
++ qb_log_filter_ctl(QB_LOG_STDERR, QB_LOG_FILTER_ADD,
++ QB_LOG_FILTER_FORMAT, 'ringbuffer', LOG_TRACE);
+
+ .fi
+ .PP
+@@ -407,18 +407,18 @@ To achieve non-blocking logging you can
+ Threaded logging use:
+ .PP
+ .nf
+-main() {
+- qb_log_init('simple-log', LOG_DAEMON, LOG_INFO);
+- qb_log_ctl(QB_LOG_SYSLOG, QB_LOG_CONF_THREADED, QB_TRUE);
++ main() {
++ qb_log_init('simple-log', LOG_DAEMON, LOG_INFO);
++ qb_log_ctl(QB_LOG_SYSLOG, QB_LOG_CONF_THREADED, QB_TRUE);
+ // \&.\&.\&.
+ daemonize();
+ // call this after you fork()
+ qb_log_thread_start();
+ // \&.\&.\&.
+- qb_log(LOG_WARNING, 'watch out');
++ qb_log(LOG_WARNING, 'watch out');
+ // \&.\&.\&.
+- qb_log_fini();
+-}
++ qb_log_fini();
++ }
+
+ .fi
+ .PP
+@@ -436,28 +436,28 @@ the blackbox is not enabled by default\&
+ Blackbox usage:
+ .PP
+ .nf
+-static void sigsegv_handler(int sig)
+-{
++ static void sigsegv_handler(int sig)
++ {
+ (void)signal (SIGSEGV, SIG_DFL);
+ qb_log_blackbox_write_to_file('simple-log\&.fdata');
+ qb_log_fini();
+ raise(SIGSEGV);
+-}
++ }
+
+-main() {
++ main() {
+
+- signal(SIGSEGV, sigsegv_handler);
++ signal(SIGSEGV, sigsegv_handler);
+
+- qb_log_init('simple-log', LOG_DAEMON, LOG_INFO);
+- qb_log_filter_ctl(QB_LOG_BLACKBOX, QB_LOG_FILTER_ADD,
+- QB_LOG_FILTER_FILE, '*', LOG_DEBUG);
+- qb_log_ctl(QB_LOG_BLACKBOX, QB_LOG_CONF_SIZE, 1024*10);
+- qb_log_ctl(QB_LOG_BLACKBOX, QB_LOG_CONF_ENABLED, QB_TRUE);
++ qb_log_init('simple-log', LOG_DAEMON, LOG_INFO);
++ qb_log_filter_ctl(QB_LOG_BLACKBOX, QB_LOG_FILTER_ADD,
++ QB_LOG_FILTER_FILE, '*', LOG_DEBUG);
++ qb_log_ctl(QB_LOG_BLACKBOX, QB_LOG_CONF_SIZE, 1024*10);
++ qb_log_ctl(QB_LOG_BLACKBOX, QB_LOG_CONF_ENABLED, QB_TRUE);
+ // \&.\&.\&.
+- qb_log(LOG_WARNING, 'watch out');
++ qb_log(LOG_WARNING, 'watch out');
+ // \&.\&.\&.
+- qb_log_fini();
+-}
++ qb_log_fini();
++ }
+
+ .fi
+ .PP
+@@ -469,7 +469,7 @@ You can tag messages using the second ar
+ .PP
+ .PP
+ .nf
+-const char* my_tags_stringify(uint32_t tags) {
++ const char* my_tags_stringify(uint32_t tags) {
+ if (qb_bit_is_set(tags, QB_LOG_TAG_LIBQB_MSG_BIT) {
+ return 'libqb';
+ } else if (tags == 3) {
+@@ -477,37 +477,33 @@ const char* my_tags_stringify(uint32_t t
+ } else {
+ return 'MAIN';
+ }
+-}
+-main() {
++ }
++ main() {
+ // \&.\&.\&.
+ qb_log_tags_stringify_fn_set(my_tags_stringify);
+ qb_log_format_set(QB_LOG_STDERR, '[%5g] %p %b');
+ // \&.\&.\&.
+ qb_logt(LOG_INFO, 3, 'hello');
+ qb_logt(LOG_INFO, 0, 'hello');
+-}
++ }
+ .fi
+ .PP
+ The code above will produce:
+ .PP
+ .nf
+-[libqb] some message
+-[three] info hello
+-[MAIN ] info hello
++ [libqb] some message
++ [three] info hello
++ [MAIN ] info hello
+
+ .fi
+ .PP
+
+-.SH "Macro Definition Documentation"
++.SH "Define Documentation"
+ .PP
+-.SS "#define LOG_TRACE (LOG_DEBUG + 1)"
+-
+-.SS "#define qb_enter() \fBqb_log\fP(\fBLOG_TRACE\fP, 'ENTERING %s()', __func__)"
+-
+-.SS "#define qb_leave() \fBqb_log\fP(\fBLOG_TRACE\fP, 'LEAVING %s()', __func__)"
+-
+-.SS "#define qb_log(\fBpriority\fP, fmt, args\&.\&.\&.) \fBqb_logt\fP(\fBpriority\fP, 0, fmt, ##args)"
+-
++.SS "#define \fBLOG_TRACE\fP (LOG_DEBUG + 1)"
++.SS "#define \fBqb_enter\fP() \fBqb_log\fP(\fBLOG_TRACE\fP, 'ENTERING %s()', __func__)"
++.SS "#define \fBqb_leave\fP() \fBqb_log\fP(\fBLOG_TRACE\fP, 'LEAVING %s()', __func__)"
++.SS "#define \fBqb_log\fP(\fBpriority\fP, fmt, args\&.\&.\&.) \fBqb_logt\fP(\fBpriority\fP, 0, fmt, ##args)"
+ .PP
+ This is the main function to generate a log message\&. \fBParameters:\fP
+ .RS 4
+@@ -519,34 +515,23 @@ This is the main function to generate a
+ .RE
+ .PP
+
+-.SS "#define QB_LOG_BLACKBOX 2"
+-
+-.SS "#define QB_LOG_INIT_DATA(name)"
+-\fBValue:\fP
++.SS "#define \fBQB_LOG_BLACKBOX\fP 2"
++.SS "#define \fBQB_LOG_INIT_DATA\fP(name)"\fBValue:\fP
+ .PP
+ .nf
+ void name(void); \
+ void name(void) { if (__start___verbose != __stop___verbose) {assert(1);} } \
+ void __attribute__ ((constructor)) name(void);
+ .fi
+-.SS "#define QB_LOG_MAX_LEN 512"
+-
+-.SS "#define QB_LOG_STDERR 1"
+-
+-.SS "#define QB_LOG_STDOUT 3"
+-
+-.SS "#define QB_LOG_STRERROR_MAX_LEN 128"
+-
+-.SS "#define QB_LOG_SYSLOG 0"
+-
+-.SS "#define QB_LOG_TAG_LIBQB_MSG (1 << \fBQB_LOG_TAG_LIBQB_MSG_BIT\fP)"
+-
+-.SS "#define QB_LOG_TAG_LIBQB_MSG_BIT 31"
+-
+-.SS "#define QB_LOG_TARGET_MAX 32"
+-
+-.SS "#define qb_logt(\fBpriority\fP, \fBtags\fP, fmt, args\&.\&.\&.)"
+-\fBValue:\fP
++.SS "#define \fBQB_LOG_MAX_LEN\fP 512"
++.SS "#define \fBQB_LOG_STDERR\fP 1"
++.SS "#define \fBQB_LOG_STDOUT\fP 3"
++.SS "#define \fBQB_LOG_STRERROR_MAX_LEN\fP 128"
++.SS "#define \fBQB_LOG_SYSLOG\fP 0"
++.SS "#define \fBQB_LOG_TAG_LIBQB_MSG\fP (1 << \fBQB_LOG_TAG_LIBQB_MSG_BIT\fP)"
++.SS "#define \fBQB_LOG_TAG_LIBQB_MSG_BIT\fP 31"
++.SS "#define \fBQB_LOG_TARGET_MAX\fP 32"
++.SS "#define \fBqb_logt\fP(\fBpriority\fP, \fBtags\fP, fmt, args\&.\&.\&.)"\fBValue:\fP
+ .PP
+ .nf
+ do { \
+@@ -569,8 +554,7 @@ This is the function to generate a log m
+ .RE
+ .PP
+
+-.SS "#define qb_perror(\fBpriority\fP, fmt, args\&.\&.\&.)"
+-\fBValue:\fP
++.SS "#define \fBqb_perror\fP(\fBpriority\fP, fmt, args\&.\&.\&.)"\fBValue:\fP
+ .PP
+ .nf
+ do { \
+@@ -592,24 +576,17 @@ This is similar to perror except it goes
+
+ .SH "Typedef Documentation"
+ .PP
+-.SS "typedef void(* qb_log_close_fn)(int32_t t)"
+-
+-.SS "typedef void(* qb_log_filter_fn)(struct \fBqb_log_callsite\fP *cs)"
+-
+-.SS "typedef void(* qb_log_logger_fn)(int32_t t, struct \fBqb_log_callsite\fP *cs, time_t timestamp, const char *msg)"
+-
+-.SS "typedef void(* qb_log_reload_fn)(int32_t t)"
+-
+-.SS "typedef const char*(* qb_log_tags_stringify_fn)(uint32_t \fBtags\fP)"
+-
+-.SS "typedef void(* qb_log_vlogger_fn)(int32_t t, struct \fBqb_log_callsite\fP *cs, time_t timestamp, va_list ap)"
+-
++.SS "typedef void(* \fBqb_log_close_fn\fP)(int32_t t)"
++.SS "typedef void(* \fBqb_log_filter_fn\fP)(struct \fBqb_log_callsite\fP *cs)"
++.SS "typedef void(* \fBqb_log_logger_fn\fP)(int32_t t, struct \fBqb_log_callsite\fP *cs, time_t timestamp, const char *msg)"
++.SS "typedef void(* \fBqb_log_reload_fn\fP)(int32_t t)"
++.SS "typedef const char*(* \fBqb_log_tags_stringify_fn\fP)(uint32_t \fBtags\fP)"
++.SS "typedef void(* \fBqb_log_vlogger_fn\fP)(int32_t t, struct \fBqb_log_callsite\fP *cs, time_t timestamp, va_list ap)"
+ .SH "Enumeration Type Documentation"
+ .PP
+ .SS "enum \fBqb_log_conf\fP"
+-
+ .PP
+-\fBEnumerator\fP
++\fBEnumerator: \fP
+ .in +1c
+ .TP
+ \fB\fIQB_LOG_CONF_ENABLED \fP\fP
+@@ -627,10 +604,10 @@ This is similar to perror except it goes
+ \fB\fIQB_LOG_CONF_STATE_GET \fP\fP
+ .TP
+ \fB\fIQB_LOG_CONF_FILE_SYNC \fP\fP
+-.SS "enum \fBqb_log_filter_conf\fP"
+
++.SS "enum \fBqb_log_filter_conf\fP"
+ .PP
+-\fBEnumerator\fP
++\fBEnumerator: \fP
+ .in +1c
+ .TP
+ \fB\fIQB_LOG_FILTER_ADD \fP\fP
+@@ -644,10 +621,10 @@ This is similar to perror except it goes
+ \fB\fIQB_LOG_TAG_CLEAR \fP\fP
+ .TP
+ \fB\fIQB_LOG_TAG_CLEAR_ALL \fP\fP
+-.SS "enum \fBqb_log_filter_type\fP"
+
++.SS "enum \fBqb_log_filter_type\fP"
+ .PP
+-\fBEnumerator\fP
++\fBEnumerator: \fP
+ .in +1c
+ .TP
+ \fB\fIQB_LOG_FILTER_FILE \fP\fP
+@@ -655,10 +632,10 @@ This is similar to perror except it goes
+ \fB\fIQB_LOG_FILTER_FUNCTION \fP\fP
+ .TP
+ \fB\fIQB_LOG_FILTER_FORMAT \fP\fP
+-.SS "enum \fBqb_log_target_state\fP"
+
++.SS "enum \fBqb_log_target_state\fP"
+ .PP
+-\fBEnumerator\fP
++\fBEnumerator: \fP
+ .in +1c
+ .TP
+ \fB\fIQB_LOG_STATE_UNUSED \fP\fP
+@@ -666,20 +643,17 @@ This is similar to perror except it goes
+ \fB\fIQB_LOG_STATE_DISABLED \fP\fP
+ .TP
+ \fB\fIQB_LOG_STATE_ENABLED \fP\fP
++
+ .SH "Function Documentation"
+ .PP
+-.SS "struct \fBqb_log_callsite\fP __attribute__ ((aligned(8)))"
+-
+-.SS "void qb_log_blackbox_print_from_file (const char *filename)"
+-
++.SS "struct \fBqb_log_callsite\fP \fB__attribute__\fP ((aligned(8)))"
++.SS "void \fBqb_log_blackbox_print_from_file\fP (const char *filename)"
+ .PP
+ Read the blackbox for file and print it out\&.
+-.SS "ssize_t qb_log_blackbox_write_to_file (const char *filename)"
+-
++.SS "ssize_t \fBqb_log_blackbox_write_to_file\fP (const char *filename)"
+ .PP
+ Write the blackbox to file\&.
+-.SS "struct \fBqb_log_callsite\fP* qb_log_callsite_get (const char *function, const char *filename, const char *format, uint8_tpriority, uint32_tlineno, uint32_ttags)\fC [read]\fP"
+-
++.SS "struct \fBqb_log_callsite\fP* \fBqb_log_callsite_get\fP (const char *function, const char *filename, const char *format, uint8_tpriority, uint32_tlineno, uint32_ttags)\fC [read]\fP"
+ .PP
+ Get or create a callsite at the give position\&. The result can then be passed into \fBqb_log_real_()\fP
+ .PP
+@@ -699,23 +673,20 @@ Get or create a callsite at the give pos
+ .RE
+ .PP
+
+-.SS "void qb_log_callsites_dump (void)"
+-
++.SS "void \fBqb_log_callsites_dump\fP (void)"
+ .PP
+ Dump the callsite info to stdout\&.
+-.SS "int32_t qb_log_callsites_register (struct \fBqb_log_callsite\fP *_start, struct \fBqb_log_callsite\fP *_stop)"
+-
++.SS "int32_t \fBqb_log_callsites_register\fP (struct \fBqb_log_callsite\fP *_start, struct \fBqb_log_callsite\fP *_stop)"
+ .PP
+ If you are using dynamically loadable modules via dlopen() and you load them after \fBqb_log_init()\fP then after you load the module you will need to do the following to get the filters to work in that module\&. .PP
+ .nf
+- _start = dlsym (dl_handle, '__start___verbose');
+-_stop = dlsym (dl_handle, '__stop___verbose');
+-qb_log_callsites_register(_start, _stop);
++ _start = dlsym (dl_handle, '__start___verbose');
++ _stop = dlsym (dl_handle, '__stop___verbose');
++ qb_log_callsites_register(_start, _stop);
+ .fi
+ .PP
+
+-.SS "int32_t qb_log_ctl (int32_ttarget, enum \fBqb_log_conf\fPconf_type, int32_targ)"
+-
++.SS "int32_t \fBqb_log_ctl\fP (int32_ttarget, enum \fBqb_log_conf\fPconf_type, int32_targ)"
+ .PP
+ Main logging control function\&. \fBParameters:\fP
+ .RS 4
+@@ -726,7 +697,7 @@ Main logging control function\&. \fBPara
+ \fIarg\fP the new value
+ .RE
+ .PP
+-\fBSee Also:\fP
++\fBSee also:\fP
+ .RS 4
+ \fBqb_log_conf\fP
+ .RE
+@@ -741,12 +712,10 @@ Main logging control function\&. \fBPara
+ .RE
+ .PP
+
+-.SS "void qb_log_custom_close (int32_tt)"
+-
++.SS "void \fBqb_log_custom_close\fP (int32_tt)"
+ .PP
+ Close a custom log target and release is resources\&.
+-.SS "int32_t qb_log_custom_open (\fBqb_log_logger_fn\fPlog_fn, \fBqb_log_close_fn\fPclose_fn, \fBqb_log_reload_fn\fPreload_fn, void *user_data)"
+-
++.SS "int32_t \fBqb_log_custom_open\fP (\fBqb_log_logger_fn\fPlog_fn, \fBqb_log_close_fn\fPclose_fn, \fBqb_log_reload_fn\fPreload_fn, void *user_data)"
+ .PP
+ Open a custom log target\&. \fBReturn values:\fP
+ .RS 4
+@@ -756,20 +725,16 @@ Open a custom log target\&. \fBReturn va
+ .RE
+ .PP
+
+-.SS "int32_t qb_log_facility2int (const char *fname)"
+-
++.SS "int32_t \fBqb_log_facility2int\fP (const char *fname)"
+ .PP
+ Convert string 'auth' to equivalent number 'LOG_AUTH' etc\&.
+-.SS "const char* qb_log_facility2str (int32_tfnum)"
+-
++.SS "const char* \fBqb_log_facility2str\fP (int32_tfnum)"
+ .PP
+ Convert number 'LOG_AUTH' to equivalent string 'auth' etc\&.
+-.SS "void qb_log_file_close (int32_tt)"
+-
++.SS "void \fBqb_log_file_close\fP (int32_tt)"
+ .PP
+ Close a log file and release is resources\&.
+-.SS "int32_t qb_log_file_open (const char *filename)"
+-
++.SS "int32_t \fBqb_log_file_open\fP (const char *filename)"
+ .PP
+ Open a log file\&. \fBReturn values:\fP
+ .RS 4
+@@ -779,22 +744,19 @@ Open a log file\&. \fBReturn values:\fP
+ .RE
+ .PP
+
+-.SS "int32_t qb_log_filter_ctl (int32_tvalue, enum \fBqb_log_filter_conf\fPc, enum \fBqb_log_filter_type\fPtype, const char *text, uint8_tlow_priority)"
+-
++.SS "int32_t \fBqb_log_filter_ctl\fP (int32_tvalue, enum \fBqb_log_filter_conf\fPc, enum \fBqb_log_filter_type\fPtype, const char *text, uint8_tlow_priority)"
+ .PP
+ This allows you modify the 'tags' and 'targets' callsite fields at runtime\&.
+-.SS "int32_t qb_log_filter_ctl2 (int32_tvalue, enum \fBqb_log_filter_conf\fPc, enum \fBqb_log_filter_type\fPtype, const char *text, uint8_thigh_priority, uint8_tlow_priority)"
+-
++.SS "int32_t \fBqb_log_filter_ctl2\fP (int32_tvalue, enum \fBqb_log_filter_conf\fPc, enum \fBqb_log_filter_type\fPtype, const char *text, uint8_thigh_priority, uint8_tlow_priority)"
+ .PP
+ This extends \fBqb_log_filter_ctl()\fP by been able to provide a high_priority\&.
+-.SS "int32_t qb_log_filter_fn_set (\fBqb_log_filter_fn\fPfn)"
+-
++.SS "int32_t \fBqb_log_filter_fn_set\fP (\fBqb_log_filter_fn\fPfn)"
+ .PP
+ Instead of using the \fBqb_log_filter_ctl()\fP functions you can apply the filters manually by defining a callback and setting the targets field using \fBqb_bit_set()\fP and \fBqb_bit_clear()\fP like the following below\&. .PP
+ .nf
+-static void
+-m_filter(struct qb_log_callsite *cs)
+-{
++ static void
++ m_filter(struct qb_log_callsite *cs)
++ {
+ if ((cs->priority >= LOG_ALERT &&
+ cs->priority <= LOG_DEBUG) &&
+ strcmp(cs->filename, 'my_c_file\&.c') == 0) {
+@@ -802,22 +764,19 @@ m_filter(struct qb_log_callsite *cs)
+ } else {
+ qb_bit_clear(cs->targets, QB_LOG_SYSLOG);
+ }
+-}
++ }
+ .fi
+ .PP
+
+-.SS "void qb_log_fini (void)"
+-
++.SS "void \fBqb_log_fini\fP (void)"
+ .PP
+ Logging system finalization function\&. It releases any shared memory\&. Stops the logging thread if running\&. Flushes the last message to their destinations\&.
+-.SS "void qb_log_format_set (int32_tt, const char *format)"
+-
++.SS "void \fBqb_log_format_set\fP (int32_tt, const char *format)"
+ .PP
+ Set the format specifiers\&. n FUNCTION NAME f FILENAME l FILELINE p PRIORITY t TIMESTAMP b BUFFER g TAGS N name (passed into qb_log_init) P PID H hostname
+ .PP
+ any number between % and character specify field length to pad or chop
+-.SS "void qb_log_from_external_source (const char *function, const char *filename, const char *format, uint8_tpriority, uint32_tlineno, uint32_ttags, \&.\&.\&.)"
+-
++.SS "void \fBqb_log_from_external_source\fP (const char *function, const char *filename, const char *format, uint8_tpriority, uint32_tlineno, uint32_ttags, \&.\&.\&.)"
+ .PP
+ This function is to import logs from other code (like libraries) that provide a callback with their logs\&. \fBNote:\fP
+ .RS 4
+@@ -840,10 +799,8 @@ the performance of this will not impress
+ .RE
+ .PP
+
+-.SS "void qb_log_from_external_source_va (const char *function, const char *filename, const char *format, uint8_tpriority, uint32_tlineno, uint32_ttags, va_listap)"
+-
+-.SS "void qb_log_init (const char *name, int32_tfacility, uint8_tpriority)"
+-
++.SS "void \fBqb_log_from_external_source_va\fP (const char *function, const char *filename, const char *format, uint8_tpriority, uint32_tlineno, uint32_ttags, va_listap)"
++.SS "void \fBqb_log_init\fP (const char *name, int32_tfacility, uint8_tpriority)"
+ .PP
+ Init the logging system\&. \fBParameters:\fP
+ .RS 4
+@@ -855,26 +812,20 @@ Init the logging system\&. \fBParameters
+ .RE
+ .PP
+
+-.SS "void qb_log_real_ (struct \fBqb_log_callsite\fP *cs, \&.\&.\&.)"
+-
++.SS "void \fBqb_log_real_\fP (struct \fBqb_log_callsite\fP *cs, \&.\&.\&.)"
+ .PP
+ Internal function: use \fBqb_log()\fP or \fBqb_logt()\fP
+-.SS "void qb_log_real_va_ (struct \fBqb_log_callsite\fP *cs, va_listap)"
+-
+-.SS "void qb_log_tags_stringify_fn_set (\fBqb_log_tags_stringify_fn\fPfn)"
+-
++.SS "void \fBqb_log_real_va_\fP (struct \fBqb_log_callsite\fP *cs, va_listap)"
++.SS "void \fBqb_log_tags_stringify_fn_set\fP (\fBqb_log_tags_stringify_fn\fPfn)"
+ .PP
+ Set the callback to map the 'tags' bit map to a string\&.
+-.SS "void qb_log_target_format (int32_ttarget, struct \fBqb_log_callsite\fP *cs, time_ttimestamp, const char *formatted_message, char *output_buffer)"
+-
++.SS "void \fBqb_log_target_format\fP (int32_ttarget, struct \fBqb_log_callsite\fP *cs, time_ttimestamp, const char *formatted_message, char *output_buffer)"
+ .PP
+ format the callsite and timestamp info according to the format set using \fBqb_log_format_set()\fP It is intended to be used from your custom logger function\&.
+-.SS "void* qb_log_target_user_data_get (int32_tt)"
+-
++.SS "void* \fBqb_log_target_user_data_get\fP (int32_tt)"
+ .PP
+ Retrieve the user data set by either qb_log_custom_open or qb_log_target_user_data_set\&.
+-.SS "int32_t qb_log_target_user_data_set (int32_tt, void *user_data)"
+-
++.SS "int32_t \fBqb_log_target_user_data_set\fP (int32_tt, void *user_data)"
+ .PP
+ Associate user data with this log target\&. \fBNote:\fP
+ .RS 4
+@@ -882,8 +833,7 @@ only use this with custom targets
+ .RE
+ .PP
+
+-.SS "int32_t qb_log_thread_priority_set (int32_tpolicy, int32_tpriority)"
+-
++.SS "int32_t \fBqb_log_thread_priority_set\fP (int32_tpolicy, int32_tpriority)"
+ .PP
+ When using threaded logging set the pthread policy and priority\&. \fBReturn values:\fP
+ .RS 4
+@@ -893,32 +843,21 @@ When using threaded logging set the pthr
+ .RE
+ .PP
+
+-.SS "int32_t qb_log_thread_start (void)"
+-
++.SS "int32_t \fBqb_log_thread_start\fP (void)"
+ .PP
+ Start the logging pthread\&.
+ .SH "Variable Documentation"
+ .PP
+-.SS "enum \fBqb_log_target_state\fP __attribute__"
+-
+-.SS "struct \fBqb_log_callsite\fP __start___verbose[]"
+-
+-.SS "struct \fBqb_log_callsite\fP __stop___verbose[]"
+-
+-.SS "const char* filename"
+-
+-.SS "const char* format"
+-
+-.SS "const char* function"
+-
+-.SS "uint32_t lineno"
+-
+-.SS "uint8_t priority"
+-
+-.SS "uint32_t tags"
+-
+-.SS "uint32_t targets"
+-
++.SS "enum \fBqb_log_target_state\fP \fB__attribute__\fP"
++.SS "struct \fBqb_log_callsite\fP \fB__start___verbose\fP[]"
++.SS "struct \fBqb_log_callsite\fP \fB__stop___verbose\fP[]"
++.SS "const char* \fBfilename\fP"
++.SS "const char* \fBformat\fP"
++.SS "const char* \fBfunction\fP"
++.SS "uint32_t \fBlineno\fP"
++.SS "uint8_t \fBpriority\fP"
++.SS "uint32_t \fBtags\fP"
++.SS "uint32_t \fBtargets\fP"
+ .SH "Author"
+ .PP
+ Generated automatically by Doxygen for libqb from the source code\&.
diff --git a/package/libqb/patches/patch-docs_man3_qbloop_h_3 b/package/libqb/patches/patch-docs_man3_qbloop_h_3
new file mode 100644
index 000000000..51574be49
--- /dev/null
+++ b/package/libqb/patches/patch-docs_man3_qbloop_h_3
@@ -0,0 +1,222 @@
+--- libqb-0.16.0.orig/docs/man3/qbloop.h.3 2013-07-25 20:16:18.000000000 +0200
++++ libqb-0.16.0/docs/man3/qbloop.h.3 2013-09-09 05:26:31.751807045 +0200
+@@ -1,4 +1,4 @@
+-.TH "qbloop.h" 3 "Thu Jul 25 2013" "Version 0.16.0" "libqb" \" -*- nroff -*-
++.TH "qbloop.h" 3 "Mon Sep 9 2013" "Version 0.16.0" "libqb" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -47,7 +47,7 @@ Main loop manages timers, jobs and polli
+
+ .in +1c
+ .ti -1c
+-.RI "enum \fBqb_loop_priority\fP { \fBQB_LOOP_LOW\fP = 0, \fBQB_LOOP_MED\fP = 1, \fBQB_LOOP_HIGH\fP = 2 }"
++.RI "enum \fBqb_loop_priority\fP { \fBQB_LOOP_LOW\fP = 0, \fBQB_LOOP_MED\fP = 1, \fBQB_LOOP_HIGH\fP = 2 }"
+ .br
+ .RI "\fIPriorites for jobs, timers & poll\&. \fP"
+ .in -1c
+@@ -129,32 +129,23 @@ Main loop manages timers, jobs and polli
+
+ .SH "Typedef Documentation"
+ .PP
+-.SS "typedef void(* qb_loop_job_dispatch_fn)(void *data)"
+-
+-.SS "typedef int32_t(* qb_loop_poll_dispatch_fn)(int32_t fd, int32_t revents, void *data)"
+-
+-.SS "typedef void(* qb_loop_poll_low_fds_event_fn)(int32_t not_enough, int32_t fds_available)"
+-
+-.SS "typedef int32_t(* qb_loop_signal_dispatch_fn)(int32_t rsignal, void *data)"
+-
++.SS "typedef void(* \fBqb_loop_job_dispatch_fn\fP)(void *data)"
++.SS "typedef int32_t(* \fBqb_loop_poll_dispatch_fn\fP)(int32_t fd, int32_t revents, void *data)"
++.SS "typedef void(* \fBqb_loop_poll_low_fds_event_fn\fP)(int32_t not_enough, int32_t fds_available)"
++.SS "typedef int32_t(* \fBqb_loop_signal_dispatch_fn\fP)(int32_t rsignal, void *data)"
+ .SS "typedef void* \fBqb_loop_signal_handle\fP"
+-
+ .SS "typedef struct qb_loop \fBqb_loop_t\fP"
+-
+ .PP
+ An opaque data type representing the main loop\&.
+-.SS "typedef void(* qb_loop_timer_dispatch_fn)(void *data)"
+-
++.SS "typedef void(* \fBqb_loop_timer_dispatch_fn\fP)(void *data)"
+ .SS "typedef uint64_t \fBqb_loop_timer_handle\fP"
+-
+ .SH "Enumeration Type Documentation"
+ .PP
+ .SS "enum \fBqb_loop_priority\fP"
+-
+ .PP
+ Priorites for jobs, timers & poll\&.
+ .PP
+-\fBEnumerator\fP
++\fBEnumerator: \fP
+ .in +1c
+ .TP
+ \fB\fIQB_LOOP_LOW \fP\fP
+@@ -162,10 +153,10 @@ Priorites for jobs, timers & poll\&.
+ \fB\fIQB_LOOP_MED \fP\fP
+ .TP
+ \fB\fIQB_LOOP_HIGH \fP\fP
++
+ .SH "Function Documentation"
+ .PP
+-.SS "\fBqb_loop_t\fP* qb_loop_create (void)"
+-
++.SS "\fBqb_loop_t\fP* \fBqb_loop_create\fP (void)"
+ .PP
+ Create a new main loop\&. \fBReturns:\fP
+ .RS 4
+@@ -173,10 +164,8 @@ loop instance\&.
+ .RE
+ .PP
+
+-.SS "void qb_loop_destroy (struct qb_loop *l)"
+-
+-.SS "int32_t qb_loop_job_add (\fBqb_loop_t\fP *l, enum \fBqb_loop_priority\fPp, void *data, \fBqb_loop_job_dispatch_fn\fPdispatch_fn)"
+-
++.SS "void \fBqb_loop_destroy\fP (struct qb_loop *l)"
++.SS "int32_t \fBqb_loop_job_add\fP (\fBqb_loop_t\fP *l, enum \fBqb_loop_priority\fPp, void *data, \fBqb_loop_job_dispatch_fn\fPdispatch_fn)"
+ .PP
+ Add a job to the mainloop\&. This is run in the next cycle of the loop\&.
+ .PP
+@@ -202,8 +191,7 @@ status (0 == ok, -errno == failure)
+ .RE
+ .PP
+
+-.SS "int32_t qb_loop_job_del (struct qb_loop *l, enum \fBqb_loop_priority\fPp, void *data, \fBqb_loop_job_dispatch_fn\fPdispatch_fn)"
+-
++.SS "int32_t \fBqb_loop_job_del\fP (struct qb_loop *l, enum \fBqb_loop_priority\fPp, void *data, \fBqb_loop_job_dispatch_fn\fPdispatch_fn)"
+ .PP
+ Delete a job from the mainloop\&. This will try to delete the job if it hasn't run yet\&.
+ .PP
+@@ -229,8 +217,7 @@ status (0 == ok, -errno == failure)
+ .RE
+ .PP
+
+-.SS "int32_t qb_loop_poll_add (\fBqb_loop_t\fP *l, enum \fBqb_loop_priority\fPp, int32_tfd, int32_tevents, void *data, \fBqb_loop_poll_dispatch_fn\fPdispatch_fn)"
+-
++.SS "int32_t \fBqb_loop_poll_add\fP (\fBqb_loop_t\fP *l, enum \fBqb_loop_priority\fPp, int32_tfd, int32_tevents, void *data, \fBqb_loop_poll_dispatch_fn\fPdispatch_fn)"
+ .PP
+ Add a poll job to the mainloop\&. \fBNote:\fP
+ .RS 4
+@@ -258,8 +245,7 @@ status (0 == ok, -errno == failure)
+ .RE
+ .PP
+
+-.SS "int32_t qb_loop_poll_del (\fBqb_loop_t\fP *l, int32_tfd)"
+-
++.SS "int32_t \fBqb_loop_poll_del\fP (\fBqb_loop_t\fP *l, int32_tfd)"
+ .PP
+ Delete a poll job\&. \fBParameters:\fP
+ .RS 4
+@@ -274,8 +260,7 @@ status (0 == ok, -errno == failure)
+ .RE
+ .PP
+
+-.SS "int32_t qb_loop_poll_low_fds_event_set (\fBqb_loop_t\fP *l, \fBqb_loop_poll_low_fds_event_fn\fPfn)"
+-
++.SS "int32_t \fBqb_loop_poll_low_fds_event_set\fP (\fBqb_loop_t\fP *l, \fBqb_loop_poll_low_fds_event_fn\fPfn)"
+ .PP
+ Set a callback to receive events on file descriptors getting low\&. \fBParameters:\fP
+ .RS 4
+@@ -290,8 +275,7 @@ status (0 == ok, -errno == failure)
+ .RE
+ .PP
+
+-.SS "int32_t qb_loop_poll_mod (\fBqb_loop_t\fP *l, enum \fBqb_loop_priority\fPp, int32_tfd, int32_tevents, void *data, \fBqb_loop_poll_dispatch_fn\fPdispatch_fn)"
+-
++.SS "int32_t \fBqb_loop_poll_mod\fP (\fBqb_loop_t\fP *l, enum \fBqb_loop_priority\fPp, int32_tfd, int32_tevents, void *data, \fBqb_loop_poll_dispatch_fn\fPdispatch_fn)"
+ .PP
+ Modify a poll job\&. \fBParameters:\fP
+ .RS 4
+@@ -314,8 +298,7 @@ status (0 == ok, -errno == failure)
+ .RE
+ .PP
+
+-.SS "void qb_loop_run (\fBqb_loop_t\fP *l)"
+-
++.SS "void \fBqb_loop_run\fP (\fBqb_loop_t\fP *l)"
+ .PP
+ Run the main loop\&. \fBParameters:\fP
+ .RS 4
+@@ -323,8 +306,7 @@ Run the main loop\&. \fBParameters:\fP
+ .RE
+ .PP
+
+-.SS "int32_t qb_loop_signal_add (\fBqb_loop_t\fP *l, enum \fBqb_loop_priority\fPp, int32_tsig, void *data, \fBqb_loop_signal_dispatch_fn\fPdispatch_fn, \fBqb_loop_signal_handle\fP *handle)"
+-
++.SS "int32_t \fBqb_loop_signal_add\fP (\fBqb_loop_t\fP *l, enum \fBqb_loop_priority\fPp, int32_tsig, void *data, \fBqb_loop_signal_dispatch_fn\fPdispatch_fn, \fBqb_loop_signal_handle\fP *handle)"
+ .PP
+ Add a signal job\&. Get a callback on this signal (not in the context of the signal)\&.
+ .PP
+@@ -349,8 +331,7 @@ status (0 == ok, -errno == failure)
+ .RE
+ .PP
+
+-.SS "int32_t qb_loop_signal_del (\fBqb_loop_t\fP *l, \fBqb_loop_signal_handle\fPhandle)"
+-
++.SS "int32_t \fBqb_loop_signal_del\fP (\fBqb_loop_t\fP *l, \fBqb_loop_signal_handle\fPhandle)"
+ .PP
+ Delete the signal job\&. \fBParameters:\fP
+ .RS 4
+@@ -365,8 +346,7 @@ status (0 == ok, -errno == failure)
+ .RE
+ .PP
+
+-.SS "int32_t qb_loop_signal_mod (\fBqb_loop_t\fP *l, enum \fBqb_loop_priority\fPp, int32_tsig, void *data, \fBqb_loop_signal_dispatch_fn\fPdispatch_fn, \fBqb_loop_signal_handle\fPhandle)"
+-
++.SS "int32_t \fBqb_loop_signal_mod\fP (\fBqb_loop_t\fP *l, enum \fBqb_loop_priority\fPp, int32_tsig, void *data, \fBqb_loop_signal_dispatch_fn\fPdispatch_fn, \fBqb_loop_signal_handle\fPhandle)"
+ .PP
+ Modify the signal job\&. \fBParameters:\fP
+ .RS 4
+@@ -389,8 +369,7 @@ status (0 == ok, -errno == failure)
+ .RE
+ .PP
+
+-.SS "void qb_loop_stop (\fBqb_loop_t\fP *l)"
+-
++.SS "void \fBqb_loop_stop\fP (\fBqb_loop_t\fP *l)"
+ .PP
+ Stop the main loop\&. \fBParameters:\fP
+ .RS 4
+@@ -398,8 +377,7 @@ Stop the main loop\&. \fBParameters:\fP
+ .RE
+ .PP
+
+-.SS "int32_t qb_loop_timer_add (\fBqb_loop_t\fP *l, enum \fBqb_loop_priority\fPp, uint64_tnsec_duration, void *data, \fBqb_loop_timer_dispatch_fn\fPdispatch_fn, \fBqb_loop_timer_handle\fP *timer_handle_out)"
+-
++.SS "int32_t \fBqb_loop_timer_add\fP (\fBqb_loop_t\fP *l, enum \fBqb_loop_priority\fPp, uint64_tnsec_duration, void *data, \fBqb_loop_timer_dispatch_fn\fPdispatch_fn, \fBqb_loop_timer_handle\fP *timer_handle_out)"
+ .PP
+ Add a timer to the mainloop\&. \fBNote:\fP
+ .RS 4
+@@ -427,8 +405,7 @@ status (0 == ok, -errno == failure)
+ .RE
+ .PP
+
+-.SS "int32_t qb_loop_timer_del (\fBqb_loop_t\fP *l, \fBqb_loop_timer_handle\fPth)"
+-
++.SS "int32_t \fBqb_loop_timer_del\fP (\fBqb_loop_t\fP *l, \fBqb_loop_timer_handle\fPth)"
+ .PP
+ Delete a timer that is still outstanding\&. \fBParameters:\fP
+ .RS 4
+@@ -443,8 +420,7 @@ status (0 == ok, -errno == failure)
+ .RE
+ .PP
+
+-.SS "uint64_t qb_loop_timer_expire_time_get (struct qb_loop *l, \fBqb_loop_timer_handle\fPth)"
+-
++.SS "uint64_t \fBqb_loop_timer_expire_time_get\fP (struct qb_loop *l, \fBqb_loop_timer_handle\fPth)"
+ .PP
+ Get the time remaining before it expires\&. \fBNote:\fP
+ .RS 4
+@@ -464,8 +440,7 @@ nano seconds left
+ .RE
+ .PP
+
+-.SS "int32_t qb_loop_timer_is_running (\fBqb_loop_t\fP *l, \fBqb_loop_timer_handle\fPth)"
+-
++.SS "int32_t \fBqb_loop_timer_is_running\fP (\fBqb_loop_t\fP *l, \fBqb_loop_timer_handle\fPth)"
+ .PP
+ Check to see if a timer that is still outstanding\&. \fBParameters:\fP
+ .RS 4
diff --git a/package/libqb/patches/patch-docs_man3_qbmap_h_3 b/package/libqb/patches/patch-docs_man3_qbmap_h_3
new file mode 100644
index 000000000..d1d4feff8
--- /dev/null
+++ b/package/libqb/patches/patch-docs_man3_qbmap_h_3
@@ -0,0 +1,261 @@
+--- libqb-0.16.0.orig/docs/man3/qbmap.h.3 2013-07-25 20:16:18.000000000 +0200
++++ libqb-0.16.0/docs/man3/qbmap.h.3 2013-09-09 05:26:31.803806391 +0200
+@@ -1,4 +1,4 @@
+-.TH "qbmap.h" 3 "Thu Jul 25 2013" "Version 0.16.0" "libqb" \" -*- nroff -*-
++.TH "qbmap.h" 3 "Mon Sep 9 2013" "Version 0.16.0" "libqb" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -14,7 +14,7 @@ This provides a map interface to a Patri
+ \fC#include <unistd\&.h>\fP
+ .br
+
+-.SS "Macros"
++.SS "Defines"
+
+ .in +1c
+ .ti -1c
+@@ -137,13 +137,13 @@ The hashtable is NOT ordered, but ptrie
+ Below is a simple example of how to iterate over a map\&.
+ .PP
+ .nf
+-const char *p;
+-void *data;
+-qb_map_iter_t *it = qb_map_iter_create(m);
+-for (p = qb_map_iter_next(it, &data); p; p = qb_map_iter_next(it, &data)) {
+- printf('%s > %s\n', p, (char*) data);
+-}
+-qb_map_iter_free(it);
++ const char *p;
++ void *data;
++ qb_map_iter_t *it = qb_map_iter_create(m);
++ for (p = qb_map_iter_next(it, &data); p; p = qb_map_iter_next(it, &data)) {
++ printf('%s > %s\n', p, (char*) data);
++ }
++ qb_map_iter_free(it);
+
+ .fi
+ .PP
+@@ -152,8 +152,8 @@ qb_map_iter_free(it);
+ Deletion of items within the iterator is supported\&. But note do not free the item memory in the iterator\&. If you need to free the data items then register for a notifier and free the memory there\&. This is required as the items are reference counted\&.
+ .PP
+ .nf
+-qb_map_notify_add(m, NULL, my_map_free_handler,
+- QB_MAP_NOTIFY_FREE, NULL);
++ qb_map_notify_add(m, NULL, my_map_free_handler,
++ QB_MAP_NOTIFY_FREE, NULL);
+
+ .fi
+ .PP
+@@ -168,7 +168,7 @@ These allow you to get callbacks when va
+ hashtable only supports deletion and replacement notificatins\&. There is also a special global callback for freeing deleted and replaced values (QB_MAP_NOTIFY_FREE)\&.
+ .RE
+ .PP
+-\fBSee Also:\fP
++\fBSee also:\fP
+ .RS 4
+ \fBqb_map_notify_add()\fP \fBqb_map_notify_del_2()\fP
+ .RE
+@@ -180,57 +180,47 @@ The ptrie supports prefixes in the itera
+ .PP
+ .PP
+ .nf
+-it = qb_map_pref_iter_create(m, 'aa');
+-while ((p = qb_map_iter_next(it, &data)) != NULL) {
+- printf('%s > %s\n', p, (char*)data);
+-}
+-qb_map_iter_free(it);
++ it = qb_map_pref_iter_create(m, 'aa');
++ while ((p = qb_map_iter_next(it, &data)) != NULL) {
++ printf('%s > %s\n', p, (char*)data);
++ }
++ qb_map_iter_free(it);
+ .fi
+ .PP
+ .PP
+ The ptrie also supports prefixes in notifications: (remember to pass QB_MAP_NOTIFY_RECURSIVE into the notify_add\&.
+ .PP
+ .nf
+-qb_map_notify_add(m, 'root', my_map_notification,
+- (QB_MAP_NOTIFY_INSERTED|
+- QB_MAP_NOTIFY_DELETED|
+- QB_MAP_NOTIFY_REPLACED|
+- QB_MAP_NOTIFY_RECURSIVE),
+- NULL);
++ qb_map_notify_add(m, 'root', my_map_notification,
++ (QB_MAP_NOTIFY_INSERTED|
++ QB_MAP_NOTIFY_DELETED|
++ QB_MAP_NOTIFY_REPLACED|
++ QB_MAP_NOTIFY_RECURSIVE),
++ NULL);
+
+ .fi
+ .PP
+
+-.SH "Macro Definition Documentation"
++.SH "Define Documentation"
+ .PP
+-.SS "#define QB_MAP_NOTIFY_DELETED 1"
+-
+-.SS "#define QB_MAP_NOTIFY_FREE 16"
+-
+-.SS "#define QB_MAP_NOTIFY_INSERTED 4"
+-
+-.SS "#define QB_MAP_NOTIFY_RECURSIVE 8"
+-
+-.SS "#define QB_MAP_NOTIFY_REPLACED 2"
+-
++.SS "#define \fBQB_MAP_NOTIFY_DELETED\fP 1"
++.SS "#define \fBQB_MAP_NOTIFY_FREE\fP 16"
++.SS "#define \fBQB_MAP_NOTIFY_INSERTED\fP 4"
++.SS "#define \fBQB_MAP_NOTIFY_RECURSIVE\fP 8"
++.SS "#define \fBQB_MAP_NOTIFY_REPLACED\fP 2"
+ .SH "Typedef Documentation"
+ .PP
+ .SS "typedef struct qb_map_iter \fBqb_map_iter_t\fP"
+-
+ .PP
+ This is an opaque data type representing an iterator instance\&.
+-.SS "typedef void(* qb_map_notify_fn)(uint32_t event, char *key, void *old_value, void *value, void *user_data)"
+-
++.SS "typedef void(* \fBqb_map_notify_fn\fP)(uint32_t event, char *key, void *old_value, void *value, void *user_data)"
+ .SS "typedef struct qb_map \fBqb_map_t\fP"
+-
+ .PP
+ This is an opaque data type representing an instance of a map\&.
+-.SS "typedef int32_t(* qb_map_transverse_fn)(const char *key, void *value, void *user_data)"
+-
++.SS "typedef int32_t(* \fBqb_map_transverse_fn\fP)(const char *key, void *value, void *user_data)"
+ .SH "Function Documentation"
+ .PP
+-.SS "\fBqb_map_t\fP* qb_hashtable_create (size_tmax_size)"
+-
++.SS "\fBqb_map_t\fP* \fBqb_hashtable_create\fP (size_tmax_size)"
+ .PP
+ Create an unsorted map based on a hashtable\&. \fBParameters:\fP
+ .RS 4
+@@ -243,20 +233,16 @@ the map instance
+ .RE
+ .PP
+
+-.SS "size_t qb_map_count_get (\fBqb_map_t\fP *map)"
+-
++.SS "size_t \fBqb_map_count_get\fP (\fBqb_map_t\fP *map)"
+ .PP
+ Get the number of items in the map\&.
+-.SS "void qb_map_destroy (\fBqb_map_t\fP *map)"
+-
++.SS "void \fBqb_map_destroy\fP (\fBqb_map_t\fP *map)"
+ .PP
+ Destroy the map, removes all the items from the map\&.
+-.SS "void qb_map_foreach (\fBqb_map_t\fP *map, \fBqb_map_transverse_fn\fPfunc, void *user_data)"
+-
++.SS "void \fBqb_map_foreach\fP (\fBqb_map_t\fP *map, \fBqb_map_transverse_fn\fPfunc, void *user_data)"
+ .PP
+ Calls the given function for each of the key/value pairs in the map\&. The function is passed the key and value of each pair, and the given data parameter\&. The map is traversed in sorted order\&.
+-.SS "void* qb_map_get (\fBqb_map_t\fP *map, const char *key)"
+-
++.SS "void* \fBqb_map_get\fP (\fBqb_map_t\fP *map, const char *key)"
+ .PP
+ Gets the value corresponding to the given key\&. \fBReturn values:\fP
+ .RS 4
+@@ -266,12 +252,10 @@ Gets the value corresponding to the give
+ .RE
+ .PP
+
+-.SS "\fBqb_map_iter_t\fP* qb_map_iter_create (\fBqb_map_t\fP *map)"
+-
++.SS "\fBqb_map_iter_t\fP* \fBqb_map_iter_create\fP (\fBqb_map_t\fP *map)"
+ .PP
+ Create an iterator\&.
+-.SS "void qb_map_iter_free (\fBqb_map_iter_t\fP *i)"
+-
++.SS "void \fBqb_map_iter_free\fP (\fBqb_map_iter_t\fP *i)"
+ .PP
+ free the iterator \fBParameters:\fP
+ .RS 4
+@@ -279,8 +263,7 @@ free the iterator \fBParameters:\fP
+ .RE
+ .PP
+
+-.SS "const char* qb_map_iter_next (\fBqb_map_iter_t\fP *i, void **value)"
+-
++.SS "const char* \fBqb_map_iter_next\fP (\fBqb_map_iter_t\fP *i, void **value)"
+ .PP
+ Get the next item\&. \fBParameters:\fP
+ .RS 4
+@@ -297,8 +280,7 @@ Get the next item\&. \fBParameters:\fP
+ .RE
+ .PP
+
+-.SS "int32_t qb_map_notify_add (\fBqb_map_t\fP *m, const char *key, \fBqb_map_notify_fn\fPfn, int32_tevents, void *user_data)"
+-
++.SS "int32_t \fBqb_map_notify_add\fP (\fBqb_map_t\fP *m, const char *key, \fBqb_map_notify_fn\fPfn, int32_tevents, void *user_data)"
+ .PP
+ Add a notifier to the map\&. \fBParameters:\fP
+ .RS 4
+@@ -328,8 +310,7 @@ you can use key prefixes with trie maps\
+ .RE
+ .PP
+
+-.SS "int32_t qb_map_notify_del (\fBqb_map_t\fP *m, const char *key, \fBqb_map_notify_fn\fPfn, int32_tevents)"
+-
++.SS "int32_t \fBqb_map_notify_del\fP (\fBqb_map_t\fP *m, const char *key, \fBqb_map_notify_fn\fPfn, int32_tevents)"
+ .PP
+ Delete a notifier from the map\&. \fBNote:\fP
+ .RS 4
+@@ -355,8 +336,7 @@ the key,fn and events must match those y
+ .RE
+ .PP
+
+-.SS "int32_t qb_map_notify_del_2 (\fBqb_map_t\fP *m, const char *key, \fBqb_map_notify_fn\fPfn, int32_tevents, void *user_data)"
+-
++.SS "int32_t \fBqb_map_notify_del_2\fP (\fBqb_map_t\fP *m, const char *key, \fBqb_map_notify_fn\fPfn, int32_tevents, void *user_data)"
+ .PP
+ Delete a notifier from the map (including the userdata)\&. \fBNote:\fP
+ .RS 4
+@@ -384,8 +364,7 @@ the key, fn, events and userdata must ma
+ .RE
+ .PP
+
+-.SS "\fBqb_map_iter_t\fP* qb_map_pref_iter_create (\fBqb_map_t\fP *map, const char *prefix)"
+-
++.SS "\fBqb_map_iter_t\fP* \fBqb_map_pref_iter_create\fP (\fBqb_map_t\fP *map, const char *prefix)"
+ .PP
+ Create a prefix iterator\&. This will iterate over all items with the given prefix\&.
+ .PP
+@@ -395,16 +374,13 @@ this is only supported by the trie\&.
+ .RE
+ .PP
+
+-.SS "void qb_map_put (\fBqb_map_t\fP *map, const char *key, const void *value)"
+-
++.SS "void \fBqb_map_put\fP (\fBqb_map_t\fP *map, const char *key, const void *value)"
+ .PP
+ Inserts a new key and value into a qb_map_t\&. If the key already exists in the qb_map_t, it gets replaced by the new key\&.
+-.SS "int32_t qb_map_rm (\fBqb_map_t\fP *map, const char *key)"
+-
++.SS "int32_t \fBqb_map_rm\fP (\fBqb_map_t\fP *map, const char *key)"
+ .PP
+ Removes a key/value pair from a map\&.
+-.SS "\fBqb_map_t\fP* qb_skiplist_create (void)"
+-
++.SS "\fBqb_map_t\fP* \fBqb_skiplist_create\fP (void)"
+ .PP
+ Create a sorted map using a skiplist\&. \fBReturns:\fP
+ .RS 4
+@@ -412,12 +388,10 @@ the map instance
+ .RE
+ .PP
+
+-.SS "\fBqb_map_t\fP* qb_trie_create (void)"
+-
++.SS "\fBqb_map_t\fP* \fBqb_trie_create\fP (void)"
+ .PP
+ Create a sorted map using a Patricia trie or 'Radix tree'\&.
+-.SS "void qb_trie_dump (\fBqb_map_t\fP *m)"
+-
++.SS "void \fBqb_trie_dump\fP (\fBqb_map_t\fP *m)"
+ .PP
+ print out the nodes in the trie (for debug purposes)
+ .SH "Author"
diff --git a/package/libqb/patches/patch-docs_man3_qbutil_h_3 b/package/libqb/patches/patch-docs_man3_qbutil_h_3
new file mode 100644
index 000000000..4d3d6af7c
--- /dev/null
+++ b/package/libqb/patches/patch-docs_man3_qbutil_h_3
@@ -0,0 +1,284 @@
+--- libqb-0.16.0.orig/docs/man3/qbutil.h.3 2013-07-25 20:16:18.000000000 +0200
++++ libqb-0.16.0/docs/man3/qbutil.h.3 2013-09-09 05:26:31.891805285 +0200
+@@ -1,4 +1,4 @@
+-.TH "qbutil.h" 3 "Thu Jul 25 2013" "Version 0.16.0" "libqb" \" -*- nroff -*-
++.TH "qbutil.h" 3 "Mon Sep 9 2013" "Version 0.16.0" "libqb" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -15,7 +15,7 @@ qbutil.h \-
+ \fC#include <qb/qbdefs\&.h>\fP
+ .br
+
+-.SS "Macros"
++.SS "Defines"
+
+ .in +1c
+ .ti -1c
+@@ -138,7 +138,7 @@ qbutil.h \-
+ .PP
+ \fBAuthor:\fP
+ .RS 4
+-Angus Salkeld asalkeld@redhat.com
++Angus Salkeld <asalkeld@redhat.com>
+ .RE
+ .PP
+ These are some convience functions used throughout libqb\&.
+@@ -180,21 +180,21 @@ These are some convience functions used
+
+ .PP
+ .nf
+-uint64_t elapsed1;
+-uint64_t elapsed2;
+-qb_util_stopwatch_t *sw = qb_util_stopwatch_create();
++ uint64_t elapsed1;
++ uint64_t elapsed2;
++ qb_util_stopwatch_t *sw = qb_util_stopwatch_create();
+
+-qb_util_stopwatch_start(sw);
++ qb_util_stopwatch_start(sw);
+
+-usleep(sometime);
+-qb_util_stopwatch_stop(sw);
+-elapsed1 = qb_util_stopwatch_us_elapsed_get(sw);
++ usleep(sometime);
++ qb_util_stopwatch_stop(sw);
++ elapsed1 = qb_util_stopwatch_us_elapsed_get(sw);
+
+-usleep(somemoretime);
+-qb_util_stopwatch_stop(sw);
+-elapsed2 = qb_util_stopwatch_us_elapsed_get(sw);
++ usleep(somemoretime);
++ qb_util_stopwatch_stop(sw);
++ elapsed2 = qb_util_stopwatch_us_elapsed_get(sw);
+
+-qb_util_stopwatch_free(sw);
++ qb_util_stopwatch_free(sw);
+
+ .fi
+ .PP
+@@ -207,72 +207,65 @@ Setup a stopwatch with space for 3 split
+ .PP
+ .PP
+ .nf
+-uint64_t split;
+-qb_util_stopwatch_t *sw = qb_util_stopwatch_create();
++ uint64_t split;
++ qb_util_stopwatch_t *sw = qb_util_stopwatch_create();
+
+-qb_util_stopwatch_split_ctl(sw, 3, 0);
+-qb_util_stopwatch_start(sw);
++ qb_util_stopwatch_split_ctl(sw, 3, 0);
++ qb_util_stopwatch_start(sw);
+
+-usleep(sometime);
+-qb_util_stopwatch_split(sw);
++ usleep(sometime);
++ qb_util_stopwatch_split(sw);
+
+-usleep(somemoretime);
+-qb_util_stopwatch_split(sw);
++ usleep(somemoretime);
++ qb_util_stopwatch_split(sw);
+
+-usleep(somemoretime);
+-qb_util_stopwatch_split(sw);
++ usleep(somemoretime);
++ qb_util_stopwatch_split(sw);
+
+-idx = qb_util_stopwatch_split_last(sw);
+-do {
+- split = qb_util_stopwatch_time_split_get(sw, idx, idx);
+- qb_log(LOG_INFO, 'split %d is %'PRIu64'', last, split);
+- idx--;
+-} while (split > 0);
++ idx = qb_util_stopwatch_split_last(sw);
++ do {
++ split = qb_util_stopwatch_time_split_get(sw, idx, idx);
++ qb_log(LOG_INFO, 'split %d is %'PRIu64'', last, split);
++ idx--;
++ } while (split > 0);
+
+-split = qb_util_stopwatch_time_split_get(sw, 2, 1);
+-qb_log(LOG_INFO, 'time between second and third split is %'PRIu64'', split);
++ split = qb_util_stopwatch_time_split_get(sw, 2, 1);
++ qb_log(LOG_INFO, 'time between second and third split is %'PRIu64'', split);
+
+-qb_util_stopwatch_free(sw);
++ qb_util_stopwatch_free(sw);
+ .fi
+ .PP
+
+-.SH "Macro Definition Documentation"
++.SH "Define Documentation"
+ .PP
+-.SS "#define QB_UTIL_SW_OVERWRITE 0x01"
+-
++.SS "#define \fBQB_UTIL_SW_OVERWRITE\fP 0x01"
+ .SH "Typedef Documentation"
+ .PP
+ .SS "typedef struct qb_thread_lock_s \fBqb_thread_lock_t\fP"
+-
+-.SS "typedef void(* qb_util_log_fn_t)(const char *file_name, int32_t file_line, int32_t severity, const char *msg)"
+-
++.SS "typedef void(* \fBqb_util_log_fn_t\fP)(const char *file_name, int32_t file_line, int32_t severity, const char *msg)"
+ .SS "typedef struct qb_util_stopwatch \fBqb_util_stopwatch_t\fP"
+-
+ .SH "Enumeration Type Documentation"
+ .PP
+ .SS "enum \fBqb_thread_lock_type_t\fP"
+-
+ .PP
+ QB_THREAD_LOCK_SHORT is a short term lock (spinlock if available on your system) QB_THREAD_LOCK_LONG is a mutex\&.
+ .PP
+-\fBEnumerator\fP
++\fBEnumerator: \fP
+ .in +1c
+ .TP
+ \fB\fIQB_THREAD_LOCK_SHORT \fP\fP
+ .TP
+ \fB\fIQB_THREAD_LOCK_LONG \fP\fP
++
+ .SH "Function Documentation"
+ .PP
+-.SS "char* qb_strerror_r (interrnum, char *buf, size_tbuflen)"
+-
++.SS "char* \fBqb_strerror_r\fP (interrnum, char *buf, size_tbuflen)"
+ .PP
+ strerror_r replacement\&.
+-.SS "int32_t qb_thread_lock (\fBqb_thread_lock_t\fP *tl)"
+-
++.SS "int32_t \fBqb_thread_lock\fP (\fBqb_thread_lock_t\fP *tl)"
+ .PP
+ Calls either pthread_mutex_lock() or pthread_spin_lock()\&.
+-.SS "\fBqb_thread_lock_t\fP* qb_thread_lock_create (\fBqb_thread_lock_type_t\fPtype)"
+-
++.SS "\fBqb_thread_lock_t\fP* \fBqb_thread_lock_create\fP (\fBqb_thread_lock_type_t\fPtype)"
+ .PP
+ Create a new lock of the given type\&. \fBParameters:\fP
+ .RS 4
+@@ -285,20 +278,16 @@ pointer to qb_thread_lock_type_t or NULL
+ .RE
+ .PP
+
+-.SS "int32_t qb_thread_lock_destroy (\fBqb_thread_lock_t\fP *tl)"
+-
++.SS "int32_t \fBqb_thread_lock_destroy\fP (\fBqb_thread_lock_t\fP *tl)"
+ .PP
+ Calls either pthread_mutex_destro() or pthread_spin_destroy()\&.
+-.SS "int32_t qb_thread_trylock (\fBqb_thread_lock_t\fP *tl)"
+-
++.SS "int32_t \fBqb_thread_trylock\fP (\fBqb_thread_lock_t\fP *tl)"
+ .PP
+ Calls either pthread_mutex_trylock() or pthread_spin_trylock()\&.
+-.SS "int32_t qb_thread_unlock (\fBqb_thread_lock_t\fP *tl)"
+-
++.SS "int32_t \fBqb_thread_unlock\fP (\fBqb_thread_lock_t\fP *tl)"
+ .PP
+ Calls either pthread_mutex_unlock() or pthread_spin_unlock\&.
+-.SS "void qb_timespec_add_ms (struct timespec *ts, int32_tms)"
+-
++.SS "void \fBqb_timespec_add_ms\fP (struct timespec *ts, int32_tms)"
+ .PP
+ Add milliseconds onto the timespec\&. \fBParameters:\fP
+ .RS 4
+@@ -308,36 +297,28 @@ Add milliseconds onto the timespec\&. \f
+ .RE
+ .PP
+
+-.SS "uint64_t qb_util_nano_current_get (void)"
+-
++.SS "uint64_t \fBqb_util_nano_current_get\fP (void)"
+ .PP
+ Get the current number of nano secounds produced by the systems incrementing clock (CLOCK_MONOTOMIC if available)\&.
+-.SS "uint64_t qb_util_nano_from_epoch_get (void)"
+-
++.SS "uint64_t \fBqb_util_nano_from_epoch_get\fP (void)"
+ .PP
+ Get the time in nano seconds since epoch\&.
+-.SS "uint64_t qb_util_nano_monotonic_hz (void)"
+-
++.SS "uint64_t \fBqb_util_nano_monotonic_hz\fP (void)"
+ .PP
+ Get the frequence of the clock used in \fBqb_util_nano_current_get()\fP\&.
+-.SS "void qb_util_set_log_function (\fBqb_util_log_fn_t\fPfn)"
+-
++.SS "void \fBqb_util_set_log_function\fP (\fBqb_util_log_fn_t\fPfn)"
+ .PP
+ Use this function to output libqb internal log message as you wish\&.
+-.SS "\fBqb_util_stopwatch_t\fP* qb_util_stopwatch_create (void)"
+-
++.SS "\fBqb_util_stopwatch_t\fP* \fBqb_util_stopwatch_create\fP (void)"
+ .PP
+ Create a Stopwatch (to time operations)
+-.SS "void qb_util_stopwatch_free (\fBqb_util_stopwatch_t\fP *sw)"
+-
++.SS "void \fBqb_util_stopwatch_free\fP (\fBqb_util_stopwatch_t\fP *sw)"
+ .PP
+ Free the stopwatch\&.
+-.SS "float qb_util_stopwatch_sec_elapsed_get (\fBqb_util_stopwatch_t\fP *sw)"
+-
++.SS "float \fBqb_util_stopwatch_sec_elapsed_get\fP (\fBqb_util_stopwatch_t\fP *sw)"
+ .PP
+ Get the elapsed time in seconds\&. (it must have been started and stopped)\&.
+-.SS "uint64_t qb_util_stopwatch_split (\fBqb_util_stopwatch_t\fP *sw)"
+-
++.SS "uint64_t \fBqb_util_stopwatch_split\fP (\fBqb_util_stopwatch_t\fP *sw)"
+ .PP
+ Create a new time split (or lap time) \fBParameters:\fP
+ .RS 4
+@@ -352,8 +333,7 @@ Create a new time split (or lap time) \f
+ .RE
+ .PP
+
+-.SS "int32_t qb_util_stopwatch_split_ctl (\fBqb_util_stopwatch_t\fP *sw, uint32_tmax_splits, uint32_toptions)"
+-\fBParameters:\fP
++.SS "int32_t \fBqb_util_stopwatch_split_ctl\fP (\fBqb_util_stopwatch_t\fP *sw, uint32_tmax_splits, uint32_toptions)"\fBParameters:\fP
+ .RS 4
+ \fIsw\fP the stopwatch
+ .br
+@@ -370,8 +350,7 @@ Create a new time split (or lap time) \f
+ .RE
+ .PP
+
+-.SS "uint32_t qb_util_stopwatch_split_last (\fBqb_util_stopwatch_t\fP *sw)"
+-
++.SS "uint32_t \fBqb_util_stopwatch_split_last\fP (\fBqb_util_stopwatch_t\fP *sw)"
+ .PP
+ Get the last split index to be used by \fBqb_util_stopwatch_time_split_get()\fP \fBNote:\fP
+ .RS 4
+@@ -389,16 +368,13 @@ the last entry index
+ .RE
+ .PP
+
+-.SS "void qb_util_stopwatch_start (\fBqb_util_stopwatch_t\fP *sw)"
+-
++.SS "void \fBqb_util_stopwatch_start\fP (\fBqb_util_stopwatch_t\fP *sw)"
+ .PP
+ Start the stopwatch\&. This also acts as a reset\&. Essentially it sets the starting time and clears the splits\&.
+-.SS "void qb_util_stopwatch_stop (\fBqb_util_stopwatch_t\fP *sw)"
+-
++.SS "void \fBqb_util_stopwatch_stop\fP (\fBqb_util_stopwatch_t\fP *sw)"
+ .PP
+ Stop the stopwatch\&. This just allows you to get the elapsed time\&. So you can call this multiple times\&. Do not call \fBqb_util_stopwatch_start()\fP unless you want to reset the stopwatch\&.
+-.SS "uint64_t qb_util_stopwatch_time_split_get (\fBqb_util_stopwatch_t\fP *sw, uint32_treceint, uint32_tolder)"
+-
++.SS "uint64_t \fBqb_util_stopwatch_time_split_get\fP (\fBqb_util_stopwatch_t\fP *sw, uint32_treceint, uint32_tolder)"
+ .PP
+ Read the time split (in us) from 'receint' to 'older'\&. If older == receint then the cumulated split will be returned (from the stopwatch start)\&.
+ .PP
+@@ -419,12 +395,10 @@ Read the time split (in us) from 'recein
+ .RE
+ .PP
+
+-.SS "uint64_t qb_util_stopwatch_us_elapsed_get (\fBqb_util_stopwatch_t\fP *sw)"
+-
++.SS "uint64_t \fBqb_util_stopwatch_us_elapsed_get\fP (\fBqb_util_stopwatch_t\fP *sw)"
+ .PP
+ Get the elapsed time in micro seconds\&. (it must have been started and stopped)\&.
+-.SS "void qb_util_timespec_from_epoch_get (struct timespec *ts)"
+-
++.SS "void \fBqb_util_timespec_from_epoch_get\fP (struct timespec *ts)"
+ .PP
+ Get the time in timespec since epoch\&. \fBParameters:\fP
+ .RS 4