1799fc0be2
- Make -devel package dependency on the main package arch-qualified Signed-off-by: Jan Pokorný <jpokorny@redhat.com>
198 lines
7.7 KiB
Diff
198 lines
7.7 KiB
Diff
From 8ae46f6c7a2e9c518fec635b8f7afb1b1dbc710f Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Jan=20Pokorn=C3=BD?= <jpokorny@redhat.com>
|
|
Date: Fri, 6 Oct 2017 17:17:26 +0200
|
|
Subject: [PATCH 6/6] Low: fix internal object symbol's leak & expose run-time
|
|
lib version
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
The object in question has never been published through the header file,
|
|
hence it's presumably safe to make it static as it's meant to be.
|
|
|
|
On the other hand, QB_LOG_INIT_DATA macro from qblog.h has already
|
|
started to depend on that symbol so as to locate the library handle
|
|
for libqb itself correctly. This is trivially fixed by finally exposing
|
|
library versioning info in run-time ("online") as a structure with
|
|
members corresponding to compile-time ("offline") counterparts from
|
|
qbconfig.h header file, which are admittedly of very limited use
|
|
as opposed to the newly introduced dynamic info, plus lower-cased
|
|
equivalent of QB_VER_STR. Better than to roll out a futile data object
|
|
serving as an artificial anchor for the above purpose, and this was
|
|
due for a while, afterall.
|
|
|
|
In turn, also bump "current" and "age" of fields of the libtool's
|
|
"-version-info" versioning system.
|
|
|
|
Signed-off-by: Jan Pokorný <jpokorny@redhat.com>
|
|
---
|
|
include/qb/qbconfig.h.in | 7 ++++++-
|
|
include/qb/qblog.h | 8 +++++---
|
|
include/qb/qbutil.h | 11 +++++++++++
|
|
lib/Makefile.am | 2 +-
|
|
lib/log.c | 10 ++++++----
|
|
lib/log_format.c | 2 +-
|
|
lib/util.c | 10 ++++++++++
|
|
tests/functional/log_client.c | 5 +++++
|
|
tests/functional/log_test_client.err | 2 +-
|
|
9 files changed, 46 insertions(+), 11 deletions(-)
|
|
|
|
diff --git a/include/qb/qbconfig.h.in b/include/qb/qbconfig.h.in
|
|
index c1852e1..9094dc7 100644
|
|
--- a/include/qb/qbconfig.h.in
|
|
+++ b/include/qb/qbconfig.h.in
|
|
@@ -30,7 +30,12 @@
|
|
/* Enabling code using __attribute__((section)) */
|
|
#undef QB_HAVE_ATTRIBUTE_SECTION
|
|
|
|
-/* versioning info: MAJOR, MINOR, MICRO, and REST components */
|
|
+/* versioning info: MAJOR, MINOR, MICRO, and REST components;
|
|
+ note that static compile-time info is not that useful as consulting
|
|
+ the respectively named members of qb_version struct constant under
|
|
+ @c qb_ver identifier (or @c qb_ver_str equivalent of the local
|
|
+ upper-cased value) directly from libqb in run-time (see qbutil.h),
|
|
+ but that was only introduced after v1.0.2 */
|
|
#undef QB_VER_MAJOR
|
|
#undef QB_VER_MINOR
|
|
#undef QB_VER_MICRO
|
|
diff --git a/include/qb/qblog.h b/include/qb/qblog.h
|
|
index 00adb3a..059d633 100644
|
|
--- a/include/qb/qblog.h
|
|
+++ b/include/qb/qblog.h
|
|
@@ -299,9 +299,11 @@ extern struct qb_log_callsite QB_ATTR_SECTION_STOP[];
|
|
#define QB_NONAPI_LOG_INIT_DATA_EXTRA_(name) \
|
|
{ Dl_info work_dli; \
|
|
/* libqb sanity (locating libqb by it's relatively unique \
|
|
- -- and currently only such per-linkage global one -- \
|
|
- non-functional symbol, due to possible confusion otherwise) */ \
|
|
- if (dladdr(dlsym(RTLD_DEFAULT, "facilitynames"), &work_dli) \
|
|
+ non-functional symbols -- the two are mutually exclusive, the \
|
|
+ ordinarily latter was introduced by accident, the former is \
|
|
+ intentional -- due to possible confusion otherwise) */ \
|
|
+ if ((dladdr(dlsym(RTLD_DEFAULT, "qb_ver_str"), &work_dli) \
|
|
+ || dladdr(dlsym(RTLD_DEFAULT, "facilitynames"), &work_dli)) \
|
|
&& (work_handle = dlopen(work_dli.dli_fname, \
|
|
RTLD_LOCAL|RTLD_LAZY)) != NULL) { \
|
|
work_s1 = (struct qb_log_callsite *) \
|
|
diff --git a/include/qb/qbutil.h b/include/qb/qbutil.h
|
|
index bfce349..b02ce8d 100644
|
|
--- a/include/qb/qbutil.h
|
|
+++ b/include/qb/qbutil.h
|
|
@@ -289,6 +289,17 @@ uint64_t
|
|
qb_util_stopwatch_time_split_get(qb_util_stopwatch_t *sw,
|
|
uint32_t receint, uint32_t older);
|
|
|
|
+/** Structured library versioning info */
|
|
+extern const struct qb_version {
|
|
+ uint8_t major; /**< Major component */
|
|
+ uint8_t minor; /**< Minor component */
|
|
+ uint8_t micro; /**< Micro component */
|
|
+ const char *rest; /**< Rest (pertaining the mid-release-point) */
|
|
+} qb_ver;
|
|
+
|
|
+/** Complete library versioning info as a string */
|
|
+extern const char *const qb_ver_str;
|
|
+
|
|
/* *INDENT-OFF* */
|
|
#ifdef __cplusplus
|
|
}
|
|
diff --git a/lib/Makefile.am b/lib/Makefile.am
|
|
index 1572cff..6ca6b15 100644
|
|
--- a/lib/Makefile.am
|
|
+++ b/lib/Makefile.am
|
|
@@ -30,7 +30,7 @@ AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_srcdir)/include
|
|
|
|
lib_LTLIBRARIES = libqb.la
|
|
|
|
-libqb_la_LDFLAGS = -version-info 18:2:18
|
|
+libqb_la_LDFLAGS = -version-info 19:0:19
|
|
|
|
source_to_lint = util.c hdb.c ringbuffer.c ringbuffer_helper.c \
|
|
array.c loop.c loop_poll.c loop_job.c \
|
|
diff --git a/lib/log.c b/lib/log.c
|
|
index 290f29f..cbad262 100644
|
|
--- a/lib/log.c
|
|
+++ b/lib/log.c
|
|
@@ -892,10 +892,12 @@ qb_log_init(const char *name, int32_t facility, uint8_t priority)
|
|
#ifdef QB_HAVE_ATTRIBUTE_SECTION
|
|
/* sanity check that target chain supplied QB_ATTR_SECTION_ST{ART,OP}
|
|
symbols and hence the local references to them are not referencing
|
|
- the proper libqb's ones (locating libqb-self by it's relatively
|
|
- unique -- and currently only such per-linkage global one --
|
|
- non-functional symbol, due to possible confusion otherwise) */
|
|
- if (dladdr(dlsym(RTLD_DEFAULT, "facilitynames"), &work_dli)
|
|
+ the proper libqb's ones (locating libqb by it's relatively unique
|
|
+ non-functional symbols -- the two are mutually exclusive, the
|
|
+ ordinarily latter was introduced by accident, the former is
|
|
+ intentional -- due to possible confusion otherwise) */
|
|
+ if ((dladdr(dlsym(RTLD_DEFAULT, "qb_ver_str"), &work_dli)
|
|
+ || dladdr(dlsym(RTLD_DEFAULT, "facilitynames"), &work_dli))
|
|
&& (work_handle = dlopen(work_dli.dli_fname,
|
|
RTLD_LOCAL|RTLD_LAZY)) != NULL) {
|
|
work_s1 = (struct qb_log_callsite *)
|
|
diff --git a/lib/log_format.c b/lib/log_format.c
|
|
index 712f447..e7e1f40 100644
|
|
--- a/lib/log_format.c
|
|
+++ b/lib/log_format.c
|
|
@@ -49,7 +49,7 @@ static struct syslog_names prioritynames[] = {
|
|
{NULL, -1}
|
|
};
|
|
|
|
-struct syslog_names facilitynames[] = {
|
|
+static struct syslog_names facilitynames[] = {
|
|
{"auth", LOG_AUTH},
|
|
#if defined(LOG_AUTHPRIV)
|
|
{"authpriv", LOG_AUTHPRIV},
|
|
diff --git a/lib/util.c b/lib/util.c
|
|
index 6181a25..a510bd1 100644
|
|
--- a/lib/util.c
|
|
+++ b/lib/util.c
|
|
@@ -23,6 +23,7 @@
|
|
#include "util_int.h"
|
|
#include <pthread.h>
|
|
#include <sys/stat.h>
|
|
+#include <qb/qbconfig.h>
|
|
#include <qb/qbdefs.h>
|
|
#include <qb/qbutil.h>
|
|
|
|
@@ -372,3 +373,12 @@ qb_util_stopwatch_time_split_get(qb_util_stopwatch_t *sw,
|
|
}
|
|
return (time_start - time_end) / QB_TIME_NS_IN_USEC;
|
|
}
|
|
+
|
|
+const struct qb_version qb_ver = {
|
|
+ .major = QB_VER_MAJOR,
|
|
+ .minor = QB_VER_MINOR,
|
|
+ .micro = QB_VER_MICRO,
|
|
+ .rest = QB_VER_REST,
|
|
+};
|
|
+
|
|
+const char *const qb_ver_str = QB_VER_STR;
|
|
diff --git a/tests/functional/log_client.c b/tests/functional/log_client.c
|
|
index c60d657..d5d8089 100644
|
|
--- a/tests/functional/log_client.c
|
|
+++ b/tests/functional/log_client.c
|
|
@@ -53,6 +53,11 @@ main(int32_t argc, char *argv[])
|
|
qb_log_tags_stringify_fn_set(my_tags_stringify);
|
|
qb_log_format_set(QB_LOG_STDERR, "[%5g|%p] %f:%l:%b");
|
|
|
|
+#if 0
|
|
+ printf("\n==%s consists of: %d, %d, %d, %s==\n\n", qb_ver_str,
|
|
+ qb_ver.major, qb_ver.minor, qb_ver.micro, qb_ver.rest);
|
|
+#endif
|
|
+
|
|
#if 0
|
|
printf("--\n");
|
|
qb_log_callsites_dump();
|
|
diff --git a/tests/functional/log_test_client.err b/tests/functional/log_test_client.err
|
|
index 19fca2c..98df44c 100644
|
|
--- a/tests/functional/log_test_client.err
|
|
+++ b/tests/functional/log_test_client.err
|
|
@@ -1,2 +1,2 @@
|
|
-[MAIN |debug] ../log_client.c:64:hello
|
|
+[MAIN |debug] ../log_client.c:69:hello
|
|
[libqb|error] log_blackbox.c:196:qb_log_blackbox_print_from_file:
|
|
--
|
|
2.15.0
|
|
|