From 057c8ca96d28d8c20c48a46648e61eb3784fd343 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stanis=C5=82aw=20Pitucha?= Date: Mon, 15 Apr 2024 10:18:00 +1000 Subject: [PATCH] rs: fix darwin --- pkgs/by-name/rs/rs/macos-reallocarray.patch | 26 +++++++++++++++++++++ pkgs/by-name/rs/rs/package.nix | 6 +++++ 2 files changed, 32 insertions(+) create mode 100644 pkgs/by-name/rs/rs/macos-reallocarray.patch diff --git a/pkgs/by-name/rs/rs/macos-reallocarray.patch b/pkgs/by-name/rs/rs/macos-reallocarray.patch new file mode 100644 index 000000000000..ca89cc4c4894 --- /dev/null +++ b/pkgs/by-name/rs/rs/macos-reallocarray.patch @@ -0,0 +1,26 @@ +Original from OpenBSD src/lib/libc/stdlib/reallocarray.c + +--- a/rs.c 2024-04-15 10:13:41 ++++ b/rs.c 2024-04-15 10:15:20 +@@ -103,6 +103,21 @@ + ep = getptrs(ep); \ + } while(0) + ++#ifdef __APPLE__ ++#define MUL_NO_OVERFLOW ((size_t)1 << (sizeof(size_t) * 4)) ++ ++void * ++reallocarray(void *optr, size_t nmemb, size_t size) ++{ ++ if ((nmemb >= MUL_NO_OVERFLOW || size >= MUL_NO_OVERFLOW) && ++ nmemb > 0 && SIZE_MAX / nmemb < size) { ++ errno = ENOMEM; ++ return NULL; ++ } ++ return realloc(optr, size * nmemb); ++} ++#endif ++ + int + main(int argc, char *argv[]) + { diff --git a/pkgs/by-name/rs/rs/package.nix b/pkgs/by-name/rs/rs/package.nix index 1b369eec9b34..9361ca564dc6 100644 --- a/pkgs/by-name/rs/rs/package.nix +++ b/pkgs/by-name/rs/rs/package.nix @@ -16,6 +16,11 @@ stdenv.mkDerivation rec { nativeBuildInputs = [ installShellFiles ]; + patches = [ + # add an implementation of reallocarray() from openbsd (not available on darwin) + ./macos-reallocarray.patch + ]; + buildInputs = [ libbsd ]; buildPhase = '' @@ -63,5 +68,6 @@ stdenv.mkDerivation rec { license = licenses.bsd3; maintainers = with maintainers; [ AndersonTorres ]; platforms = platforms.unix; + broken = stdenv.isx86_64 && stdenv.isDarwin; # missing strtonum() }; }