FreeBSD already implemented os_get_free_size. Move the new Linux
implementation into the existing not-__FreeBSD__ block.
Fixes: 935613816f ("libobs/util: Update `os_get_free_size()`")
This fixes a regression on Linux, introduced in commit 9bc3082.
According to the POSIX specification for the exec family of commands,
"The first argument is the filename or pathname of the executable to
be executed". This was done correctly before, but the above commit
removed "sh" from the arguments, breaking the pipe function on Linux.
The frontend has set a log handler which locks the mutex in `LogString`.
If `os_dlopen` fails in the child process, it calls `blog` and attempted
to lock the mutex that may have already been locked by another thread
before `fork()`. This change prevents the child process from locking the
mutex, resolving the potential deadlock.
That is, leave only the code that was under USE_XDG. Previously the
Linux CMake build defined USE_XDG unconditionally, while it was not set
by the FreeBSD build.
The non-USE_XDG code was broken, and FreeBSD should follow the XDG
convention anyway (in particular, storing config files typically under
$HOME/.config/obs-studio). Defining USE_XDG in the os-freebsd.cmake
files would leave the non-USE_XDG code unused anywhere, so instead just
remove it.
As outlined in c5965c8605, bmalloc(0) is
pretty much always a mistake, possibly hiding other bugs.
It's been two years since that commit introduced a warning announcing
that this will crash in a future version of OBS, let's make that happen.
Avoid creating the screensaver inhibitor thread when another method has
been applied.
Make inhibition unavailable in a Flatpak if portal is not available.
New space availability keys seem to have very specific file system
requirements not documented anywhere. Using the opportunistic free
space key opportunistically (and falling back on the legacy value
otherwise) should always yield a "good-enough" free disk space value.
Transition from using popen() to using fork()/dup2()/execl() to provide
a way to read stderr from ffmpeg.
Co-Authored by: PatTheMav <PatTheMav@users.noreply.github.com>
MSVC noticed inline is not allowed, and new/delete replacments also
don't belong in a header file. We're also just leaning on
__STDCPP_DEFAULT_NEW_ALIGNMENT__ being 16 for MSVC x64 now.
While the NSURLVolumeAvailableCapacityForOpportunisticUsageKey resource
correctly reports available disk space for local volumes (regardless
of actual file system used), it does not report actual values for
attached network drives.
The NSURLVolumeAvailableCapacityKey resource will still report
available disk space as expected, so use this value for non-local
volumes instead.
By default duplicate non-static symbols loaded by dynamic libraries are
de-duplicated by the dynamic library loader. This can lead to issues
with statically linked libraries inside obs plugins if the symbols
share their signature: Whichever plugin is loaded first gets to "set"
the symbol (which can become problematic especially for C++ template
functions).
Using RTLD_LOCAL ensures that all symbols are hidden and can only be
explicitly loaded using dlsym() which avoids this issue.
Unfortunately due to the way scripting works in obs-studio, Python
still needs to be loaded with RTLD_GLOBAL, hence the branch in the fix.
With the lowest deployment target being macOS 11.0, there is no need
to check for the availability of the selectors on the NSProcessInfo
class anymore.