From f5613187b44dbef8c36c5a35e70eaa175d622354 Mon Sep 17 00:00:00 2001 From: chilledfrogs Date: Fri, 10 Apr 2026 22:02:01 +0200 Subject: [PATCH] improve *BSD compat (#1425) reuse some macOS stuff since lsblk and /proc doesn't apply to *BSD --- copyparty/__init__.py | 8 ++++++++ copyparty/fsutil.py | 8 ++++---- copyparty/tcpsrv.py | 9 ++++++++- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/copyparty/__init__.py b/copyparty/__init__.py index 55befeb7..8bffed86 100644 --- a/copyparty/__init__.py +++ b/copyparty/__init__.py @@ -44,6 +44,14 @@ ANYWIN = WINDOWS or sys.platform in ["msys", "cygwin"] MACOS = platform.system() == "Darwin" +FREEBSD = platform.system() == "FreeBSD" + +OPENBSD = platform.system() == "OpenBSD" + +ANYBSD = FREEBSD or OPENBSD + +UNIX = MACOS or ANYBSD + GRAAL = platform.python_implementation() == "GraalVM" EXE = bool(getattr(sys, "frozen", False)) diff --git a/copyparty/fsutil.py b/copyparty/fsutil.py index 9b2540c2..b0b1e8a4 100644 --- a/copyparty/fsutil.py +++ b/copyparty/fsutil.py @@ -7,7 +7,7 @@ import os import re import time -from .__init__ import ANYWIN, MACOS +from .__init__ import ANYWIN, FREEBSD, MACOS, UNIX from .authsrv import AXS, VFS, AuthSrv from .bos import bos from .util import chkcmd, json_hesc, min_ex, undot @@ -88,7 +88,7 @@ class Fstab(object): def _from_sp_mount(self) -> dict[str, str]: sptn = r"^.*? on (.*) type ([^ ]+) \(.*" - if MACOS: + if MACOS or FREEBSD: sptn = r"^.*? on (.*) \(([^ ]+), .*" ptn = re.compile(sptn) @@ -118,7 +118,7 @@ class Fstab(object): def build_tab(self) -> None: self.log("inspecting mtab for changes") - dtab = self._from_sp_mount() if MACOS else self._from_proc() + dtab = self._from_sp_mount() if UNIX else self._from_proc() # keep empirically-correct values if mounttab unchanged srctab = str(sorted(dtab.items())) @@ -130,7 +130,7 @@ class Fstab(object): try: fuses = [mp for mp, fs in dtab.items() if fs == "fuseblk"] - if not fuses or MACOS: + if not fuses or UNIX: raise Exception() try: so, _ = chkcmd(["lsblk", "-nrfo", "FSTYPE,MOUNTPOINT"]) # centos6 diff --git a/copyparty/tcpsrv.py b/copyparty/tcpsrv.py index c28406bf..c98b1d3b 100644 --- a/copyparty/tcpsrv.py +++ b/copyparty/tcpsrv.py @@ -7,7 +7,7 @@ import socket import sys import time -from .__init__ import ANYWIN, PY2, TYPE_CHECKING, unicode +from .__init__ import ANYWIN, OPENBSD, PY2, TYPE_CHECKING, UNIX, unicode from .cert import gencert from .qrkode import QrCode, qr2png, qr2svg, qr2txt, qrgen from .util import ( @@ -510,6 +510,13 @@ class TcpSrv(object): return eps def _extdevs_nix(self) -> Generator[str, None, None]: + if UNIX: + so, _ = chkcmd(["netstat", "-nrf", "inet"]) + for ln in so.split("\n"): + if not ln.startswith("default"): + continue + yield ln.split()[7] if OPENBSD else ln.split()[3] + return with open("/proc/net/route", "rb") as f: next(f) for ln in f: