0
0
mirror of https://github.com/termux/termux-packages.git synced 2025-08-10 15:21:49 +00:00
Files
termux-packages/x11-packages/thunderbird/0009-impl-posix-shmem.patch
Robert Kirkman 0c687b97ed bump(x11/thunderbird): 137.0.1
- 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
2025-04-05 11:14:51 -05:00

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`.