[arch-commits] Commit in libusb/repos (3 files)

Andreas Radke andyrtr at gemini.archlinux.org
Mon Mar 14 19:09:28 UTC 2022


    Date: Monday, March 14, 2022 @ 19:09:28
  Author: andyrtr
Revision: 439679

archrelease: copy trunk to testing-x86_64

Added:
  libusb/repos/testing-x86_64/
  libusb/repos/testing-x86_64/0001-core-Install-first-context-as-implicit-default.patch
    (from rev 439678, libusb/trunk/0001-core-Install-first-context-as-implicit-default.patch)
  libusb/repos/testing-x86_64/PKGBUILD
    (from rev 439678, libusb/trunk/PKGBUILD)

-----------------------------------------------------------+
 0001-core-Install-first-context-as-implicit-default.patch |  109 ++++++++++++
 PKGBUILD                                                  |   47 +++++
 2 files changed, 156 insertions(+)

Copied: libusb/repos/testing-x86_64/0001-core-Install-first-context-as-implicit-default.patch (from rev 439678, libusb/trunk/0001-core-Install-first-context-as-implicit-default.patch)
===================================================================
--- testing-x86_64/0001-core-Install-first-context-as-implicit-default.patch	                        (rev 0)
+++ testing-x86_64/0001-core-Install-first-context-as-implicit-default.patch	2022-03-14 19:09:28 UTC (rev 439679)
@@ -0,0 +1,109 @@
+From d46cbbac4851ce6e49d8dacb0daa328453eb8a84 Mon Sep 17 00:00:00 2001
+From: Benjamin Berg <bberg at redhat.com>
+Date: Tue, 22 Feb 2022 11:45:38 +0100
+Subject: [PATCH] core: Install first context as implicit default
+
+There was a behaviour change in libusb, which triggers issues when the
+API is misused. This caused gutenprint to crash, see
+https://bugzilla.redhat.com/show_bug.cgi?id=2055504
+
+For now, work around this by installing an implicit default. But, change
+the code to log an error in case this "feature" is being used.
+---
+ libusb/core.c    | 16 +++++++++++++---
+ libusb/libusbi.h | 15 ++++++++++++++-
+ tests/umockdev.c | 31 +++++++++++++++++++++++++++++++
+ 3 files changed, 58 insertions(+), 4 deletions(-)
+
+diff --git a/libusb/core.c b/libusb/core.c
+index 1c1ada1..c75ddae 100644
+--- a/libusb/core.c
++++ b/libusb/core.c
+@@ -41,6 +41,7 @@ static libusb_log_cb log_handler;
+ #endif
+ 
+ struct libusb_context *usbi_default_context;
++struct libusb_context *usbi_fallback_context;
+ static int default_context_refcnt;
+ static usbi_mutex_static_t default_context_lock = USBI_MUTEX_INITIALIZER;
+ static struct usbi_option default_context_options[LIBUSB_OPTION_MAX];
+@@ -2284,7 +2285,7 @@ int API_EXPORTED libusb_init(libusb_context **ctx)
+ 
+ 	usbi_mutex_static_lock(&default_context_lock);
+ 
+-	if (!ctx && usbi_default_context) {
++	if (!ctx && default_context_refcnt > 0) {
+ 		usbi_dbg(usbi_default_context, "reusing default context");
+ 		default_context_refcnt++;
+ 		usbi_mutex_static_unlock(&default_context_lock);
+@@ -2354,9 +2355,15 @@ int API_EXPORTED libusb_init(libusb_context **ctx)
+ 			goto err_io_exit;
+ 	}
+ 
+-	if (ctx)
++	if (ctx) {
+ 		*ctx = _ctx;
+ 
++		if (!usbi_fallback_context) {
++			usbi_fallback_context = _ctx;
++			usbi_warn(usbi_fallback_context, "installing new context as implicit default");
++		}
++	}
++
+ 	usbi_mutex_static_unlock(&default_context_lock);
+ 
+ 	return 0;
+@@ -2429,6 +2436,8 @@ void API_EXPORTED libusb_exit(libusb_context *ctx)
+ 
+ 	if (!ctx)
+ 		usbi_default_context = NULL;
++	if (ctx == usbi_fallback_context)
++		usbi_fallback_context = NULL;
+ 
+ 	usbi_mutex_static_unlock(&default_context_lock);
+ 
+@@ -2575,7 +2584,8 @@ static void log_v(struct libusb_context *ctx, enum libusb_log_level level,
+ #else
+ 	enum libusb_log_level ctx_level;
+ 
+-	ctx = usbi_get_context(ctx);
++	ctx = ctx ? ctx : usbi_default_context;
++	ctx = ctx ? ctx : usbi_fallback_context;
+ 	if (ctx)
+ 		ctx_level = ctx->debug;
+ 	else
+diff --git a/libusb/libusbi.h b/libusb/libusbi.h
+index 5f0d5c2..580add8 100644
+--- a/libusb/libusbi.h
++++ b/libusb/libusbi.h
+@@ -436,13 +436,26 @@ struct libusb_context {
+ };
+ 
+ extern struct libusb_context *usbi_default_context;
++extern struct libusb_context *usbi_fallback_context;
+ 
+ extern struct list_head active_contexts_list;
+ extern usbi_mutex_static_t active_contexts_lock;
+ 
+ static inline struct libusb_context *usbi_get_context(struct libusb_context *ctx)
+ {
+-	return ctx ? ctx : usbi_default_context;
++	static int warned = 0;
++
++	if (!ctx) {
++		ctx = usbi_default_context;
++	}
++	if (!ctx) {
++		ctx = usbi_fallback_context;
++		if (ctx && warned == 0) {
++			usbi_err(ctx, "API misuse! Using non-default context as implicit default.");
++			warned = 1;
++		}
++	}
++	return ctx;
+ }
+ 
+ enum usbi_event_flags {
+-- 
+2.35.1
+

Copied: libusb/repos/testing-x86_64/PKGBUILD (from rev 439678, libusb/trunk/PKGBUILD)
===================================================================
--- testing-x86_64/PKGBUILD	                        (rev 0)
+++ testing-x86_64/PKGBUILD	2022-03-14 19:09:28 UTC (rev 439679)
@@ -0,0 +1,47 @@
+# Maintainer: David Runge <dvzrv at archlinux.org>
+# Contributor: Bartłomiej Piotrowski <bpiotrowski at archlinux.org>
+# Contributor: Tobias Powalowski <tpowa at archlinux.org>
+
+pkgname=libusb
+pkgver=1.0.25
+pkgrel=3
+pkgdesc="Library that provides generic access to USB devices"
+arch=(x86_64)
+url="https://libusb.info/"
+license=(LGPL2.1)
+depends=(glibc)
+makedepends=(systemd)
+provides=(libusb-1.0.so)
+options=(debug)
+source=("https://github.com/${pkgname}/${pkgname}/releases/download/v$pkgver/${pkgname}-$pkgver.tar.bz2"
+         0001-core-Install-first-context-as-implicit-default.patch)
+sha512sums=('f1e6e5577d4bd1ff136927dc66c615014a06ac332ddd797b1d1ad5f7b68e2405e66068dcb210e2f0ae3e31681603ef72efbd88bf7fbe0eb41ce700fdc3f92f9d'
+            '0a8575ca6c155d2fe3c7720ca24b502a93f47ce879235cbf58120396044a7345e049032b9c66258a92b5ba4d8cc8c4afda566f4772cddd8305abdf8742d9e55b')
+b2sums=('3aecfbf9fc068fdfb8e612918bb895988f8400dc2c3ffd96a81792ab844d632f0c098947200512ddc37cfa9003956f8454c1d0362973a5d646a225f81cc2923b'
+        '008b2629c73f7358cb13b93123f94634e410aacaf491074be67c4fac54ecb2aa5cde93d4f0c076148e7ac7cf8530250496d801506d0250dccce89fd57d3cb380')
+
+prepare() {
+  cd "$pkgname-$pkgver"
+  # FS#74110 / Work around API misuse in gutenprint - patch taken from Fedora
+  patch -Np1 -i "$srcdir"/0001-core-Install-first-context-as-implicit-default.patch
+  autoreconf -fiv
+}
+
+build() {
+  cd "$pkgname-$pkgver"
+  ./configure --prefix=/usr
+  make
+}
+
+check() {
+  cd "$pkgname-$pkgver"
+  make -k check
+}
+
+package () {
+  depends+=(libudev.so)
+
+  cd "$pkgname-$pkgver"
+  make DESTDIR="$pkgdir" install
+  install -vDm 644 {AUTHORS,ChangeLog,README} -t "${pkgdir}/usr/share/doc/${pkgname}/"
+}



More information about the arch-commits mailing list