From 32fcfde86b3d57305c29b545aa084d28c7c76fe9 Mon Sep 17 00:00:00 2001 From: Bastien Nocera Date: Wed, 23 May 2018 17:48:55 +0200 Subject: [PATCH] lib: Use GLib and libusb directly for debug output Use GLib internally to output debug information, and tell about libusb's LIBUSB_DEBUG envvar for libusb debug. fp_set_debug() is now a no-op. https://bugs.freedesktop.org/show_bug.cgi?id=106552 --- libfprint/aeslib.c | 3 +- libfprint/assembling.c | 3 +- libfprint/async.c | 4 +- libfprint/core.c | 106 ++++++--------------------------- libfprint/drivers/aes1610.c | 3 +- libfprint/drivers/aes1660.c | 3 +- libfprint/drivers/aes2501.c | 3 +- libfprint/drivers/aes2550.c | 3 +- libfprint/drivers/aes2660.c | 4 +- libfprint/drivers/aes3500.c | 3 +- libfprint/drivers/aes3k.c | 3 +- libfprint/drivers/aes4000.c | 3 +- libfprint/drivers/aesx660.c | 3 +- libfprint/drivers/elan.c | 3 +- libfprint/drivers/etes603.c | 6 +- libfprint/drivers/fdu2000.c | 7 ++- libfprint/drivers/upeksonly.c | 4 +- libfprint/drivers/upektc.c | 3 +- libfprint/drivers/upektc_img.c | 3 +- libfprint/drivers/upekts.c | 4 +- libfprint/drivers/uru4000.c | 4 +- libfprint/drivers/vcom5s.c | 4 +- libfprint/drivers/vfs0050.c | 3 +- libfprint/drivers/vfs101.c | 8 +-- libfprint/drivers/vfs301.c | 4 +- libfprint/drv.c | 4 +- libfprint/fp_internal.h | 31 ++++------ libfprint/poll.c | 4 +- libfprint/sync.c | 4 +- meson.build | 1 + 30 files changed, 90 insertions(+), 151 deletions(-) diff --git a/libfprint/aeslib.c b/libfprint/aeslib.c index 978454d..61811ad 100644 --- a/libfprint/aeslib.c +++ b/libfprint/aeslib.c @@ -19,13 +19,14 @@ #define FP_COMPONENT "aeslib" +#include "fp_internal.h" + #include #include #include #include -#include "fp_internal.h" #include "assembling.h" #include "aeslib.h" diff --git a/libfprint/assembling.c b/libfprint/assembling.c index d34cf37..2c4ccc6 100644 --- a/libfprint/assembling.c +++ b/libfprint/assembling.c @@ -21,13 +21,14 @@ #define FP_COMPONENT "assembling" +#include "fp_internal.h" + #include #include #include #include -#include "fp_internal.h" #include "assembling.h" static unsigned int calc_error(struct fpi_frame_asmbl_ctx *ctx, diff --git a/libfprint/async.c b/libfprint/async.c index 6718bac..f469a36 100644 --- a/libfprint/async.c +++ b/libfprint/async.c @@ -19,12 +19,12 @@ #define FP_COMPONENT "async" +#include "fp_internal.h" + #include #include #include -#include "fp_internal.h" - /* Drivers call this when device initialisation has completed */ void fpi_drvcb_open_complete(struct fp_dev *dev, int status) { diff --git a/libfprint/core.c b/libfprint/core.c index e01c16c..06fb24a 100644 --- a/libfprint/core.c +++ b/libfprint/core.c @@ -27,9 +27,6 @@ #include "fp_internal.h" -static int log_level = 0; -static int log_level_fixed = 0; - libusb_context *fpi_usb_ctx = NULL; GSList *opened_devices = NULL; @@ -116,52 +113,6 @@ GSList *opened_devices = NULL; static GSList *registered_drivers = NULL; -void fpi_log(enum fpi_log_level level, const char *component, - const char *function, const char *format, ...) -{ - va_list args; - FILE *stream = stdout; - const char *prefix; - - if (!log_level) - return; - if (level == FPRINT_LOG_LEVEL_WARNING && log_level < 2) - return; - if (level == FPRINT_LOG_LEVEL_INFO && log_level < 3) - return; - - switch (level) { - case FPRINT_LOG_LEVEL_INFO: - prefix = "info"; - break; - case FPRINT_LOG_LEVEL_WARNING: - stream = stderr; - prefix = "warning"; - break; - case FPRINT_LOG_LEVEL_ERROR: - stream = stderr; - prefix = "error"; - break; - case FPRINT_LOG_LEVEL_DEBUG: - stream = stderr; - prefix = "debug"; - break; - default: - stream = stderr; - prefix = "unknown"; - break; - } - - fprintf(stream, "%s:%s [%s] ", component ? component : "fp", prefix, - function); - - va_start (args, format); - vfprintf(stream, format, args); - va_end (args); - - fprintf(stream, "\n"); -} - static void register_driver(struct fp_driver *drv) { if (drv->id == 0) { @@ -787,38 +738,11 @@ API_EXPORTED int fp_dev_get_img_height(struct fp_dev *dev) * fp_set_debug: * @level: the verbosity level * - * Set message verbosity. - * - Level 0: no messages ever printed by the library (default) - * - Level 1: error messages are printed to stderr - * - Level 2: warning and error messages are printed to stderr - * - Level 3: informational messages are printed to stdout, warning and error - * messages are printed to stderr - * - * The default level is 0, which means no messages are ever printed. If you - * choose to increase the message verbosity level, ensure that your - * application does not close the stdout/stderr file descriptors. - * - * You are advised to set level 3. libfprint is conservative with its message - * logging and most of the time, will only log messages that explain error - * conditions and other oddities. This will help you debug your software. - * - * If the LIBFPRINT_DEBUG environment variable was set when libfprint was - * initialized, this function does nothing: the message verbosity is fixed - * to the value in the environment variable. - * - * If libfprint was compiled without any message logging, this function does - * nothing: you'll never get any messages. - * - * If libfprint was compiled with verbose debug message logging, this function - * does nothing: you'll always get messages from all levels. + * This call does nothing, see fp_init() for details. */ API_EXPORTED void fp_set_debug(int level) { - if (log_level_fixed) - return; - - log_level = level; - libusb_set_debug(fpi_usb_ctx, level); + /* Nothing */ } /** @@ -827,11 +751,27 @@ API_EXPORTED void fp_set_debug(int level) * Initialise libfprint. This function must be called before you attempt to * use the library in any way. * + * To enable debug output of libfprint specifically, use GLib's `G_MESSAGES_DEBUG` + * environment variable as explained in [Running and debugging GLib Applications](https://developer.gnome.org/glib/stable/glib-running.html#G_MESSAGES_DEBUG). + * + * The log domains used in libfprint are either `libfprint` or `libfprint-FP_COMPONENT` + * where `FP_COMPONENT` is defined in the source code for each driver, or component + * of the library. Starting with `all` and trimming down is advised. + * + * To enable debugging of libusb, for USB-based fingerprint reader drivers, use + * libusb's `LIBUSB_DEBUG` environment variable as explained in the + * [libusb-1.0 API Reference](http://libusb.sourceforge.net/api-1.0/#msglog). + * + * Example: + * + * ``` + * LIBUSB_DEBUG=4 G_MESSAGES_DEBUG=all my-libfprint-application + * ``` + * * Returns: 0 on success, non-zero on error. */ API_EXPORTED int fp_init(void) { - char *dbg = getenv("LIBFPRINT_DEBUG"); int r; G_DEBUG_HERE(); @@ -839,14 +779,6 @@ API_EXPORTED int fp_init(void) if (r < 0) return r; - if (dbg) { - log_level = atoi(dbg); - if (log_level) { - log_level_fixed = 1; - libusb_set_debug(fpi_usb_ctx, log_level); - } - } - register_drivers(); fpi_poll_init(); return 0; diff --git a/libfprint/drivers/aes1610.c b/libfprint/drivers/aes1610.c index 40797db..b47396b 100644 --- a/libfprint/drivers/aes1610.c +++ b/libfprint/drivers/aes1610.c @@ -25,6 +25,8 @@ #define FP_COMPONENT "aes1610" +#include "fp_internal.h" + #include #include @@ -32,7 +34,6 @@ #include #include -#include #include "driver_ids.h" diff --git a/libfprint/drivers/aes1660.c b/libfprint/drivers/aes1660.c index 32bea4e..ad28b06 100644 --- a/libfprint/drivers/aes1660.c +++ b/libfprint/drivers/aes1660.c @@ -19,6 +19,8 @@ #define FP_COMPONENT "aes1660" +#include "fp_internal.h" + #include #include @@ -26,7 +28,6 @@ #include -#include #include #include diff --git a/libfprint/drivers/aes2501.c b/libfprint/drivers/aes2501.c index a78a93d..c1bbc98 100644 --- a/libfprint/drivers/aes2501.c +++ b/libfprint/drivers/aes2501.c @@ -23,6 +23,8 @@ #define FP_COMPONENT "aes2501" +#include "fp_internal.h" + #include #include @@ -30,7 +32,6 @@ #include #include -#include #include "aes2501.h" #include "driver_ids.h" diff --git a/libfprint/drivers/aes2550.c b/libfprint/drivers/aes2550.c index bc8ffc1..0516bbc 100644 --- a/libfprint/drivers/aes2550.c +++ b/libfprint/drivers/aes2550.c @@ -23,6 +23,8 @@ #define FP_COMPONENT "aes2550" +#include "fp_internal.h" + #include #include @@ -30,7 +32,6 @@ #include #include -#include #include "aes2550.h" #include "driver_ids.h" diff --git a/libfprint/drivers/aes2660.c b/libfprint/drivers/aes2660.c index efe9670..bfc457d 100644 --- a/libfprint/drivers/aes2660.c +++ b/libfprint/drivers/aes2660.c @@ -19,6 +19,8 @@ #define FP_COMPONENT "aes2660" +#include "fp_internal.h" + #include #include @@ -26,8 +28,6 @@ #include -#include - #include #include diff --git a/libfprint/drivers/aes3500.c b/libfprint/drivers/aes3500.c index f229a1a..4428670 100644 --- a/libfprint/drivers/aes3500.c +++ b/libfprint/drivers/aes3500.c @@ -29,13 +29,14 @@ #define FP_COMPONENT "aes3500" +#include "fp_internal.h" + #include #include #include #include -#include #include "aes3k.h" #include "driver_ids.h" diff --git a/libfprint/drivers/aes3k.c b/libfprint/drivers/aes3k.c index ba96901..f50d2b4 100644 --- a/libfprint/drivers/aes3k.c +++ b/libfprint/drivers/aes3k.c @@ -36,13 +36,14 @@ #define FP_COMPONENT "aes3k" +#include "fp_internal.h" + #include #include #include #include -#include #include "aes3k.h" diff --git a/libfprint/drivers/aes4000.c b/libfprint/drivers/aes4000.c index d4f90b7..6118f33 100644 --- a/libfprint/drivers/aes4000.c +++ b/libfprint/drivers/aes4000.c @@ -26,13 +26,14 @@ #define FP_COMPONENT "aes4000" +#include "fp_internal.h" + #include #include #include #include -#include #include "aes3k.h" #include "driver_ids.h" diff --git a/libfprint/drivers/aesx660.c b/libfprint/drivers/aesx660.c index 98f6c75..ab67946 100644 --- a/libfprint/drivers/aesx660.c +++ b/libfprint/drivers/aesx660.c @@ -23,6 +23,8 @@ #define FP_COMPONENT "aesX660" +#include "fp_internal.h" + #include #include @@ -32,7 +34,6 @@ #include #include -#include #include "aesx660.h" diff --git a/libfprint/drivers/elan.c b/libfprint/drivers/elan.c index ccfd524..e528ecb 100644 --- a/libfprint/drivers/elan.c +++ b/libfprint/drivers/elan.c @@ -20,10 +20,11 @@ #define FP_COMPONENT "elan" +#include "fp_internal.h" + #include #include #include -#include #include #include "elan.h" diff --git a/libfprint/drivers/etes603.c b/libfprint/drivers/etes603.c index 9795757..60f81b2 100644 --- a/libfprint/drivers/etes603.c +++ b/libfprint/drivers/etes603.c @@ -33,6 +33,10 @@ * */ +#define FP_COMPONENT "etes603" + +#include "fp_internal.h" + #include #include #include @@ -41,8 +45,6 @@ #include #include -#define FP_COMPONENT "etes603" -#include #include "driver_ids.h" /* libusb defines */ diff --git a/libfprint/drivers/fdu2000.c b/libfprint/drivers/fdu2000.c index e14b860..b95ff62 100644 --- a/libfprint/drivers/fdu2000.c +++ b/libfprint/drivers/fdu2000.c @@ -17,15 +17,16 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#define FP_COMPONENT "fdu2000" + +#include "fp_internal.h" + #include #include #include #include -#define FP_COMPONENT "fdu2000" -#include - #include "driver_ids.h" #ifndef HAVE_MEMMEM diff --git a/libfprint/drivers/upeksonly.c b/libfprint/drivers/upeksonly.c index 63c051e..4d228d9 100644 --- a/libfprint/drivers/upeksonly.c +++ b/libfprint/drivers/upeksonly.c @@ -25,14 +25,14 @@ #define FP_COMPONENT "upeksonly" +#include "fp_internal.h" + #include #include #include #include -#include - #include #include "upeksonly.h" diff --git a/libfprint/drivers/upektc.c b/libfprint/drivers/upektc.c index e4f0edc..107f93d 100644 --- a/libfprint/drivers/upektc.c +++ b/libfprint/drivers/upektc.c @@ -20,10 +20,11 @@ #define FP_COMPONENT "upektc" +#include "fp_internal.h" + #include #include #include -#include #include "upektc.h" #include "driver_ids.h" diff --git a/libfprint/drivers/upektc_img.c b/libfprint/drivers/upektc_img.c index 843bcff..c193c07 100644 --- a/libfprint/drivers/upektc_img.c +++ b/libfprint/drivers/upektc_img.c @@ -19,13 +19,14 @@ #define FP_COMPONENT "upektc_img" +#include "fp_internal.h" + #include #include #include #include -#include #include "upektc_img.h" #include "driver_ids.h" diff --git a/libfprint/drivers/upekts.c b/libfprint/drivers/upekts.c index 4e572b9..d070404 100644 --- a/libfprint/drivers/upekts.c +++ b/libfprint/drivers/upekts.c @@ -27,14 +27,14 @@ #define FP_COMPONENT "upekts" +#include "fp_internal.h" + #include #include #include #include -#include - #include "driver_ids.h" #define EP_IN (1 | LIBUSB_ENDPOINT_IN) diff --git a/libfprint/drivers/uru4000.c b/libfprint/drivers/uru4000.c index 286f3d9..600bb27 100644 --- a/libfprint/drivers/uru4000.c +++ b/libfprint/drivers/uru4000.c @@ -20,6 +20,8 @@ #define FP_COMPONENT "uru4000" +#include "fp_internal.h" + #include #include #include @@ -28,8 +30,6 @@ #include #include -#include - #include "driver_ids.h" #define EP_INTR (1 | LIBUSB_ENDPOINT_IN) diff --git a/libfprint/drivers/vcom5s.c b/libfprint/drivers/vcom5s.c index 528dd47..dfbdca7 100644 --- a/libfprint/drivers/vcom5s.c +++ b/libfprint/drivers/vcom5s.c @@ -19,6 +19,8 @@ #define FP_COMPONENT "vcom5s" +#include "fp_internal.h" + /* TODO: * calibration? * image size: windows gets 300x300 through vpas enrollment util? @@ -32,8 +34,6 @@ #include #include -#include - #include "driver_ids.h" #define CTRL_IN 0xc0 diff --git a/libfprint/drivers/vfs0050.c b/libfprint/drivers/vfs0050.c index 31d793c..45adaa4 100644 --- a/libfprint/drivers/vfs0050.c +++ b/libfprint/drivers/vfs0050.c @@ -19,9 +19,10 @@ #define FP_COMPONENT "vfs0050" +#include "fp_internal.h" + #include #include -#include #include #include "driver_ids.h" diff --git a/libfprint/drivers/vfs101.c b/libfprint/drivers/vfs101.c index 625a411..afc72d9 100644 --- a/libfprint/drivers/vfs101.c +++ b/libfprint/drivers/vfs101.c @@ -17,14 +17,14 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#define FP_COMPONENT "vfs101" + +#include "fp_internal.h" + #include #include #include -#define FP_COMPONENT "vfs101" - -#include - #include "driver_ids.h" /* Input-Output usb endpoint */ diff --git a/libfprint/drivers/vfs301.c b/libfprint/drivers/vfs301.c index 833c05b..1b8a7db 100644 --- a/libfprint/drivers/vfs301.c +++ b/libfprint/drivers/vfs301.c @@ -21,6 +21,8 @@ #define FP_COMPONENT "vfs301" +#include "fp_internal.h" + #include #include #include @@ -32,8 +34,6 @@ #include "vfs301_proto.h" #include -#include - #include "driver_ids.h" /************************** GENERIC STUFF *************************************/ diff --git a/libfprint/drv.c b/libfprint/drv.c index a7ba846..719417d 100644 --- a/libfprint/drv.c +++ b/libfprint/drv.c @@ -19,11 +19,11 @@ #define FP_COMPONENT "drv" +#include "fp_internal.h" + #include #include -#include "fp_internal.h" - /* SSM: sequential state machine * Asynchronous driver design encourages some kind of state machine behind it. * In most cases, the state machine is entirely linear - you only go to the diff --git a/libfprint/fp_internal.h b/libfprint/fp_internal.h index fdaa408..3cf5629 100644 --- a/libfprint/fp_internal.h +++ b/libfprint/fp_internal.h @@ -21,8 +21,13 @@ #define __FPRINT_INTERNAL_H__ #include -#include +#ifdef FP_COMPONENT +#undef G_LOG_DOMAIN +#define G_LOG_DOMAIN "libfprint-"FP_COMPONENT +#endif + +#include #include #include @@ -34,26 +39,10 @@ const typeof( ((type *)0)->member ) *__mptr = (ptr); \ (type *)( (char *)__mptr - offsetof(type,member) );}) -enum fpi_log_level { - FPRINT_LOG_LEVEL_DEBUG, - FPRINT_LOG_LEVEL_INFO, - FPRINT_LOG_LEVEL_WARNING, - FPRINT_LOG_LEVEL_ERROR, -}; - -void fpi_log(enum fpi_log_level, const char *component, const char *function, - const char *format, ...); - -#ifndef FP_COMPONENT -#define FP_COMPONENT NULL -#endif - -#define _fpi_log(level, fmt...) fpi_log(level, FP_COMPONENT, __FUNCTION__, fmt) - -#define fp_dbg(fmt...) _fpi_log(FPRINT_LOG_LEVEL_DEBUG, fmt) -#define fp_info(fmt...) _fpi_log(FPRINT_LOG_LEVEL_INFO, fmt) -#define fp_warn(fmt...) _fpi_log(FPRINT_LOG_LEVEL_WARNING, fmt) -#define fp_err(fmt...) _fpi_log(FPRINT_LOG_LEVEL_ERROR, fmt) +#define fp_dbg g_debug +#define fp_info g_debug +#define fp_warn g_warning +#define fp_err g_error #ifndef NDEBUG #define BUG_ON(condition) \ diff --git a/libfprint/poll.c b/libfprint/poll.c index 7557bb0..c820103 100644 --- a/libfprint/poll.c +++ b/libfprint/poll.c @@ -19,6 +19,8 @@ #define FP_COMPONENT "poll" +#include "fp_internal.h" + #include #include #include @@ -27,8 +29,6 @@ #include #include -#include "fp_internal.h" - /** * SECTION:events * @title: Initialisation and events handling diff --git a/libfprint/sync.c b/libfprint/sync.c index c324e0b..c194f5c 100644 --- a/libfprint/sync.c +++ b/libfprint/sync.c @@ -19,11 +19,11 @@ #define FP_COMPONENT "sync" +#include "fp_internal.h" + #include #include -#include "fp_internal.h" - struct sync_open_data { struct fp_dev *dev; int status; diff --git a/meson.build b/meson.build index 93603b6..c11b3fd 100644 --- a/meson.build +++ b/meson.build @@ -9,6 +9,7 @@ project('libfprint', [ 'c', 'cpp' ], meson_version: '>= 0.45.0') add_project_arguments([ '-D_GNU_SOURCE' ], language: 'c') +add_project_arguments([ '-DG_LOG_DOMAIN="libfprint"' ], language: 'c') libfprint_conf = configuration_data()