about summary refs log tree commit diff
path: root/pkgs/by-name/rs
diff options
context:
space:
mode:
authorStanisław Pitucha <git@viraptor.info>2024-04-15 10:18:00 +1000
committerStanisław Pitucha <git@viraptor.info>2024-04-16 19:23:09 +1000
commit057c8ca96d28d8c20c48a46648e61eb3784fd343 (patch)
tree7c0d036c1e4bea9362d6894b4abbdcc1401d2f45 /pkgs/by-name/rs
parent1f54fa2ddf2623784a2b4431b35a1b5ce91a14bf (diff)
rs: fix darwin
Diffstat (limited to 'pkgs/by-name/rs')
-rw-r--r--pkgs/by-name/rs/rs/macos-reallocarray.patch26
-rw-r--r--pkgs/by-name/rs/rs/package.nix6
2 files changed, 32 insertions, 0 deletions
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 0000000000000..ca89cc4c4894e
--- /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 1b369eec9b346..9361ca564dc6f 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()
   };
 }