---
 .../version-management/cvs/default.nix             |    7 ++++-
 .../applications/version-management/cvs/zlib.patch |   31 ++++++++++++++++++++
 2 files changed, 37 insertions(+), 1 deletions(-)
 create mode 100644 pkgs/applications/version-management/cvs/zlib.patch

diff --git a/pkgs/applications/version-management/cvs/default.nix 
b/pkgs/applications/version-management/cvs/default.nix
index 05b33f2..8c38937 100644
--- a/pkgs/applications/version-management/cvs/default.nix
+++ b/pkgs/applications/version-management/cvs/default.nix
@@ -8,7 +8,12 @@ stdenv.mkDerivation {
     sha256 = "0pjir8cwn0087mxszzbsi1gyfc6373vif96cw4q3m1x6p49kd1bq";
   };
 
-  patches = [ ./getcwd-chroot.patch ];
+  patches = [ ./getcwd-chroot.patch
+              # patch taken from gentoo:
+              # without it this command hangs:
+              # cvs -z3 -d:pserver:[email protected]:/cvsroot co 
ocaml/extlib-dev
+              ./zlib.patch
+            ];
 
   preConfigure =
     # Apply the Debian patches.
diff --git a/pkgs/applications/version-management/cvs/zlib.patch 
b/pkgs/applications/version-management/cvs/zlib.patch
new file mode 100644
index 0000000..234c6c1
--- /dev/null
+++ b/pkgs/applications/version-management/cvs/zlib.patch
@@ -0,0 +1,31 @@
+Index: src/zlib.c
+===================================================================
+RCS file: /sources/cvs/ccvs/src/zlib.c,v
+retrieving revision 1.31
+retrieving revision 1.32
+diff -u -r1.31 -r1.32
+--- a/src/zlib.c       3 Jun 2005 18:26:09 -0000       1.31
++++ b/src/zlib.c       28 Oct 2005 14:10:59 -0000      1.32
+@@ -221,15 +221,14 @@
+            point.  */
+       assert (bd->size == 0);
+ 
+-      /* This will work well in the server, because this call will
+-         do an unblocked read and fetch all the available data.  In
+-         the client, this will read a single byte from the stdio
+-         stream, which will cause us to call inflate once per byte.
+-         It would be more efficient if we could make a call which
+-         would fetch all the available bytes, and at least one byte.  */
+-
++      /* On the server, this will do an unblocking read of as much data as is
++       * available.  On the client, with a blocking input descriptor and the
++       * current fd_buffer implementation, this should read as much data as
++       * is currently available, and at least 1 byte (or EOF), from the
++       * underlying buffer.
++       */
+       status = (*cb->buf->input) (cb->buf->closure, bd->text,
+-                                  need, BUFFER_DATA_SIZE, &nread);
++                                  need ? 1 : 0, BUFFER_DATA_SIZE, &nread);
+ 
+       if (status == -2)
+           /* Don't try to recover from memory allcoation errors.  */
-- 
1.7.1

_______________________________________________
nix-dev mailing list
[email protected]
https://mail.cs.uu.nl/mailman/listinfo/nix-dev

Reply via email to