Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 6 Oct 2019 03:59:05 +0000 (UTC)
From:      Kyle Evans <kevans@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r353135 - in stable: 11/lib/libusb 12/lib/libusb
Message-ID:  <201910060359.x963x5F3035444@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kevans
Date: Sun Oct  6 03:59:05 2019
New Revision: 353135
URL: https://svnweb.freebsd.org/changeset/base/353135

Log:
  MFC r353009: libusb: LIBUSB_DEBUG env var override of libusb_set_debug
  
  The debug level generally just controls verbosity of libusb for debugging
  libusb devices/usage. We allow the environment to set the debug level
  independent of the application, but the application will always override
  this if it explicitly sets the debug level.
  
  Changing the environment is easy, but patching the software to change the
  debug level isn't necessarily easy or possible. Further, there's this
  write-only debug_fixed variable that would seem to imply that the debug
  level should be fixed, but it isn't currently used. Change the logic to use
  strtol() so we can detect real 0 vs. conversion failure, then honor
  debug_fixed in libusb_set_debug.

Modified:
  stable/11/lib/libusb/libusb10.c
Directory Properties:
  stable/11/   (props changed)

Changes in other areas also in this revision:
Modified:
  stable/12/lib/libusb/libusb10.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/11/lib/libusb/libusb10.c
==============================================================================
--- stable/11/lib/libusb/libusb10.c	Sun Oct  6 03:56:02 2019	(r353134)
+++ stable/11/lib/libusb/libusb10.c	Sun Oct  6 03:59:05 2019	(r353135)
@@ -89,7 +89,8 @@ void
 libusb_set_debug(libusb_context *ctx, int level)
 {
 	ctx = GET_CONTEXT(ctx);
-	if (ctx)
+	/* debug_fixed is set when the environment overrides libusb_set_debug */
+	if (ctx && ctx->debug_fixed == 0)
 		ctx->debug = level;
 }
 
@@ -130,7 +131,7 @@ libusb_init(libusb_context **context)
 {
 	struct libusb_context *ctx;
 	pthread_condattr_t attr;
-	char *debug;
+	char *debug, *ep;
 	int ret;
 
 	ctx = malloc(sizeof(*ctx));
@@ -141,9 +142,23 @@ libusb_init(libusb_context **context)
 
 	debug = getenv("LIBUSB_DEBUG");
 	if (debug != NULL) {
-		ctx->debug = atoi(debug);
-		if (ctx->debug != 0)
+		/*
+		 * If LIBUSB_DEBUG is set, we'll honor that and use it to
+		 * override libusb_set_debug calls.
+		 */
+		errno = 0;
+		ctx->debug = strtol(debug, &ep, 10);
+		if (errno == 0 && *ep == '\0') {
 			ctx->debug_fixed = 1;
+		} else {
+			/*
+			 * LIBUSB_DEBUG conversion failed for some reason, but
+			 * we don't care about the specifics all that much.  We
+			 * can't use it either way.  Force it to the default,
+			 * 0, in case we had a partial number.
+			 */
+			ctx->debug = 0;
+		}
 	}
 	TAILQ_INIT(&ctx->pollfds);
 	TAILQ_INIT(&ctx->tr_done);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201910060359.x963x5F3035444>