---
 lib/include/libdvbv5/dvb-dev.h |  3 ++-
 lib/include/libdvbv5/dvb-fe.h  |  9 +++++++--
 lib/include/libdvbv5/dvb-log.h | 33 +++++++++++++++++----------------
 lib/libdvbv5/dvb-dev.c         |  3 ++-
 lib/libdvbv5/dvb-fe.c          | 15 ++++++++-------
 lib/libdvbv5/dvb-log.c         |  3 ++-
 utils/dvb/dvb-fe-tool.c        |  2 +-
 utils/dvb/dvbv5-daemon.c       |  9 +++++----
 utils/dvb/dvbv5-scan.c         |  2 +-
 utils/dvb/dvbv5-zap.c          |  2 +-
 10 files changed, 46 insertions(+), 35 deletions(-)

diff --git a/lib/include/libdvbv5/dvb-dev.h b/lib/include/libdvbv5/dvb-dev.h
index 55e0f065..396fcd07 100644
--- a/lib/include/libdvbv5/dvb-dev.h
+++ b/lib/include/libdvbv5/dvb-dev.h
@@ -243,6 +243,7 @@ void dvb_dev_stop_monitor(struct dvb_device *dvb);
  * @param logfunc      Callback function to be called when a log event
  *                     happens. Can either store the event into a file or
  *                     to print it at the TUI/GUI. Can be null.
+ * @param logpriv   Private data for log function
  *
  * @details Sets the function to report log errors and to set the verbosity
  *     level of debug report messages. If not called, or if logfunc is
@@ -252,7 +253,7 @@ void dvb_dev_stop_monitor(struct dvb_device *dvb);
  */
 void dvb_dev_set_log(struct dvb_device *dvb,
                     unsigned verbose,
-                    dvb_logfunc logfunc);
+                    dvb_logfunc logfunc, void *logpriv);
 
 /**
  * @brief Opens a dvb device
diff --git a/lib/include/libdvbv5/dvb-fe.h b/lib/include/libdvbv5/dvb-fe.h
index 1d3565ec..107cb03d 100644
--- a/lib/include/libdvbv5/dvb-fe.h
+++ b/lib/include/libdvbv5/dvb-fe.h
@@ -107,6 +107,7 @@
  * @param freq_bpf             SCR/Unicable band-pass filter frequency to use, 
in kHz
  * @param verbose              Verbosity level of the library (RW)
  * @param dvb_logfunc          Function used to write log messages (RO)
+ * @param logpriv                      Private data for logging function (RO)
  * @param default_charset      Name of the charset used by the DVB standard 
(RW)
  * @param output_charset       Name of the charset to output (system specific) 
(RW)
  *
@@ -140,7 +141,8 @@ struct dvb_v5_fe_parms {
 
        /* Function to write DVB logs */
        unsigned                        verbose;
-       dvb_logfunc                     logfunc;
+       dvb_logfunc                     logfunc;
+       void                            *logpriv;
 
        /* Charsets to be used by the conversion utilities */
        char                            *default_charset;
@@ -176,6 +178,7 @@ struct dvb_v5_fe_parms *dvb_fe_dummy(void);
  *                             happens. Can either store the event into a file
  *                             or to print it at the TUI/GUI. If NULL, the
  *                             library will use its internal handler.
+ * @param logpriv              Private data for dvb_logfunc
  * @param flags                        Flags to be passed to open. Currently 
only two
  *                             flags are supported: O_RDONLY or O_RDWR.
  *                             Using O_NONBLOCK may hit unexpected issues.
@@ -195,6 +198,7 @@ struct dvb_v5_fe_parms *dvb_fe_open_flags(int adapter, int 
frontend,
                                          unsigned verbose,
                                          unsigned use_legacy_call,
                                          dvb_logfunc logfunc,
+                                         void *logpriv,
                                          int flags);
 
 /**
@@ -231,6 +235,7 @@ struct dvb_v5_fe_parms *dvb_fe_open(int adapter, int 
frontend,
  * @param logfunc              Callback function to be called when a log event
  *                             happens. Can either store the event into a file
  *                             or to print it at the TUI/GUI.
+ * @param logpriv              Private data for dvb_logfunc
  *
  * @details This function should be called before using any other function at
  * the frontend library (or the other alternatives: dvb_fe_open() or
@@ -240,7 +245,7 @@ struct dvb_v5_fe_parms *dvb_fe_open(int adapter, int 
frontend,
  */
 struct dvb_v5_fe_parms *dvb_fe_open2(int adapter, int frontend,
                                    unsigned verbose, unsigned use_legacy_call,
-                                   dvb_logfunc logfunc);
+                                   dvb_logfunc logfunc, void *logpriv);
 
 /**
  * @brief Closes the frontend and frees allocated resources
diff --git a/lib/include/libdvbv5/dvb-log.h b/lib/include/libdvbv5/dvb-log.h
index 181a23c8..beba7aba 100644
--- a/lib/include/libdvbv5/dvb-log.h
+++ b/lib/include/libdvbv5/dvb-log.h
@@ -36,12 +36,12 @@
  */
 
 /**
- * @typedef void (*dvb_logfunc)(int level, const char *fmt, ...)
+ * @typedef void (*dvb_logfunc)(void *logpriv, int level, const char *fmt, ...)
  * @brief typedef used by dvb_fe_open2 for the log function
  * @ingroup ancillary
  */
 
-typedef void (*dvb_logfunc)(int level, const char *fmt, ...) __attribute__ (( 
format( printf, 2, 3 )));
+typedef void (*dvb_logfunc)(void *logpriv, int level, const char *fmt, ...) 
__attribute__ (( format( printf, 3, 4 )));
 
 /*
  * Macros used internally inside libdvbv5 frontend part, to output logs
@@ -52,48 +52,48 @@ typedef void (*dvb_logfunc)(int level, const char *fmt, 
...) __attribute__ (( fo
 #ifndef __DVB_FE_PRIV_H
 
 #define dvb_log(fmt, arg...) do {\
-       parms->logfunc(LOG_INFO, fmt, ##arg); \
+       parms->logfunc(parms->logpriv, LOG_INFO, fmt, ##arg); \
 } while (0)
 #define dvb_logerr(fmt, arg...) do {\
-       parms->logfunc(LOG_ERR, fmt, ##arg); \
+       parms->logfunc(parms->logpriv, LOG_ERR, fmt, ##arg); \
 } while (0)
 #define dvb_logdbg(fmt, arg...) do {\
-       parms->logfunc(LOG_DEBUG, fmt, ##arg); \
+       parms->logfunc(parms->logpriv, LOG_DEBUG, fmt, ##arg); \
 } while (0)
 #define dvb_logwarn(fmt, arg...) do {\
-       parms->logfunc(LOG_WARNING, fmt, ##arg); \
+       parms->logfunc(parms->logpriv, LOG_WARNING, fmt, ##arg); \
 } while (0)
 #define dvb_loginfo(fmt, arg...) do {\
-       parms->logfunc(LOG_NOTICE, fmt, ##arg); \
+       parms->logfunc(parms->logpriv, LOG_NOTICE, fmt, ##arg); \
 } while (0)
 
 #define dvb_perror(msg) do {\
-       parms->logfunc(LOG_ERR, "%s: %s", msg, strerror(errno)); \
+       parms->logfunc(parms->logpriv, LOG_ERR, "%s: %s", msg, 
strerror(errno)); \
 } while (0)
 
 #else
 
 #define dvb_log(fmt, arg...) do {\
-       parms->p.logfunc(LOG_INFO, fmt, ##arg); \
+       parms->p.logfunc(parms->p.logpriv, LOG_INFO, fmt, ##arg); \
 } while (0)
 #define dvb_logerr(fmt, arg...) do {\
-       parms->p.logfunc(LOG_ERR, fmt, ##arg); \
+       parms->p.logfunc(parms->p.logpriv, LOG_ERR, fmt, ##arg); \
 } while (0)
 #define dvb_logdbg(fmt, arg...) do {\
-       parms->p.logfunc(LOG_DEBUG, fmt, ##arg); \
+       parms->p.logfunc(parms->p.logpriv, LOG_DEBUG, fmt, ##arg); \
 } while (0)
 #define dvb_logwarn(fmt, arg...) do {\
-       parms->p.logfunc(LOG_WARNING, fmt, ##arg); \
+       parms->p.logfunc(parms->p.logpriv, LOG_WARNING, fmt, ##arg); \
 } while (0)
 #define dvb_loginfo(fmt, arg...) do {\
-       parms->p.logfunc(LOG_NOTICE, fmt, ##arg); \
+       parms->p.logfunc(parms->p.logpriv, LOG_NOTICE, fmt, ##arg); \
 } while (0)
 #define dvb_loglevel(level, fmt, arg...) do {\
-       parms->p.logfunc(level, fmt, ##arg); \
+       parms->p.logfunc(parms->p.logpriv, level, fmt, ##arg); \
 } while (0)
 
 #define dvb_perror(msg) do {\
-       parms->p.logfunc(LOG_ERR, "%s: %s", msg, strerror(errno)); \
+       parms->p.logfunc(parms->p.logpriv, LOG_ERR, "%s: %s", msg, 
strerror(errno)); \
 } while (0)
 
 #endif
@@ -105,9 +105,10 @@ typedef void (*dvb_logfunc)(int level, const char *fmt, 
...) __attribute__ (( fo
  *       if the library client doesn't desire to override with something else.
  * @ingroup ancillary
  *
+ * @param logpriv              private data, unused by the default function
  * @param level                level of the message, as defined at syslog.h
  * @param fmt          format string (same as format string on sprintf)
  */
-void dvb_default_log(int level, const char *fmt, ...) __attribute__ (( format( 
printf, 2, 3 )));
+void dvb_default_log(void *logpriv, int level, const char *fmt, ...) 
__attribute__ (( format( printf, 3, 4 )));
 
 #endif
diff --git a/lib/libdvbv5/dvb-dev.c b/lib/libdvbv5/dvb-dev.c
index 447c9fd5..d642c49c 100644
--- a/lib/libdvbv5/dvb-dev.c
+++ b/lib/libdvbv5/dvb-dev.c
@@ -163,12 +163,13 @@ struct dvb_dev_list *dvb_dev_seek_by_adapter(struct 
dvb_device *d,
 }
 
 void dvb_dev_set_log(struct dvb_device *dvb, unsigned verbose,
-                    dvb_logfunc logfunc)
+                    dvb_logfunc logfunc, void *logpriv)
 {
        struct dvb_v5_fe_parms_priv *parms = (void *)dvb->fe_parms;
 
        /* FIXME: how to get remote logs and set verbosity? */
        parms->p.verbose = verbose;
+       parms->p.logpriv = logpriv;
 
        if (logfunc != NULL)
                        parms->p.logfunc = logfunc;
diff --git a/lib/libdvbv5/dvb-fe.c b/lib/libdvbv5/dvb-fe.c
index 5cad6955..1088df7e 100644
--- a/lib/libdvbv5/dvb-fe.c
+++ b/lib/libdvbv5/dvb-fe.c
@@ -113,22 +113,22 @@ struct dvb_v5_fe_parms *dvb_fe_open(int adapter, int 
frontend,
                                                  unsigned use_legacy_call)
 {
        return dvb_fe_open_flags(adapter, frontend, verbose, use_legacy_call,
-                                NULL, O_RDWR);
+                                NULL, NULL, O_RDWR);
 
 }
 
 struct dvb_v5_fe_parms *dvb_fe_open2(int adapter, int frontend,
                                    unsigned verbose, unsigned use_legacy_call,
-                                   dvb_logfunc logfunc)
+                                   dvb_logfunc logfunc, void *logpriv)
 {
        return dvb_fe_open_flags(adapter, frontend, verbose, use_legacy_call,
-                                logfunc, O_RDWR);
+                                logfunc, logpriv, O_RDWR);
 }
 
 struct dvb_v5_fe_parms *dvb_fe_open_flags(int adapter, int frontend,
                                          unsigned verbose,
                                          unsigned use_legacy_call,
-                                         dvb_logfunc logfunc,
+                                         dvb_logfunc logfunc, void *logpriv,
                                          int flags)
 {
        int ret;
@@ -147,7 +147,7 @@ struct dvb_v5_fe_parms *dvb_fe_open_flags(int adapter, int 
frontend,
        dvb_dev = dvb_dev_seek_by_adapter(dvb, adapter, frontend,
                                     DVB_DEVICE_FRONTEND);
        if (!dvb_dev) {
-               logfunc(LOG_ERR, _("adapter %d, frontend %d not found"),
+               logfunc(logpriv, LOG_ERR, _("adapter %d, frontend %d not 
found"),
                        adapter, frontend);
                dvb_dev_free(dvb);
                return NULL;
@@ -155,12 +155,12 @@ struct dvb_v5_fe_parms *dvb_fe_open_flags(int adapter, 
int frontend,
        fname = strdup(dvb_dev->path);
        dvb_dev_free(dvb);
        if (!fname) {
-               logfunc(LOG_ERR, _("fname calloc: %s"), strerror(errno));
+               logfunc(logpriv, LOG_ERR, _("fname calloc: %s"), 
strerror(errno));
                return NULL;
        }
        parms = calloc(sizeof(*parms), 1);
        if (!parms) {
-               logfunc(LOG_ERR, _("parms calloc: %s"), strerror(errno));
+               logfunc(logpriv, LOG_ERR, _("parms calloc: %s"), 
strerror(errno));
                free(fname);
                return NULL;
        }
@@ -168,6 +168,7 @@ struct dvb_v5_fe_parms *dvb_fe_open_flags(int adapter, int 
frontend,
        parms->p.default_charset = "iso-8859-1";
        parms->p.output_charset = "utf-8";
        parms->p.logfunc = logfunc;
+       parms->p.logpriv = logpriv;
        parms->p.lna = LNA_AUTO;
        parms->p.sat_number = -1;
        parms->p.abort = 0;
diff --git a/lib/libdvbv5/dvb-log.c b/lib/libdvbv5/dvb-log.c
index f92da5f8..c5cf0b64 100644
--- a/lib/libdvbv5/dvb-log.c
+++ b/lib/libdvbv5/dvb-log.c
@@ -55,8 +55,9 @@ static const struct loglevel {
 };
 #define LOG_COLOROFF 8
 
-void dvb_default_log(int level, const char *fmt, ...)
+void dvb_default_log(void *logpriv, int level, const char *fmt, ...)
 {
+    (void)logpriv; /* unused by default function */
        if(level > sizeof(loglevels) / sizeof(struct loglevel) - 2) // ignore 
LOG_COLOROFF as well
                level = LOG_INFO;
        va_list ap;
diff --git a/utils/dvb/dvb-fe-tool.c b/utils/dvb/dvb-fe-tool.c
index ef2fee16..1d5f19ad 100644
--- a/utils/dvb/dvb-fe-tool.c
+++ b/utils/dvb/dvb-fe-tool.c
@@ -349,7 +349,7 @@ int main(int argc, char *argv[])
                        return -1;
        }
 
-       dvb_dev_set_log(dvb, verbose, NULL);
+       dvb_dev_set_log(dvb, verbose, NULL, NULL);
        if (device_mon) {
                dvb_dev_find(dvb, &dev_change_monitor, NULL);
                while (1) {
diff --git a/utils/dvb/dvbv5-daemon.c b/utils/dvb/dvbv5-daemon.c
index 23b2e456..58485ac6 100644
--- a/utils/dvb/dvbv5-daemon.c
+++ b/utils/dvb/dvbv5-daemon.c
@@ -553,12 +553,13 @@ static ssize_t scan_data(char *buf, int buf_size, const 
char *fmt, ...)
 /*
  * Remote log
  */
-void dvb_remote_log(int level, const char *fmt, ...)
+void dvb_remote_log(void *priv, int level, const char *fmt, ...)
 {
        int ret;
        char *buf;
 
        va_list ap;
+    int fd = *(int*)priv;
 
        va_start(ap, fmt);
        ret = vasprintf(&buf, fmt, ap);
@@ -569,8 +570,8 @@ void dvb_remote_log(int level, const char *fmt, ...)
 
        va_end(ap);
 
-       if (dvb_fd > 0)
-               send_data(dvb_fd, "%i%s%i%s", 0, "log", level, buf);
+       if (fd > 0)
+               send_data(fd, "%i%s%i%s", 0, "log", level, buf);
        else
                local_log(level, buf);
 
@@ -1486,7 +1487,7 @@ int main(int argc, char *argv[])
        }
 
        /* FIXME: should allow the caller to set the verbosity */
-       dvb_dev_set_log(dvb, 1, dvb_remote_log);
+       dvb_dev_set_log(dvb, 1, dvb_remote_log, &dvb_fd);
 
        /* Listen up to 5 connections */
        listen(sockfd, 5);
diff --git a/utils/dvb/dvbv5-scan.c b/utils/dvb/dvbv5-scan.c
index a9b131e1..49b1b657 100644
--- a/utils/dvb/dvbv5-scan.c
+++ b/utils/dvb/dvbv5-scan.c
@@ -520,7 +520,7 @@ int main(int argc, char **argv)
        dvb = dvb_dev_alloc();
        if (!dvb)
                return -1;
-       dvb_dev_set_log(dvb, verbose, NULL);
+       dvb_dev_set_log(dvb, verbose, NULL, NULL);
        dvb_dev_find(dvb, NULL, NULL);
        parms = dvb->fe_parms;
 
diff --git a/utils/dvb/dvbv5-zap.c b/utils/dvb/dvbv5-zap.c
index a88500d1..b2eb5aa4 100644
--- a/utils/dvb/dvbv5-zap.c
+++ b/utils/dvb/dvbv5-zap.c
@@ -884,7 +884,7 @@ int main(int argc, char **argv)
                        return -1;
        }
 
-       dvb_dev_set_log(dvb, args.verbose, NULL);
+       dvb_dev_set_log(dvb, args.verbose, NULL, NULL);
        dvb_dev_find(dvb, NULL, NULL);
        parms = dvb->fe_parms;
 
-- 
2.14.1

Reply via email to