diff --git a/qutebrowser/misc/wmname.py b/qutebrowser/misc/wmname.py index 04d267d14..d59375bdb 100644 --- a/qutebrowser/misc/wmname.py +++ b/qutebrowser/misc/wmname.py @@ -26,12 +26,20 @@ class _WaylandDisplayStruct(ctypes.Structure): _WaylandDisplay = NewType("_WaylandDisplay", "ctypes._Pointer[_WaylandDisplayStruct]") +def _load_library(name: str) -> ctypes.CDLL: + lib = ctypes.util.find_library(name) + if lib is None: + raise Error(f"{name} library not found") + + try: + return ctypes.CDLL(lib) + except OSError as e: + raise Error(f"Failed to load {name} library: {e}") + + def _load_libwayland_client() -> ctypes.CDLL: """Load the Wayland client library.""" - try: - return ctypes.CDLL("libwayland-client.so") - except OSError as e: - raise Error(f"Failed to load libwayland-client: {e}") + return _load_library("wayland-client") def _pid_from_fd(fd: int) -> int: @@ -138,14 +146,7 @@ _X11Window = NewType("_X11Window", int) def _x11_load_lib() -> ctypes.CDLL: """Load the X11 library.""" - lib = ctypes.util.find_library("X11") - if lib is None: - raise Error("X11 library not found") - - try: - return ctypes.CDLL(lib) - except OSError as e: - raise Error(f"Failed to load X11 library: {e}") + return _load_library("X11") @contextlib.contextmanager diff --git a/tests/unit/misc/test_wmname.py b/tests/unit/misc/test_wmname.py index 4c4b6c50c..03c465d3b 100644 --- a/tests/unit/misc/test_wmname.py +++ b/tests/unit/misc/test_wmname.py @@ -28,9 +28,10 @@ def test_load_libwayland_client(): def test_load_libwayland_client_error(mocker: pytest_mock.MockerFixture): """Test that an error in loading the Wayland client library raises an error.""" + mocker.patch.object(ctypes.util, "find_library", return_value="libwayland-client.so.6") mocker.patch("ctypes.CDLL", side_effect=OSError("Library not found")) - with pytest.raises(wmname.Error, match="Failed to load libwayland-client"): + with pytest.raises(wmname.Error, match="Failed to load wayland-client"): wmname._load_libwayland_client()