mirror of
https://github.com/termux/termux-packages.git
synced 2025-08-10 15:21:49 +00:00
- Fixes #24070 - makes the `mozconfig.cfg`, `build.sh` and patches of `thunderbird` very similar to `firefox`, except for places where `thunderbird` is different - `disable-systray-x86_64.patch`: fixes the build of `thunderbird` 136.0.1 for x86_64 Termux specifically. has been tested at runtime on a bare metal 64-bit Android-x86 device, and behaves as expected (uniform behavior with other architectures of Termux `thunderbird` 136.0.1) - `toolbar-based-custom-compose-window-width-for-ralfwerner.patch`: hardcoded custom dimensions of the edit window formatting toolbar to provide a workaround for edit window minimum text wrapping width high-dpi-scaling low-resolution situations in HTML mode while preserving the formatting toolbar functionality - `icu-22132.patch`: fixes a bug in `libicu` that has been happening for a long time, which causes these features of `thunderbird` to begin functioning: - Search Bar - Address Book - Customize Toolbars - Calendar - Tasks - Chat - Settings Button - Hamburger Button
159 lines
4.6 KiB
Diff
159 lines
4.6 KiB
Diff
SharedMemory_posix.cpp is being transitioned away from, and will be deleted in a
|
|
future firefox version after this commit
|
|
https://github.com/mozilla/gecko-dev/commit/8cbcede05e9563dae119db2105668dfa134c6691
|
|
|
|
--- a/ipc/glue/SharedMemory_posix.cpp
|
|
+++ b/ipc/glue/SharedMemory_posix.cpp
|
|
@@ -40,6 +40,65 @@
|
|
#include "prenv.h"
|
|
#include "nsXULAppAPI.h" // for XRE_IsParentProcess
|
|
|
|
+static int shm_unlink(const char *name) {
|
|
+ size_t namelen;
|
|
+ char *fname;
|
|
+
|
|
+ /* Construct the filename. */
|
|
+ while (name[0] == '/') ++name;
|
|
+
|
|
+ if (name[0] == '\0') {
|
|
+ /* The name "/" is not supported. */
|
|
+ errno = EINVAL;
|
|
+ return -1;
|
|
+ }
|
|
+
|
|
+ namelen = strlen(name);
|
|
+ fname = (char *) alloca(sizeof("@TERMUX_PREFIX@/tmp/") - 1 + namelen + 1);
|
|
+ memcpy(fname, "@TERMUX_PREFIX@/tmp/", sizeof("@TERMUX_PREFIX@/tmp/") - 1);
|
|
+ memcpy(fname + sizeof("@TERMUX_PREFIX@/tmp/") - 1, name, namelen + 1);
|
|
+
|
|
+ return unlink(fname);
|
|
+}
|
|
+
|
|
+static int shm_open(const char *name, int oflag, mode_t mode) {
|
|
+ size_t namelen;
|
|
+ char *fname;
|
|
+ int fd;
|
|
+
|
|
+ /* Construct the filename. */
|
|
+ while (name[0] == '/') ++name;
|
|
+
|
|
+ if (name[0] == '\0') {
|
|
+ /* The name "/" is not supported. */
|
|
+ errno = EINVAL;
|
|
+ return -1;
|
|
+ }
|
|
+
|
|
+ namelen = strlen(name);
|
|
+ fname = (char *) alloca(sizeof("@TERMUX_PREFIX@/tmp/") - 1 + namelen + 1);
|
|
+ memcpy(fname, "@TERMUX_PREFIX@/tmp/", sizeof("@TERMUX_PREFIX@/tmp/") - 1);
|
|
+ memcpy(fname + sizeof("@TERMUX_PREFIX@/tmp/") - 1, name, namelen + 1);
|
|
+
|
|
+ fd = open(fname, oflag, mode);
|
|
+ if (fd != -1) {
|
|
+ /* We got a descriptor. Now set the FD_CLOEXEC bit. */
|
|
+ int flags = fcntl(fd, F_GETFD, 0);
|
|
+ flags |= FD_CLOEXEC;
|
|
+ flags = fcntl(fd, F_SETFD, flags);
|
|
+
|
|
+ if (flags == -1) {
|
|
+ /* Something went wrong. We cannot return the descriptor. */
|
|
+ int save_errno = errno;
|
|
+ close(fd);
|
|
+ fd = -1;
|
|
+ errno = save_errno;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return fd;
|
|
+}
|
|
+
|
|
namespace mozilla::ipc {
|
|
|
|
void SharedMemory::ResetImpl() {
|
|
@@ -101,7 +160,7 @@
|
|
// FreeBSD in version 13.
|
|
|
|
#if !defined(HAVE_MEMFD_CREATE) && defined(XP_LINUX) && \
|
|
- defined(SYS_memfd_create)
|
|
+ defined(SYS_memfd_create) && !defined(__TERMUX__)
|
|
|
|
// Older libc versions (e.g., glibc before 2.27) don't have the
|
|
// wrapper, but we can supply our own; see `linux_memfd_defs.h`.
|
|
--- a/ipc/glue/SharedMemoryPlatform_posix.cpp
|
|
+++ b/ipc/glue/SharedMemoryPlatform_posix.cpp
|
|
@@ -39,6 +39,65 @@
|
|
#include "prenv.h"
|
|
#include "nsXULAppAPI.h" // for XRE_IsParentProcess
|
|
|
|
+static int shm_unlink(const char *name) {
|
|
+ size_t namelen;
|
|
+ char *fname;
|
|
+
|
|
+ /* Construct the filename. */
|
|
+ while (name[0] == '/') ++name;
|
|
+
|
|
+ if (name[0] == '\0') {
|
|
+ /* The name "/" is not supported. */
|
|
+ errno = EINVAL;
|
|
+ return -1;
|
|
+ }
|
|
+
|
|
+ namelen = strlen(name);
|
|
+ fname = (char *) alloca(sizeof("@TERMUX_PREFIX@/tmp/") - 1 + namelen + 1);
|
|
+ memcpy(fname, "@TERMUX_PREFIX@/tmp/", sizeof("@TERMUX_PREFIX@/tmp/") - 1);
|
|
+ memcpy(fname + sizeof("@TERMUX_PREFIX@/tmp/") - 1, name, namelen + 1);
|
|
+
|
|
+ return unlink(fname);
|
|
+}
|
|
+
|
|
+static int shm_open(const char *name, int oflag, mode_t mode) {
|
|
+ size_t namelen;
|
|
+ char *fname;
|
|
+ int fd;
|
|
+
|
|
+ /* Construct the filename. */
|
|
+ while (name[0] == '/') ++name;
|
|
+
|
|
+ if (name[0] == '\0') {
|
|
+ /* The name "/" is not supported. */
|
|
+ errno = EINVAL;
|
|
+ return -1;
|
|
+ }
|
|
+
|
|
+ namelen = strlen(name);
|
|
+ fname = (char *) alloca(sizeof("@TERMUX_PREFIX@/tmp/") - 1 + namelen + 1);
|
|
+ memcpy(fname, "@TERMUX_PREFIX@/tmp/", sizeof("@TERMUX_PREFIX@/tmp/") - 1);
|
|
+ memcpy(fname + sizeof("@TERMUX_PREFIX@/tmp/") - 1, name, namelen + 1);
|
|
+
|
|
+ fd = open(fname, oflag, mode);
|
|
+ if (fd != -1) {
|
|
+ /* We got a descriptor. Now set the FD_CLOEXEC bit. */
|
|
+ int flags = fcntl(fd, F_GETFD, 0);
|
|
+ flags |= FD_CLOEXEC;
|
|
+ flags = fcntl(fd, F_SETFD, flags);
|
|
+
|
|
+ if (flags == -1) {
|
|
+ /* Something went wrong. We cannot return the descriptor. */
|
|
+ int save_errno = errno;
|
|
+ close(fd);
|
|
+ fd = -1;
|
|
+ errno = save_errno;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return fd;
|
|
+}
|
|
+
|
|
namespace mozilla::ipc::shared_memory {
|
|
|
|
// memfd_create is a nonstandard interface for creating anonymous
|
|
@@ -101,7 +160,7 @@
|
|
// FreeBSD in version 13.
|
|
|
|
#if !defined(HAVE_MEMFD_CREATE) && defined(XP_LINUX) && \
|
|
- defined(SYS_memfd_create)
|
|
+ defined(SYS_memfd_create) && !defined(__TERMUX__)
|
|
|
|
// Older libc versions (e.g., glibc before 2.27) don't have the
|
|
// wrapper, but we can supply our own; see `linux_memfd_defs.h`.
|