Em Wed, 15 Nov 2017 12:33:35 +0100 Rafaël Carré <funman@xxxxxxxxxxxx> escreveu: At v4l-utils, we're using about the same submission rules as with the Linux Kernel. So, I would be expecting a patch description and, most importantly, a Signed-off-by. > --- > 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); That breaks the ABI. I guess the best here would be to create a new function (dvb_dev_set_logpriv?), and keep this function name for backward compatibility. > > /** > * @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; To avoid breaking API, please put this at dvb_v5_fe_parms_priv. > > /* 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 ))); Same applies here: we'll likely need a new type, keeping the old one for backward compat. > > /* > * 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; > Thanks, Mauro