summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordholland <dholland@pkgsrc.org>2018-03-14 14:05:37 +0000
committerdholland <dholland@pkgsrc.org>2018-03-14 14:05:37 +0000
commitdfec5570bc0f8a9e6daa1e7fc48b7650078706e0 (patch)
treed3d5e3943c7637596081a3701a489dff314b5c3f
parent673189e11244f47af8cd37153d4a993a165fd307 (diff)
downloadpkgsrc-dfec5570bc0f8a9e6daa1e7fc48b7650078706e0.tar.gz
Partial build fixes for ocaml 4.06.
not at all clear this thing is worth the trouble...
-rw-r--r--net/mldonkey/distinfo50
-rw-r--r--net/mldonkey/patches/patch-config_Makefile.in3
-rw-r--r--net/mldonkey/patches/patch-config_configure.in3
-rw-r--r--net/mldonkey/patches/patch-src_config_unix_os_stubs.c.c3
-rw-r--r--net/mldonkey/patches/patch-src_networks_donkey_donkeyGlobals.ml3
-rw-r--r--net/mldonkey/patches/patch-src_utils_cdk_bzip2.ml126
-rw-r--r--net/mldonkey/patches/patch-src_utils_cdk_bzip2.mli24
-rw-r--r--net/mldonkey/patches/patch-src_utils_cdk_bzlib.ml24
-rw-r--r--net/mldonkey/patches/patch-src_utils_cdk_bzlib.mli24
-rw-r--r--net/mldonkey/patches/patch-src_utils_cdk_filename2.ml39
-rw-r--r--net/mldonkey/patches/patch-src_utils_cdk_gdstubs.c3
-rw-r--r--net/mldonkey/patches/patch-src_utils_cdk_genlex2.ml39
-rw-r--r--net/mldonkey/patches/patch-src_utils_cdk_gzip.ml180
-rw-r--r--net/mldonkey/patches/patch-src_utils_cdk_gzip.mli33
-rw-r--r--net/mldonkey/patches/patch-src_utils_cdk_string2.ml102
-rw-r--r--net/mldonkey/patches/patch-src_utils_cdk_string2.mli28
-rw-r--r--net/mldonkey/patches/patch-src_utils_cdk_tar.mlcpp112
-rw-r--r--net/mldonkey/patches/patch-src_utils_cdk_unix2.ml38
-rw-r--r--net/mldonkey/patches/patch-src_utils_cdk_zip.ml183
-rw-r--r--net/mldonkey/patches/patch-src_utils_cdk_zlib.ml47
-rw-r--r--net/mldonkey/patches/patch-src_utils_cdk_zlib.mli153
-rw-r--r--net/mldonkey/patches/patch-src_utils_cdk_zlibstubs.c3
-rw-r--r--net/mldonkey/patches/patch-src_utils_extlib_IO.ml117
-rw-r--r--net/mldonkey/patches/patch-src_utils_extlib_IO.mli41
-rw-r--r--net/mldonkey/patches/patch-src_utils_lib_fst_hash.c23
-rw-r--r--net/mldonkey/patches/patch-src_utils_lib_md4.ml410
-rw-r--r--net/mldonkey/patches/patch-src_utils_lib_md4.mli24
-rw-r--r--net/mldonkey/patches/patch-src_utils_lib_misc.ml22
-rw-r--r--net/mldonkey/patches/patch-src_utils_lib_misc2.mlcpp23
-rw-r--r--net/mldonkey/patches/patch-src_utils_lib_options.ml436
-rw-r--r--net/mldonkey/patches/patch-src_utils_lib_os_stubs.h3
-rw-r--r--net/mldonkey/patches/patch-src_utils_lib_syslog.ml47
-rw-r--r--net/mldonkey/patches/patch-src_utils_lib_tiger.c24
-rw-r--r--net/mldonkey/patches/patch-src_utils_lib_unix32.ml80
-rw-r--r--net/mldonkey/patches/patch-src_utils_lib_unix32.mli20
-rw-r--r--net/mldonkey/patches/patch-src_utils_lib_url.ml34
-rw-r--r--net/mldonkey/patches/patch-src_utils_lib_verificationBitmap.ml72
-rw-r--r--net/mldonkey/patches/patch-src_utils_net_terminal.ml3
38 files changed, 2168 insertions, 31 deletions
diff --git a/net/mldonkey/distinfo b/net/mldonkey/distinfo
index f20bb724f90..e1ece5b2dc3 100644
--- a/net/mldonkey/distinfo
+++ b/net/mldonkey/distinfo
@@ -1,17 +1,43 @@
-$NetBSD: distinfo,v 1.64 2016/08/15 15:48:19 jaapb Exp $
+$NetBSD: distinfo,v 1.65 2018/03/14 14:05:37 dholland Exp $
SHA1 (mldonkey-3.1.5.tar.bz2) = 7bc4f9272ecfe6403eef7062766b26bf321e3015
RMD160 (mldonkey-3.1.5.tar.bz2) = 63a21aef47a7510b7f9867544345c8f03edc89c3
SHA512 (mldonkey-3.1.5.tar.bz2) = 96e75acf91d7ecc41490f898e06d284da27404c7e567f173936d8113885a3b4b6bc93341358f92a30d3f699eef681d97ce56414a37bb02a535ad2da4d4ad13a3
Size (mldonkey-3.1.5.tar.bz2) = 2847382 bytes
-SHA1 (patch-config_Makefile.in) = a575c505c1f736bc3940790b43a6cf2083f29112
-SHA1 (patch-config_configure.in) = f9c3887e04a9727e13fecd47d763462a413913f3
-SHA1 (patch-src_config_unix_os_stubs.c.c) = 4cc60c1019a93212157d526e15269079c1e84e20
-SHA1 (patch-src_networks_donkey_donkeyGlobals.ml) = a9734496b883e4ced2a6a744d0b2fcf331b56ba1
-SHA1 (patch-src_utils_cdk_gdstubs.c) = 52717da3310492d3d737b5332e295573e5142f8a
-SHA1 (patch-src_utils_cdk_zip.ml) = 3a511187821445040a7d53b80fb3f9682f905463
-SHA1 (patch-src_utils_cdk_zlibstubs.c) = 14d61998e620b27afbecbe5e058c8ef466a68ecb
-SHA1 (patch-src_utils_lib_fst_hash.c) = f5b69a13d8ab7f3149e82b6f0f37425fdd62a945
-SHA1 (patch-src_utils_lib_options.ml4) = 9e47644d41606a2fb29f5e3c2609d2d36d97b745
-SHA1 (patch-src_utils_lib_os_stubs.h) = 4128c7507cff2f70708ab38684f7fd60af6f6bca
-SHA1 (patch-src_utils_net_terminal.ml) = 8745d3d6f605c9609febfea4e84c5c6619be0d14
+SHA1 (patch-config_Makefile.in) = 84f235f7ad4e6a9cdec807a24d3f11f769a01399
+SHA1 (patch-config_configure.in) = 0f187754d590a565b22ef402351dbe18c456a8c5
+SHA1 (patch-src_config_unix_os_stubs.c.c) = 6abe8ef9a040be0716e3d6c88b48764b6dd7ed55
+SHA1 (patch-src_networks_donkey_donkeyGlobals.ml) = 5f0b36213b6e6185077cd5c8d82b314b1c50c8c2
+SHA1 (patch-src_utils_cdk_bzip2.ml) = 77f7b96a12930df3843c38baa69a90ad73a26f8d
+SHA1 (patch-src_utils_cdk_bzip2.mli) = c54fcf33541ada525d33d6485a9362bb1cb5c8cf
+SHA1 (patch-src_utils_cdk_bzlib.ml) = fd13e153d484ed6d07dfeaaf5e19560cac92e0a2
+SHA1 (patch-src_utils_cdk_bzlib.mli) = 2057ae8479851ad49b5fd5630e51c63f5c3d08f3
+SHA1 (patch-src_utils_cdk_filename2.ml) = 08c1da16ee18c32b2efe4342030054a8e396960b
+SHA1 (patch-src_utils_cdk_gdstubs.c) = 9d8ef81fcf3515ab5337769aef12c6aacbb4eb81
+SHA1 (patch-src_utils_cdk_genlex2.ml) = 679554178ef641ae573523599ecb0587c4cefb78
+SHA1 (patch-src_utils_cdk_gzip.ml) = c044e15df645f3262664ca136fddabf7e5e2a0d1
+SHA1 (patch-src_utils_cdk_gzip.mli) = 9eaef0cfae3844742ca14a1aca3c900ae22e813c
+SHA1 (patch-src_utils_cdk_string2.ml) = 8f73f9be699dfa92e2360c1ce94b26d4d5e1e62c
+SHA1 (patch-src_utils_cdk_string2.mli) = 5ed5cdc6fb12b964bb65d861a33901e9ec68d504
+SHA1 (patch-src_utils_cdk_tar.mlcpp) = 75e2cab5d1e3d1e880a13bd0f7b2e29f7c0ca2be
+SHA1 (patch-src_utils_cdk_unix2.ml) = 3893de3d70704fc625b6cb2e2e405911b92a32ab
+SHA1 (patch-src_utils_cdk_zip.ml) = a875053a90c911e2f07fcfc75aa307e6ba7cd5b4
+SHA1 (patch-src_utils_cdk_zlib.ml) = a2ad3cdde37fe9ee329c1e9193e7744bda167a4a
+SHA1 (patch-src_utils_cdk_zlib.mli) = bf6125e1812ece75d48ee3a7fda88ef9f172bd26
+SHA1 (patch-src_utils_cdk_zlibstubs.c) = cd005903f050e2c9fee1f745ada40f5dad2e3985
+SHA1 (patch-src_utils_extlib_IO.ml) = 8d889c88345ba5e622200558760b221abde4ab7a
+SHA1 (patch-src_utils_extlib_IO.mli) = 8f41b20aa762f7ba22fec958862015f81adc2952
+SHA1 (patch-src_utils_lib_fst_hash.c) = c96999a09d392293fc6dc997f3a2d5465bd2e8d8
+SHA1 (patch-src_utils_lib_md4.ml) = 3d283d01ff1a95cb2893b52bccefd63d1c28f6c6
+SHA1 (patch-src_utils_lib_md4.mli) = ad6c4085f6ef803e0e97be15ad7380bc6f24555e
+SHA1 (patch-src_utils_lib_misc.ml) = 947a8f24d1ea2a05b8a83d2d7da84c7f9d991602
+SHA1 (patch-src_utils_lib_misc2.mlcpp) = 077de6829a0d7367352c5b6ea5562c42e441a396
+SHA1 (patch-src_utils_lib_options.ml4) = aa7a752f894a09d2a1fe3f69e1796d560f241e24
+SHA1 (patch-src_utils_lib_os_stubs.h) = a6707829311c46dd598d269c465a02f0fa8fc701
+SHA1 (patch-src_utils_lib_syslog.ml) = e3993e6a3a008bc7e52eb414e980afb41658dafb
+SHA1 (patch-src_utils_lib_tiger.c) = d4b3b9a3de0a64dee442911a4d9b30d075091a7e
+SHA1 (patch-src_utils_lib_unix32.ml) = 81f4b15ece553bb7a46a046026bb3d2f74d5d2b2
+SHA1 (patch-src_utils_lib_unix32.mli) = 39ae8385f2b43bcb961476c639acfbace4774197
+SHA1 (patch-src_utils_lib_url.ml) = aa1194997f44e7437ada3012058455964c4573f2
+SHA1 (patch-src_utils_lib_verificationBitmap.ml) = f8d7af0eff1674ca83a98a800e53e2a41da9922a
+SHA1 (patch-src_utils_net_terminal.ml) = f601ea7facc3f31f9f288567a094fbd3e1bda70c
diff --git a/net/mldonkey/patches/patch-config_Makefile.in b/net/mldonkey/patches/patch-config_Makefile.in
index 048f35d8246..e91eb986ae3 100644
--- a/net/mldonkey/patches/patch-config_Makefile.in
+++ b/net/mldonkey/patches/patch-config_Makefile.in
@@ -1,6 +1,7 @@
-$NetBSD: patch-config_Makefile.in,v 1.1 2012/09/14 19:23:31 jaapb Exp $
+$NetBSD: patch-config_Makefile.in,v 1.2 2018/03/14 14:05:37 dholland Exp $
Correct include paths for lablgtk 2.16
+
--- config/Makefile.in.orig 2012-07-01 17:47:41.000000000 +0000
+++ config/Makefile.in
@@ -655,15 +655,18 @@ install:: opt
diff --git a/net/mldonkey/patches/patch-config_configure.in b/net/mldonkey/patches/patch-config_configure.in
index 804df22a9f5..6f4207142c7 100644
--- a/net/mldonkey/patches/patch-config_configure.in
+++ b/net/mldonkey/patches/patch-config_configure.in
@@ -1,6 +1,7 @@
-$NetBSD: patch-config_configure.in,v 1.6 2016/08/15 15:48:19 jaapb Exp $
+$NetBSD: patch-config_configure.in,v 1.7 2018/03/14 14:05:37 dholland Exp $
Correct include paths for lablgtk 2.16
+
--- config/configure.in.orig 2012-08-05 15:49:02.000000000 +0000
+++ config/configure.in
@@ -1347,15 +1364,15 @@ if test "$GTK_CONFIG" = "no"; then
diff --git a/net/mldonkey/patches/patch-src_config_unix_os_stubs.c.c b/net/mldonkey/patches/patch-src_config_unix_os_stubs.c.c
index 125b287a42d..7f701c06846 100644
--- a/net/mldonkey/patches/patch-src_config_unix_os_stubs.c.c
+++ b/net/mldonkey/patches/patch-src_config_unix_os_stubs.c.c
@@ -1,6 +1,7 @@
-$NetBSD: patch-src_config_unix_os_stubs.c.c,v 1.1 2016/08/15 15:48:19 jaapb Exp $
+$NetBSD: patch-src_config_unix_os_stubs.c.c,v 1.2 2018/03/14 14:05:37 dholland Exp $
Compile with OCaml 4.03
+
--- src/config/unix/os_stubs_c.c.orig 2010-07-16 13:56:35.000000000 +0000
+++ src/config/unix/os_stubs_c.c
@@ -66,7 +66,7 @@ ssize_t os_read(OS_FD fd, char *buf, siz
diff --git a/net/mldonkey/patches/patch-src_networks_donkey_donkeyGlobals.ml b/net/mldonkey/patches/patch-src_networks_donkey_donkeyGlobals.ml
index 5e8eb8dcf40..8c81b09068b 100644
--- a/net/mldonkey/patches/patch-src_networks_donkey_donkeyGlobals.ml
+++ b/net/mldonkey/patches/patch-src_networks_donkey_donkeyGlobals.ml
@@ -1,6 +1,7 @@
-$NetBSD: patch-src_networks_donkey_donkeyGlobals.ml,v 1.1 2016/08/15 15:48:19 jaapb Exp $
+$NetBSD: patch-src_networks_donkey_donkeyGlobals.ml,v 1.2 2018/03/14 14:05:37 dholland Exp $
Compile with OCaml 4.03
+
--- src/networks/donkey/donkeyGlobals.ml.orig 2011-10-25 17:33:21.000000000 +0000
+++ src/networks/donkey/donkeyGlobals.ml
@@ -781,7 +781,6 @@ let set_client_name c name md4 =
diff --git a/net/mldonkey/patches/patch-src_utils_cdk_bzip2.ml b/net/mldonkey/patches/patch-src_utils_cdk_bzip2.ml
new file mode 100644
index 00000000000..ed2158f096b
--- /dev/null
+++ b/net/mldonkey/patches/patch-src_utils_cdk_bzip2.ml
@@ -0,0 +1,126 @@
+$NetBSD: patch-src_utils_cdk_bzip2.ml,v 1.1 2018/03/14 14:05:37 dholland Exp $
+
+Fix build with ocaml 4.06
+
+--- src/utils/cdk/bzip2.ml~ 2006-03-05 10:41:06.000000000 +0000
++++ src/utils/cdk/bzip2.ml
+@@ -7,7 +7,7 @@ let buffer_size = 1024
+
+ type in_channel =
+ { in_chan: Pervasives.in_channel;
+- in_buffer: string;
++ in_buffer: bytes;
+ mutable in_pos: int;
+ mutable in_avail: int;
+ mutable in_eof: bool;
+@@ -16,7 +16,7 @@ type in_channel =
+
+ let open_in_chan ic =
+ { in_chan = ic;
+- in_buffer = String.create buffer_size;
++ in_buffer = Bytes.create buffer_size;
+ in_pos = 0;
+ in_avail = 0;
+ in_eof = false;
+@@ -32,12 +32,12 @@ let open_in filename =
+ let read_byte iz =
+ if iz.in_avail = 0 then begin
+ let n = Pervasives.input iz.in_chan iz.in_buffer 0
+- (String.length iz.in_buffer) in
++ (Bytes.length iz.in_buffer) in
+ if n = 0 then raise End_of_file;
+ iz.in_pos <- 0;
+ iz.in_avail <- n
+ end;
+- let c = iz.in_buffer.[iz.in_pos] in
++ let c = Bytes.get iz.in_buffer iz.in_pos in
+ iz.in_pos <- iz.in_pos + 1;
+ iz.in_avail <- iz.in_avail - 1;
+ Char.code c
+@@ -53,19 +53,19 @@ let read_int32 iz =
+ (Int32.shift_left (Int32.of_int b4) 24)))
+
+ let rec input iz buf pos len =
+- if pos < 0 || len < 0 || pos + len > String.length buf then
++ if pos < 0 || len < 0 || pos + len > Bytes.length buf then
+ invalid_arg "Bzip2.input";
+ if iz.in_eof then 0 else begin
+ if iz.in_avail = 0 then begin
+ let n = Pervasives.input iz.in_chan iz.in_buffer 0
+- (String.length iz.in_buffer) in
++ (Bytes.length iz.in_buffer) in
+ if n = 0 then raise(Error("truncated file"));
+ iz.in_pos <- 0;
+ iz.in_avail <- n
+ end;
+ let (finished, used_in, used_out) =
+ try
+- Bzlib.decompress iz.in_stream iz.in_buffer iz.in_pos iz.in_avail
++ Bzlib.decompress iz.in_stream (Bytes.to_string iz.in_buffer) iz.in_pos iz.in_avail
+ buf pos len
+ with Bzlib.Error(_, e) ->
+ raise(Error(Bzlib.string_of_error e)) in
+@@ -88,10 +88,10 @@ let rec really_input iz buf pos len =
+ really_input iz buf (pos + n) (len - n)
+ end
+
+-let char_buffer = String.create 1
++let char_buffer = Bytes.create 1
+
+ let input_char iz =
+- if input iz char_buffer 0 1 = 0 then raise End_of_file else char_buffer.[0]
++ if input iz char_buffer 0 1 = 0 then raise End_of_file else Bytes.get char_buffer 0
+
+ let input_byte iz =
+ Char.code (input_char iz)
+@@ -106,7 +106,7 @@ let close_in iz =
+
+ type out_channel =
+ { out_chan: Pervasives.out_channel;
+- out_buffer: string;
++ out_buffer: bytes;
+ mutable out_pos: int;
+ mutable out_avail: int;
+ out_stream: Bzlib.stream;
+@@ -115,7 +115,7 @@ type out_channel =
+ let open_out_chan ?(level = 6) oc =
+ if level < 1 || level > 9 then invalid_arg "Bzip2.open_out: bad level";
+ { out_chan = oc;
+- out_buffer = String.create buffer_size;
++ out_buffer = Bytes.create buffer_size;
+ out_pos = 0;
+ out_avail = buffer_size;
+ out_stream = Bzlib.compress_init level 0 0;
+@@ -132,7 +132,7 @@ let rec output oz buf pos len =
+ (* Printf.printf "Flushing out_avail\n"; *)
+ Pervasives.output oz.out_chan oz.out_buffer 0 oz.out_pos;
+ oz.out_pos <- 0;
+- oz.out_avail <- String.length oz.out_buffer
++ oz.out_avail <- Bytes.length oz.out_buffer
+ end;
+ let (_, used_in, used_out) =
+ try
+@@ -147,8 +147,8 @@ let rec output oz buf pos len =
+ if used_in < len then output oz buf (pos + used_in) (len - used_in)
+
+ let output_char oz c =
+- char_buffer.[0] <- c;
+- output oz char_buffer 0 1
++ let s = String.make 1 c in
++ output oz s 0 1
+
+ let output_byte oz b =
+ output_char oz (Char.unsafe_chr b)
+@@ -159,10 +159,10 @@ let flush oz =
+ if oz.out_avail = 0 then begin
+ Pervasives.output oz.out_chan oz.out_buffer 0 oz.out_pos;
+ oz.out_pos <- 0;
+- oz.out_avail <- String.length oz.out_buffer
++ oz.out_avail <- Bytes.length oz.out_buffer
+ end;
+ let (finished, _, used_out) =
+- Bzlib.compress oz.out_stream oz.out_buffer 0 0
++ Bzlib.compress oz.out_stream (Bytes.to_string oz.out_buffer) 0 0
+ oz.out_buffer oz.out_pos oz.out_avail
+ Bzlib.BZ_FINISH in
+ oz.out_pos <- oz.out_pos + used_out;
diff --git a/net/mldonkey/patches/patch-src_utils_cdk_bzip2.mli b/net/mldonkey/patches/patch-src_utils_cdk_bzip2.mli
new file mode 100644
index 00000000000..75575e67e0c
--- /dev/null
+++ b/net/mldonkey/patches/patch-src_utils_cdk_bzip2.mli
@@ -0,0 +1,24 @@
+$NetBSD: patch-src_utils_cdk_bzip2.mli,v 1.1 2018/03/14 14:05:37 dholland Exp $
+
+Fix build with ocaml 4.06
+
+--- src/utils/cdk/bzip2.mli~ 2005-09-13 09:49:40.000000000 +0000
++++ src/utils/cdk/bzip2.mli
+@@ -22,7 +22,7 @@ val input_byte: in_channel -> int
+ (* Same as [Bzip2.input_char], but return the 8-bit integer representing
+ the character.
+ Raise [End_of_file] if no more compressed data is available. *)
+-val input: in_channel -> string -> int -> int -> int
++val input: in_channel -> bytes -> int -> int -> int
+ (* [input ic buf pos len] uncompresses up to [len] characters
+ from the given channel [ic],
+ storing them in string [buf], starting at character number [pos].
+@@ -38,7 +38,7 @@ val input: in_channel -> string -> int -
+ exactly [len] characters.)
+ Exception [Invalid_argument "Bzip2.input"] is raised if
+ [pos] and [len] do not designate a valid substring of [buf]. *)
+-val really_input: in_channel -> string -> int -> int -> unit
++val really_input: in_channel -> bytes -> int -> int -> unit
+ (* [really_input ic buf pos len] uncompresses [len] characters
+ from the given channel, storing them in
+ string [buf], starting at character number [pos].
diff --git a/net/mldonkey/patches/patch-src_utils_cdk_bzlib.ml b/net/mldonkey/patches/patch-src_utils_cdk_bzlib.ml
new file mode 100644
index 00000000000..e57cba5f4de
--- /dev/null
+++ b/net/mldonkey/patches/patch-src_utils_cdk_bzlib.ml
@@ -0,0 +1,24 @@
+$NetBSD: patch-src_utils_cdk_bzlib.ml,v 1.1 2018/03/14 14:05:37 dholland Exp $
+
+Fix build with ocaml 4.06
+
+--- src/utils/cdk/bzlib.ml~ 2005-08-01 20:09:13.000000000 +0000
++++ src/utils/cdk/bzlib.ml
+@@ -23,7 +23,7 @@ type action = BZ_RUN | BZ_FLUSH | BZ_FIN
+
+ external compress_init: int -> int -> int -> stream = "camlzip_bzCompressInit"
+ external compress:
+- stream -> string -> int -> int -> string -> int -> int -> action
++ stream -> string -> int -> int -> bytes -> int -> int -> action
+ -> bool * int * int
+ = "camlzip_bzCompress_bytecode" "camlzip_bzCompress"
+ external compress_end: stream -> unit = "camlzip_bzCompressEnd"
+@@ -31,7 +31,7 @@ external compress_end: stream -> unit =
+
+ external decompress_init: int -> bool -> stream = "camlzip_bzDecompressInit"
+ external decompress:
+- stream -> string -> int -> int -> string -> int -> int -> bool * int * int
++ stream -> string -> int -> int -> bytes -> int -> int -> bool * int * int
+ = "camlzip_bzDecompress_bytecode" "camlzip_bzDecompress"
+ external decompress_end: stream -> unit = "camlzip_bzDecompressEnd"
+
diff --git a/net/mldonkey/patches/patch-src_utils_cdk_bzlib.mli b/net/mldonkey/patches/patch-src_utils_cdk_bzlib.mli
new file mode 100644
index 00000000000..8da73662ba9
--- /dev/null
+++ b/net/mldonkey/patches/patch-src_utils_cdk_bzlib.mli
@@ -0,0 +1,24 @@
+$NetBSD: patch-src_utils_cdk_bzlib.mli,v 1.1 2018/03/14 14:05:37 dholland Exp $
+
+Fix build with ocaml 4.06
+
+--- src/utils/cdk/bzlib.mli~ 2005-08-01 20:09:13.000000000 +0000
++++ src/utils/cdk/bzlib.mli
+@@ -10,7 +10,7 @@ type action = BZ_RUN | BZ_FLUSH | BZ_FIN
+
+ external compress_init: int -> int -> int -> stream = "camlzip_bzCompressInit"
+ external compress:
+- stream -> string -> int -> int -> string -> int -> int -> action
++ stream -> string -> int -> int -> bytes -> int -> int -> action
+ -> bool * int * int
+ = "camlzip_bzCompress_bytecode" "camlzip_bzCompress"
+ external compress_end: stream -> unit = "camlzip_bzCompressEnd"
+@@ -18,7 +18,7 @@ external compress_end: stream -> unit =
+
+ external decompress_init: int -> bool -> stream = "camlzip_bzDecompressInit"
+ external decompress:
+- stream -> string -> int -> int -> string -> int -> int -> bool * int * int
++ stream -> string -> int -> int -> bytes -> int -> int -> bool * int * int
+ = "camlzip_bzDecompress_bytecode" "camlzip_bzDecompress"
+ external decompress_end: stream -> unit = "camlzip_bzDecompressEnd"
+
diff --git a/net/mldonkey/patches/patch-src_utils_cdk_filename2.ml b/net/mldonkey/patches/patch-src_utils_cdk_filename2.ml
new file mode 100644
index 00000000000..7a6d21da808
--- /dev/null
+++ b/net/mldonkey/patches/patch-src_utils_cdk_filename2.ml
@@ -0,0 +1,39 @@
+$NetBSD: patch-src_utils_cdk_filename2.ml,v 1.1 2018/03/14 14:05:37 dholland Exp $
+
+Fix build with ocaml 4.06
+
+--- src/utils/cdk/filename2.ml~ 2012-06-24 07:59:41.000000000 +0000
++++ src/utils/cdk/filename2.ml
+@@ -116,11 +116,11 @@ let to_string filename =
+ List.fold_left (fun file f -> f file) filename !to_strings
+
+ let path_of_filename filename =
+- let filename = String.copy filename in
++ let change c =
++ if c = '\\' then '/' else c
++ in
++ let filename = String.map change filename in
+ let len = String.length filename in
+- for i = 0 to len - 1 do
+- if filename.[i] = '\\' then filename.[i] <- '/';
+- done;
+ let filename =
+ if len > 2 && filename.[1] = ':' &&
+ match filename.[0] with
+@@ -142,11 +142,11 @@ let filesystem_compliant name fs namemax
+ (* replace all illegal characters with a valid one.
+ assumes all filesystems accept '_'s in filenames *)
+ let escape_chars p filename =
+- let s = String.copy filename in
+- for i = 0 to String.length filename - 1 do
+- if p s.[i] then s.[i] <- '_'
+- done;
+- s in
++ let change c =
++ if p c then '_' else c
++ in
++ String.map change filename
++ in
+
+ (* remove all illegal characters at the beginning of filename *)
+ let trim_left p filename =
diff --git a/net/mldonkey/patches/patch-src_utils_cdk_gdstubs.c b/net/mldonkey/patches/patch-src_utils_cdk_gdstubs.c
index ea393c17809..bf379f8d9a0 100644
--- a/net/mldonkey/patches/patch-src_utils_cdk_gdstubs.c
+++ b/net/mldonkey/patches/patch-src_utils_cdk_gdstubs.c
@@ -1,6 +1,7 @@
-$NetBSD: patch-src_utils_cdk_gdstubs.c,v 1.1 2016/08/15 15:48:19 jaapb Exp $
+$NetBSD: patch-src_utils_cdk_gdstubs.c,v 1.2 2018/03/14 14:05:37 dholland Exp $
Compile with OCaml 4.03
+
--- src/utils/cdk/gdstubs.c.orig 2012-06-24 07:59:41.000000000 +0000
+++ src/utils/cdk/gdstubs.c
@@ -489,7 +489,7 @@ int ml_image_pngversion(void)
diff --git a/net/mldonkey/patches/patch-src_utils_cdk_genlex2.ml b/net/mldonkey/patches/patch-src_utils_cdk_genlex2.ml
new file mode 100644
index 00000000000..a192a33af4a
--- /dev/null
+++ b/net/mldonkey/patches/patch-src_utils_cdk_genlex2.ml
@@ -0,0 +1,39 @@
+$NetBSD: patch-src_utils_cdk_genlex2.ml,v 1.1 2018/03/14 14:05:37 dholland Exp $
+
+Fix build with ocaml 4.06
+
+--- src/utils/cdk/genlex2.ml~ 2003-04-22 22:33:39.000000000 +0000
++++ src/utils/cdk/genlex2.ml
+@@ -28,7 +28,7 @@ type token =
+
+ (* The string buffering machinery *)
+
+-let initial_buffer = String.create 32
++let initial_buffer = Bytes.create 32
+
+ let buffer = ref initial_buffer
+ let bufpos = ref 0
+@@ -36,16 +36,18 @@ let bufpos = ref 0
+ let reset_buffer () = buffer := initial_buffer; bufpos := 0
+
+ let store c =
+- if !bufpos >= String.length !buffer then
++ if !bufpos >= Bytes.length !buffer then
+ begin
+- let newbuffer = String.create (2 * !bufpos) in
+- String.blit !buffer 0 newbuffer 0 !bufpos; buffer := newbuffer
++ let newbuffer = Bytes.create (2 * !bufpos) in
++ Bytes.blit !buffer 0 newbuffer 0 !bufpos; buffer := newbuffer
+ end;
+- String.set !buffer !bufpos c;
++ Bytes.set !buffer !bufpos c;
+ incr bufpos
+
+ let get_string () =
+- let s = String.sub !buffer 0 !bufpos in buffer := initial_buffer; s
++ let s = Bytes.to_string (Bytes.sub !buffer 0 !bufpos) in
++ buffer := initial_buffer;
++ s
+
+ (* The lexer *)
+
diff --git a/net/mldonkey/patches/patch-src_utils_cdk_gzip.ml b/net/mldonkey/patches/patch-src_utils_cdk_gzip.ml
new file mode 100644
index 00000000000..1869c3b206d
--- /dev/null
+++ b/net/mldonkey/patches/patch-src_utils_cdk_gzip.ml
@@ -0,0 +1,180 @@
+$NetBSD: patch-src_utils_cdk_gzip.ml,v 1.1 2018/03/14 14:05:37 dholland Exp $
+
+Fix build with ocaml 4.06
+
+--- src/utils/cdk/gzip.ml~ 2010-11-07 15:01:40.000000000 +0000
++++ src/utils/cdk/gzip.ml
+@@ -21,14 +21,14 @@ let buffer_size = 1024
+
+ type in_channel =
+ { in_chan: IO.input;
+- in_buffer: string;
++ in_buffer: bytes;
+ mutable in_pos: int;
+ mutable in_avail: int;
+ mutable in_eof: bool;
+ in_stream: Zlib.stream;
+ mutable in_size: int32;
+ mutable in_crc: int32;
+- char_buffer: string }
++ char_buffer: bytes }
+
+ let open_in ic =
+ (* Superficial parsing of header *)
+@@ -66,14 +66,14 @@ let open_in ic =
+ raise(Error("premature end of input, not a gzip stream"))
+ end;
+ { in_chan = ic;
+- in_buffer = String.create buffer_size;
++ in_buffer = Bytes.create buffer_size;
+ in_pos = 0;
+ in_avail = 0;
+ in_eof = false;
+ in_stream = Zlib.inflate_init false;
+ in_size = Int32.zero;
+ in_crc = Int32.zero;
+- char_buffer = String.create 1 }
++ char_buffer = Bytes.create 1 }
+
+ let open_in_file filename =
+ let ic = Pervasives.open_in_bin filename in
+@@ -84,11 +84,11 @@ let open_in_file filename =
+ let read_byte iz =
+ if iz.in_avail = 0 then begin
+ let n = IO.input iz.in_chan iz.in_buffer 0
+- (String.length iz.in_buffer) in
++ (Bytes.length iz.in_buffer) in
+ iz.in_pos <- 0;
+ iz.in_avail <- n
+ end;
+- let c = iz.in_buffer.[iz.in_pos] in
++ let c = Bytes.get iz.in_buffer iz.in_pos in
+ iz.in_pos <- iz.in_pos + 1;
+ iz.in_avail <- iz.in_avail - 1;
+ Char.code c
+@@ -104,12 +104,12 @@ let read_int32 iz =
+ (Int32.shift_left (Int32.of_int b4) 24)))
+
+ let rec input iz buf pos len =
+- if pos < 0 || len < 0 || pos + len > String.length buf then
++ if pos < 0 || len < 0 || pos + len > Bytes.length buf then
+ invalid_arg "Gzip_stream.input";
+ if iz.in_eof then 0 else begin
+ if iz.in_avail = 0 then begin
+ let n = try IO.input iz.in_chan iz.in_buffer 0
+- (String.length iz.in_buffer)
++ (Bytes.length iz.in_buffer)
+ with IO.No_more_input -> raise(Error("truncated stream"))
+ in
+ iz.in_pos <- 0;
+@@ -123,7 +123,7 @@ let rec input iz buf pos len =
+ raise(Error("error during decompression")) in
+ iz.in_pos <- iz.in_pos + used_in;
+ iz.in_avail <- iz.in_avail - used_in;
+- iz.in_crc <- Zlib.update_crc iz.in_crc buf pos used_out;
++ iz.in_crc <- Zlib.update_crc iz.in_crc (Bytes.to_string buf) pos used_out;
+ iz.in_size <- Int32.add iz.in_size (Int32.of_int used_out);
+ if finished then begin
+ try
+@@ -152,7 +152,7 @@ let rec really_input iz buf pos len =
+ end
+
+ let input_char iz =
+- if input iz iz.char_buffer 0 1 = 0 then raise End_of_file else iz.char_buffer.[0]
++ if input iz iz.char_buffer 0 1 = 0 then raise End_of_file else Bytes.get iz.char_buffer 0
+
+ let input_byte iz =
+ Char.code (input_char iz)
+@@ -167,13 +167,13 @@ let close_in iz =
+
+ type 'a out_channel =
+ { out_chan: 'a IO.output;
+- out_buffer: string;
++ out_buffer: bytes;
+ mutable out_pos: int;
+ mutable out_avail: int;
+ out_stream: Zlib.stream;
+ mutable out_size: int32;
+ mutable out_crc: int32;
+- char_buffer: string }
++ char_buffer: bytes }
+
+ let open_out ?(level = 6) oc =
+ if level < 1 || level > 9 then invalid_arg "Gzip_stream.open_output: bad level";
+@@ -186,13 +186,13 @@ let open_out ?(level = 6) oc =
+ IO.write_byte oc 0; (* xflags *)
+ IO.write_byte oc 0xFF; (* OS (unknown) *)
+ { out_chan = oc;
+- out_buffer = String.create buffer_size;
++ out_buffer = Bytes.create buffer_size;
+ out_pos = 0;
+ out_avail = buffer_size;
+ out_stream = Zlib.deflate_init level false;
+ out_size = Int32.zero;
+ out_crc = Int32.zero;
+- char_buffer = String.create 1 }
++ char_buffer = Bytes.create 1 }
+
+ let open_out_file ?level filename =
+ let oc = Pervasives.open_out_bin filename in
+@@ -202,13 +202,13 @@ let open_out_file ?level filename =
+ exn -> Pervasives.close_out oc; raise exn
+
+ let rec output oz buf pos len =
+- if pos < 0 || len < 0 || pos + len > String.length buf then
++ if pos < 0 || len < 0 || pos + len > Bytes.length buf then
+ invalid_arg "Gzip_stream.output";
+ (* If output buffer is full, flush it *)
+ if oz.out_avail = 0 then begin
+- ignore (IO.really_output oz.out_chan oz.out_buffer 0 oz.out_pos);
++ ignore (IO.really_output oz.out_chan (Bytes.to_string oz.out_buffer) 0 oz.out_pos);
+ oz.out_pos <- 0;
+- oz.out_avail <- String.length oz.out_buffer
++ oz.out_avail <- Bytes.length oz.out_buffer
+ end;
+ let (_, used_in, used_out) =
+ try
+@@ -220,11 +220,11 @@ let rec output oz buf pos len =
+ oz.out_pos <- oz.out_pos + used_out;
+ oz.out_avail <- oz.out_avail - used_out;
+ oz.out_size <- Int32.add oz.out_size (Int32.of_int used_in);
+- oz.out_crc <- Zlib.update_crc oz.out_crc buf pos used_in;
++ oz.out_crc <- Zlib.update_crc oz.out_crc (Bytes.to_string buf) pos used_in;
+ if used_in < len then output oz buf (pos + used_in) (len - used_in)
+
+ let output_char oz c =
+- oz.char_buffer.[0] <- c;
++ Bytes.set oz.char_buffer 0 c;
+ output oz oz.char_buffer 0 1
+
+ let output_byte oz b =
+@@ -241,9 +241,9 @@ let flush oz =
+ let rec do_flush () =
+ (* If output buffer is full, flush it *)
+ if oz.out_avail = 0 then begin
+- ignore (IO.really_output oz.out_chan oz.out_buffer 0 oz.out_pos);
++ ignore (IO.really_output oz.out_chan (Bytes.to_string oz.out_buffer) 0 oz.out_pos);
+ oz.out_pos <- 0;
+- oz.out_avail <- String.length oz.out_buffer
++ oz.out_avail <- Bytes.length oz.out_buffer
+ end;
+ let (finished, _, used_out) =
+ Zlib.deflate oz.out_stream oz.out_buffer 0 0
+@@ -255,7 +255,7 @@ let flush oz =
+ do_flush();
+ (* Final data flush *)
+ if oz.out_pos > 0 then
+- ignore (IO.really_output oz.out_chan oz.out_buffer 0 oz.out_pos);
++ ignore (IO.really_output oz.out_chan (Bytes.to_string oz.out_buffer) 0 oz.out_pos);
+ (* Write CRC and size *)
+ write_int32 oz.out_chan oz.out_crc;
+ write_int32 oz.out_chan oz.out_size;
+@@ -277,7 +277,7 @@ let output_io io =
+ let oz = open_out io in
+ IO.create_out
+ ~write:(output_char oz)
+- ~output:(fun s o l -> output oz s o l; l)
++ ~output:(fun s o l -> output oz (Bytes.of_string s) o l; l)
+ ~flush:(fun () -> IO.flush io)
+ ~close:(fun () -> close_out oz)
+
diff --git a/net/mldonkey/patches/patch-src_utils_cdk_gzip.mli b/net/mldonkey/patches/patch-src_utils_cdk_gzip.mli
new file mode 100644
index 00000000000..d04f5c4029d
--- /dev/null
+++ b/net/mldonkey/patches/patch-src_utils_cdk_gzip.mli
@@ -0,0 +1,33 @@
+$NetBSD: patch-src_utils_cdk_gzip.mli,v 1.1 2018/03/14 14:05:37 dholland Exp $
+
+Fix build with ocaml 4.06
+
+--- src/utils/cdk/gzip.mli~ 2010-11-07 15:01:40.000000000 +0000
++++ src/utils/cdk/gzip.mli
+@@ -35,7 +35,7 @@ val input_byte: in_channel -> int
+ (* Same as [Gzip.input_char], but return the 8-bit integer representing
+ the character.
+ Raise [End_of_file] if no more compressed data is available. *)
+-val input: in_channel -> string -> int -> int -> int
++val input: in_channel -> bytes -> int -> int -> int
+ (* [input ic buf pos len] uncompresses up to [len] characters
+ from the given channel [ic],
+ storing them in string [buf], starting at character number [pos].
+@@ -51,7 +51,7 @@ val input: in_channel -> string -> int -
+ exactly [len] characters.)
+ Exception [Invalid_argument "Gzip.input"] is raised if
+ [pos] and [len] do not designate a valid substring of [buf]. *)
+-val really_input: in_channel -> string -> int -> int -> unit
++val really_input: in_channel -> bytes -> int -> int -> unit
+ (* [really_input ic buf pos len] uncompresses [len] characters
+ from the given channel, storing them in
+ string [buf], starting at character number [pos].
+@@ -95,7 +95,7 @@ val output_char: 'a out_channel -> char
+ val output_byte: 'a out_channel -> int -> unit
+ (* Same as [Gzip.output_char], but the output character is given
+ by its code. The given integer is taken modulo 256. *)
+-val output: 'a out_channel -> string -> int -> int -> unit
++val output: 'a out_channel -> bytes -> int -> int -> unit
+ (* [output oc buf pos len] compresses and writes [len] characters
+ from string [buf], starting at offset [pos], and writes the
+ compressed data to the channel [oc].
diff --git a/net/mldonkey/patches/patch-src_utils_cdk_string2.ml b/net/mldonkey/patches/patch-src_utils_cdk_string2.ml
new file mode 100644
index 00000000000..e78d40d5f5e
--- /dev/null
+++ b/net/mldonkey/patches/patch-src_utils_cdk_string2.ml
@@ -0,0 +1,102 @@
+$NetBSD: patch-src_utils_cdk_string2.ml,v 1.1 2018/03/14 14:05:37 dholland Exp $
+
+Fix build with ocaml 4.06
+
+--- src/utils/cdk/string2.ml~ 2007-01-28 20:39:59.000000000 +0000
++++ src/utils/cdk/string2.ml
+@@ -163,11 +163,10 @@ let check_suffix s suffix =
+ len >= slen && String.sub s (len - slen) slen = suffix
+
+ let upp_initial s =
+- if String.length s > 0 then
+- let s = String.copy s in
+- s.[0] <- Char.uppercase s.[0]; s
+- else
+- s
++ let change i c =
++ if i = 0 then Char.uppercase_ascii c else c
++ in
++ String.mapi change s
+
+ (* not optimal !*)
+ let rec subequal s1 pos1 s2 pos2 len =
+@@ -195,7 +194,7 @@ let subcontains s sub =
+
+ let of_char c = String.make 1 c
+
+-
++(* problematic with immutable strings
+ let resize s newlen =
+ let len = String.length s in
+ if len > newlen then String.sub s 0 newlen
+@@ -203,13 +202,10 @@ let resize s newlen =
+ let str = String.create newlen in
+ String.blit s 0 str 0 len;
+ str
++*)
+
+ let init len f =
+- let s = String.create len in
+- for i = 0 to len - 1 do
+- s.[i] <- f i
+- done;
+- s
++ String.init len f
+
+ let is_space c = c = ' ' || c = '\n' || c = '\r' || c = '\t'
+
+@@ -266,30 +262,24 @@ let starts_with s1 s2 =
+ let len2 = String.length s2 in
+ len2 <= len1 && strneql s1 s2 len2
+
+-let replace_char s c1 c2 =
+- for i = 0 to String.length s - 1 do
+- if s.[i] == c1 then s.[i] <- c2
+- done
++let replace_char' s c1 c2 =
++ let change i c =
++ if c = c1 then c2 else c
++ in
++ String.mapi change s
+
+ let stem s =
+- let s = String.lowercase (String.copy s) in
+- for i = 0 to String.length s - 1 do
+- let c = s.[i] in
++ let munge i c =
+ match c with
+- 'a'..'z' | '0' .. '9' -> ()
+- | _ -> s.[i] <- ' ';
+- done;
++ 'a'..'z' | '0' .. '9' -> c
++ | _ -> ' '
++ in
++ let s = String.mapi munge (String.lowercase_ascii s) in
+ split_simplify s ' '
+
+ let map f s =
+ let len = String.length s in
+- if len = 0 then [||] else
+- let v = f s.[0] in
+- let array = Array.create len v in
+- for i = 1 to len -1 do
+- array.(i) <- f s.[i]
+- done;
+- array
++ Array.init len (fun i -> f s.[i])
+
+ let iteri f s =
+ let len = String.length s in
+@@ -298,11 +288,7 @@ let iteri f s =
+ done
+
+ let init n f =
+- let s = String.create n in
+- for i = 0 to n - 1 do
+- s.[i] <- f i
+- done;
+- s
++ String.init n f
+
+ let exists p s =
+ let l = String.length s in
diff --git a/net/mldonkey/patches/patch-src_utils_cdk_string2.mli b/net/mldonkey/patches/patch-src_utils_cdk_string2.mli
new file mode 100644
index 00000000000..6d0d54453d3
--- /dev/null
+++ b/net/mldonkey/patches/patch-src_utils_cdk_string2.mli
@@ -0,0 +1,28 @@
+$NetBSD: patch-src_utils_cdk_string2.mli,v 1.1 2018/03/14 14:05:37 dholland Exp $
+
+Fix build with ocaml 4.06
+
+--- src/utils/cdk/string2.mli~ 2007-01-28 20:39:59.000000000 +0000
++++ src/utils/cdk/string2.mli
+@@ -79,7 +79,9 @@ val subcontains : string -> string -> bo
+ val of_char : char -> string
+ (*d [of_char c] returns the string containing one [c]. *)
+
++(* problematic with immutable strings
+ val resize : string -> int -> string
++*)
+ (*d [resize s len] returns a string of length [len] starting with [s]. *)
+
+ val init : int -> (int -> char) -> string
+@@ -93,7 +95,11 @@ external contains : string -> string ->
+ val starts_with : (* string *) string -> (* start *) string -> bool
+
+ (* [replace_char s c1 c2] replaces char [c1] by char [c2] in [s] *)
++(* problematic with immutable strings
+ val replace_char : string -> char -> char -> unit
++*)
++(* [replace_char' s c1 c2] makes a new string with [c1] replaced with [c2] *)
++val replace_char' : string -> char -> char -> string
+
+ (* [stem s] cuts the string [s] in small words, for indexation eg *)
+ val stem : string -> string list
diff --git a/net/mldonkey/patches/patch-src_utils_cdk_tar.mlcpp b/net/mldonkey/patches/patch-src_utils_cdk_tar.mlcpp
new file mode 100644
index 00000000000..83515d76e79
--- /dev/null
+++ b/net/mldonkey/patches/patch-src_utils_cdk_tar.mlcpp
@@ -0,0 +1,112 @@
+$NetBSD: patch-src_utils_cdk_tar.mlcpp,v 1.1 2018/03/14 14:05:37 dholland Exp $
+
+Fix build with ocaml 4.06
+
+--- src/utils/cdk/tar.mlcpp.orig 2010-12-19 10:10:24.000000000 +0000
++++ src/utils/cdk/tar.mlcpp
+@@ -169,7 +169,7 @@ let align_at_header t =
+ | None -> ()
+ | Some h ->
+ let entry_size = ((h.t_size/blocksize) + 1) * blocksize
+- and buf = String.create blocksize
++ and buf = Bytes.create blocksize
+ and discarded = ref 0 in
+ while !discarded < entry_size do
+ let read = t.chan#input buf 0 blocksize in
+@@ -177,7 +177,7 @@ let align_at_header t =
+ done;
+ t.last_header <- None
+
+-let empty_block = String.make blocksize '\000'
++let empty_block = Bytes.make blocksize '\000'
+
+ let compute_chksum buf =
+ let chksum = ref 256 in (* 256 is the sum of 8 ' ' characters for the chksum field *)
+@@ -206,8 +206,9 @@ let read_oldgnu_header header =
+ }
+
+ let read_gnu_header t =
+- let buf = String.create blocksize in
++ let buf = Bytes.create blocksize in
+ t.chan#really_input buf 0 blocksize;
++ let buf = Bytes.to_string buf in
+ { t_atime = extract_int32 buf 0 12;
+ t_ctime = extract_int32 buf 12 12;
+ t_offset = extract_int32 buf 24 12;
+@@ -216,9 +217,10 @@ let read_gnu_header t =
+
+ let read_header t =
+ align_at_header t;
+- let buf = String.create blocksize in
++ let buf = Bytes.create blocksize in
+ t.chan#really_input buf 0 blocksize;
+ if buf = empty_block then raise End_of_file;
++ let buf = Bytes.to_string buf in
+ let head1 = { t_name = c_string buf 0;
+ t_mode = extract_num buf 100 8;
+ t_uid = extract_num buf 108 8;
+@@ -264,14 +266,14 @@ let read_body t =
+ let header = get_header t in
+ t.last_header <- None;
+ if header.t_size = 0 then ""
+- else let buf = String.create header.t_size in
++ else let buf = Bytes.create header.t_size in
+ t.chan#really_input buf 0 header.t_size;
+ let align = blocksize - (header.t_size mod blocksize) in
+ if align <> blocksize then begin
+- let leftover = String.create blocksize in
++ let leftover = Bytes.create blocksize in
+ t.chan#really_input leftover 0 align
+ end;
+- buf
++ Bytes.to_string buf
+
+ let read_entry t =
+ let head = read_header t in
+@@ -291,7 +293,7 @@ end
+
+ #ifdef USE_BZIP2
+ class bzout_chan o = object
+- method output str pos len = Bzip2.output o str pos len
++ method output str pos len = Bzip2.output o (Bytes.to_string str) pos len
+ method flush () = Bzip2.flush o
+ method close () = Bzip2.close_out o
+ end
+@@ -390,14 +392,14 @@ let write_gnu_header t buf =
+
+ let output t head body =
+ let size = String.length body in
+- let buf = String.copy empty_block in
++ let buf = Bytes.copy empty_block in
+ write_str buf 0 100 head.t_name;
+ write_num8 buf 100 head.t_mode;
+ write_num8 buf 108 head.t_uid;
+ write_num8 buf 116 head.t_gid;
+ write_num12 buf 124 size;
+ write_int32 buf 136 head.t_mtime;
+- buf.[156] <- typeflag_to_char head.t_typeflag;
++ Bytes.set buf 156 (typeflag_to_char head.t_typeflag);
+ write_str buf 157 100 head.t_linkname;
+ write_magic buf 257 head.t_format;
+ write_str buf 265 32 head.t_uname;
+@@ -407,16 +409,16 @@ let output t head body =
+ write_str buf 345 155 head.t_prefix;
+ if head.t_format = OLDGNU_FORMAT then
+ write_oldgnu_header head buf;
+- let chksum = compute_chksum buf in
++ let chksum = compute_chksum (Bytes.to_string buf) in
+ write_padded_num buf 148 chksum;
+ t.ochan#output buf 0 blocksize;
+- if head.t_format = GNU_FORMAT && isdigit buf.[156] then begin
+- let buf2 = String.copy empty_block in
++ if head.t_format = GNU_FORMAT && isdigit (Bytes.get buf 156) then begin
++ let buf2 = Bytes.copy empty_block in
+ write_gnu_header head buf2;
+ t.ochan#output buf2 0 blocksize
+ end;
+ if size > 0 then begin
+- t.ochan#output body 0 size;
++ t.ochan#output (Bytes.of_string body) 0 size;
+ let align = blocksize - (size mod blocksize) in
+ if align > 0 && align < blocksize then
+ t.ochan#output empty_block 0 align
diff --git a/net/mldonkey/patches/patch-src_utils_cdk_unix2.ml b/net/mldonkey/patches/patch-src_utils_cdk_unix2.ml
new file mode 100644
index 00000000000..9b08d154149
--- /dev/null
+++ b/net/mldonkey/patches/patch-src_utils_cdk_unix2.ml
@@ -0,0 +1,38 @@
+$NetBSD: patch-src_utils_cdk_unix2.ml,v 1.1 2018/03/14 14:05:37 dholland Exp $
+
+Fix build with ocaml 4.06
+
+--- src/utils/cdk/unix2.ml~ 2013-07-07 10:53:52.000000000 +0000
++++ src/utils/cdk/unix2.ml
+@@ -156,7 +156,7 @@ let copy oldname newname =
+ (try Unix.fchmod descr stats.Unix.LargeFile.st_perm
+ with e -> lprintf_nl "copy: failed to preserve mode"));
+ let buffer_len = 8192 in
+- let buffer = String.create buffer_len in
++ let buffer = Bytes.create buffer_len in
+ let rec copy_file () =
+ let n = input ic buffer 0 buffer_len in
+ if n = 0 then () else begin
+@@ -205,18 +205,18 @@ let rec remove_all_directory dirname =
+ Unix.rmdir dirname
+
+ let random () =
+- let s = String.create 7 in
++ let s = Bytes.create 7 in
+ for i = 0 to 6 do
+- s.[i] <- char_of_int (97 + Random.int 26)
++ Bytes.set s i (char_of_int (97 + Random.int 26))
+ done;
+- s
++ Bytes.to_string s
+
+ let can_write_to_directory dirname =
+ let temp_file = Filename.concat dirname "tmp_" ^ random () ^ "_mld.tmp" in
+ let check () = with_remove temp_file (fun _ ->
+ tryopen_openfile temp_file [O_WRONLY; O_CREAT] 0o600 (fun fd ->
+ let test_string = "mldonkey accesstest - this file can be deleted\n" in
+- really_write fd test_string 0 (String.length test_string)))
++ really_write fd (Bytes.of_string test_string) 0 (String.length test_string)))
+ in
+ try
+ check ()
diff --git a/net/mldonkey/patches/patch-src_utils_cdk_zip.ml b/net/mldonkey/patches/patch-src_utils_cdk_zip.ml
index 64a24625dd3..dff85120a66 100644
--- a/net/mldonkey/patches/patch-src_utils_cdk_zip.ml
+++ b/net/mldonkey/patches/patch-src_utils_cdk_zip.ml
@@ -1,8 +1,30 @@
-$NetBSD: patch-src_utils_cdk_zip.ml,v 1.1 2016/08/15 15:48:19 jaapb Exp $
+$NetBSD: patch-src_utils_cdk_zip.ml,v 1.2 2018/03/14 14:05:37 dholland Exp $
+
+Compile with OCaml 4.03 (the exception Error block)
+and again with 4.06 (the rest)
-Compile with OCaml 4.03
--- src/utils/cdk/zip.ml.orig 2007-02-06 22:26:59.000000000 +0000
+++ src/utils/cdk/zip.ml
+@@ -27,8 +27,8 @@ let read4_int ic =
+ if hw > max_int lsr 16 then raise (Error("", "", "32-bit data too large"));
+ lw lor (hw lsl 16)
+ let readstring ic n =
+- let s = String.create n in
+- really_input ic s 0 n; s
++ let s = Bytes.create n in
++ really_input ic s 0 n; Bytes.to_string s
+
+ let write1 = output_byte
+ let write2 oc n =
+@@ -40,7 +40,7 @@ let write4_int oc n =
+ write2 oc n;
+ write2 oc (n lsr 16)
+ let writestring oc s =
+- output oc s 0 (String.length s)
++ output oc (Bytes.of_string s) 0 (String.length s)
+
+ type compression_method = Stored | Deflated
+
@@ -72,8 +72,6 @@ type out_file =
mutable of_entries: entry list;
of_comment: string }
@@ -12,3 +34,160 @@ Compile with OCaml 4.03
(* Return the position of the last occurrence of s1 in s2, or -1 if not
found. *)
+@@ -81,7 +79,7 @@ let strrstr pattern buf ofs len =
+ let rec search i j =
+ if i < ofs then -1
+ else if j >= String.length pattern then i
+- else if pattern.[j] = buf.[i + j] then search i (j+1)
++ else if pattern.[j] = Bytes.get buf (i + j) then search i (j+1)
+ else search (i-1) 0
+ in search (ofs + len - String.length pattern) 0
+
+@@ -116,7 +114,7 @@ let dostime_of_unixtime t =
+ (* Read end of central directory record *)
+
+ let read_ecd filename ic =
+- let buf = String.create 256 in
++ let buf = Bytes.create 256 in
+ let filelen = in_channel_length ic in
+ let rec find_ecd pos len =
+ (* On input, bytes 0 ... len - 1 of buf reflect what is at pos in ic *)
+@@ -125,7 +123,7 @@ let read_ecd filename ic =
+ "end of central directory not found, not a ZIP file"));
+ let toread = min pos 128 in
+ (* Make room for "toread" extra bytes, and read them *)
+- String.blit buf 0 buf toread (256 - toread);
++ Bytes.blit buf 0 buf toread (256 - toread);
+ let newpos = pos - toread in
+ seek_in ic newpos;
+ really_input ic buf 0 toread;
+@@ -134,7 +132,7 @@ let read_ecd filename ic =
+ let ofs = strrstr "PK\005\006" buf 0 newlen in
+ if ofs < 0 || newlen < 22 ||
+ (let comment_len =
+- Char.code buf.[ofs + 20] lor (Char.code buf.[ofs + 21] lsl 8) in
++ Char.code (Bytes.get buf (ofs + 20)) lor (Char.code (Bytes.get buf (ofs + 21)) lsl 8) in
+ newpos + ofs + 22 + comment_len <> filelen) then
+ find_ecd newpos newlen
+ else
+@@ -268,14 +266,14 @@ let goto_entry ifile e =
+ let read_entry ifile e =
+ try
+ goto_entry ifile e;
+- let res = String.create e.uncompressed_size in
++ let res = Bytes.create e.uncompressed_size in
+ match e.methd with
+ Stored ->
+ if e.compressed_size <> e.uncompressed_size then
+ raise (Error(ifile.if_filename, e.filename,
+ "wrong size for stored entry"));
+ really_input ifile.if_channel res 0 e.uncompressed_size;
+- res
++ Bytes.to_string res
+ | Deflated ->
+ let in_avail = ref e.compressed_size in
+ let out_pos = ref 0 in
+@@ -283,25 +281,25 @@ let read_entry ifile e =
+ Zlib.uncompress ~header:false
+ (fun buf ->
+ let read = input ifile.if_channel buf 0
+- (min !in_avail (String.length buf)) in
++ (min !in_avail (Bytes.length buf)) in
+ in_avail := !in_avail - read;
+ read)
+ (fun buf len ->
+- if !out_pos + len > String.length res then
++ if !out_pos + len > Bytes.length res then
+ raise (Error(ifile.if_filename, e.filename,
+ "wrong size for deflated entry (too much data)"));
+- String.blit buf 0 res !out_pos len;
++ Bytes.blit buf 0 res !out_pos len;
+ out_pos := !out_pos + len)
+ with Zlib.Error(_, _) ->
+ raise (Error(ifile.if_filename, e.filename, "decompression error"))
+ end;
+- if !out_pos <> String.length res then
++ if !out_pos <> Bytes.length res then
+ raise (Error(ifile.if_filename, e.filename,
+ "wrong size for deflated entry (not enough data)"));
+- let crc = Zlib.update_crc Int32.zero res 0 (String.length res) in
++ let crc = Zlib.update_crc Int32.zero (Bytes.to_string res) 0 (Bytes.length res) in
+ if crc <> e.crc then
+ raise (Error(ifile.if_filename, e.filename, "CRC mismatch"));
+- res
++ Bytes.to_string res
+ with End_of_file ->
+ raise (Error(ifile.if_filename, e.filename, "truncated data"))
+
+@@ -315,10 +313,10 @@ let copy_entry_to_channel ifile e oc =
+ if e.compressed_size <> e.uncompressed_size then
+ raise (Error(ifile.if_filename, e.filename,
+ "wrong size for stored entry"));
+- let buf = String.create 4096 in
++ let buf = Bytes.create 4096 in
+ let rec copy n =
+ if n > 0 then begin
+- let r = input ifile.if_channel buf 0 (min n (String.length buf)) in
++ let r = input ifile.if_channel buf 0 (min n (Bytes.length buf)) in
+ output oc buf 0 r;
+ copy (n - r)
+ end in
+@@ -330,12 +328,12 @@ let copy_entry_to_channel ifile e oc =
+ Zlib.uncompress ~header:false
+ (fun buf ->
+ let read = input ifile.if_channel buf 0
+- (min !in_avail (String.length buf)) in
++ (min !in_avail (Bytes.length buf)) in
+ in_avail := !in_avail - read;
+ read)
+ (fun buf len ->
+ output oc buf 0 len;
+- crc := Zlib.update_crc !crc buf 0 len)
++ crc := Zlib.update_crc !crc (Bytes.to_string buf) 0 len)
+ with Zlib.Error(_, _) ->
+ raise (Error(ifile.if_filename, e.filename, "decompression error"))
+ end;
+@@ -475,7 +473,7 @@ let add_entry data ofile ?(extra = "") ?
+ let compr_size =
+ match level with
+ 0 ->
+- output ofile.of_channel data 0 (String.length data);
++ output ofile.of_channel (Bytes.of_string data) 0 (String.length data);
+ String.length data
+ | _ ->
+ let in_pos = ref 0 in
+@@ -484,7 +482,7 @@ let add_entry data ofile ?(extra = "") ?
+ Zlib.compress ~header:false
+ (fun buf ->
+ let n = min (String.length data - !in_pos)
+- (String.length buf) in
++ (Bytes.length buf) in
+ String.blit data !in_pos buf 0 n;
+ in_pos := !in_pos + n;
+ n)
+@@ -506,11 +504,11 @@ let copy_channel_to_entry ic ofile ?(ext
+ let (compr_size, uncompr_size) =
+ match level with
+ 0 ->
+- let buf = String.create 4096 in
++ let buf = Bytes.create 4096 in
+ let rec copy sz =
+- let r = input ic buf 0 (String.length buf) in
++ let r = input ic buf 0 (Bytes.length buf) in
+ if r = 0 then sz else begin
+- crc := Zlib.update_crc !crc buf 0 r;
++ crc := Zlib.update_crc !crc (Bytes.to_string buf) 0 r;
+ output ofile.of_channel buf 0 r;
+ copy (sz + r)
+ end in
+@@ -522,8 +520,8 @@ let copy_channel_to_entry ic ofile ?(ext
+ try
+ Zlib.compress ~header:false
+ (fun buf ->
+- let r = input ic buf 0 (String.length buf) in
+- crc := Zlib.update_crc !crc buf 0 r;
++ let r = input ic buf 0 (Bytes.length buf) in
++ crc := Zlib.update_crc !crc (Bytes.to_string buf) 0 r;
+ in_pos := !in_pos + r;
+ r)
+ (fun buf n ->
diff --git a/net/mldonkey/patches/patch-src_utils_cdk_zlib.ml b/net/mldonkey/patches/patch-src_utils_cdk_zlib.ml
new file mode 100644
index 00000000000..7fae540dd10
--- /dev/null
+++ b/net/mldonkey/patches/patch-src_utils_cdk_zlib.ml
@@ -0,0 +1,47 @@
+$NetBSD: patch-src_utils_cdk_zlib.ml,v 1.1 2018/03/14 14:05:37 dholland Exp $
+
+Fix build with ocaml 4.06
+
+--- src/utils/cdk/zlib.mli~ 2005-08-01 20:09:13.000000000 +0000
++++ src/utils/cdk/zlib.mli
+@@ -2,10 +2,10 @@ exception Error of string * string
+
+ val compress:
+ ?level: int -> ?header: bool ->
+- (string -> int) -> (string -> int -> unit) -> unit
++ (bytes -> int) -> (bytes -> int -> unit) -> unit
+
+ val uncompress:
+- ?header: bool -> (string -> int) -> (string -> int -> unit) -> unit
++ ?header: bool -> (bytes -> int) -> (bytes -> int -> unit) -> unit
+
+ type stream
+
+@@ -17,14 +17,14 @@ type flush_command =
+
+ external deflate_init: int -> bool -> stream = "camlzip_deflateInit"
+ external deflate:
+- stream -> string -> int -> int -> string -> int -> int -> flush_command
++ stream -> bytes -> int -> int -> bytes -> int -> int -> flush_command
+ -> bool * int * int
+ = "camlzip_deflate_bytecode" "camlzip_deflate"
+ external deflate_end: stream -> unit = "camlzip_deflateEnd"
+
+ external inflate_init: bool -> stream = "camlzip_inflateInit"
+ external inflate:
+- stream -> string -> int -> int -> string -> int -> int -> flush_command
++ stream -> bytes -> int -> int -> bytes -> int -> int -> flush_command
+ -> bool * int * int
+ = "camlzip_inflate_bytecode" "camlzip_inflate"
+ external inflate_end: stream -> unit = "camlzip_inflateEnd"
+@@ -33,8 +33,8 @@ external update_crc: int32 -> string ->
+ = "camlzip_update_crc32"
+
+ val uncompress_string : string -> string
+-val uncompress_string2 : string -> string
+-val compress_string : ?level:int -> string -> string
++val uncompress_string2 : bytes -> bytes
++val compress_string : ?level:int -> bytes -> bytes
+ val gzip_string : ?level:int -> string -> string
+
+ val zlib_version_num : unit -> string
diff --git a/net/mldonkey/patches/patch-src_utils_cdk_zlib.mli b/net/mldonkey/patches/patch-src_utils_cdk_zlib.mli
new file mode 100644
index 00000000000..fd0c6ec4f5e
--- /dev/null
+++ b/net/mldonkey/patches/patch-src_utils_cdk_zlib.mli
@@ -0,0 +1,153 @@
+$NetBSD: patch-src_utils_cdk_zlib.mli,v 1.1 2018/03/14 14:05:37 dholland Exp $
+
+Fix build with ocaml 4.06
+
+--- src/utils/cdk/zlib.ml~ 2007-02-11 13:15:49.000000000 +0000
++++ src/utils/cdk/zlib.ml
+@@ -13,14 +13,14 @@ type flush_command =
+
+ external deflate_init: int -> bool -> stream = "camlzip_deflateInit"
+ external deflate:
+- stream -> string -> int -> int -> string -> int -> int -> flush_command
++ stream -> bytes -> int -> int -> bytes -> int -> int -> flush_command
+ -> bool * int * int
+ = "camlzip_deflate_bytecode" "camlzip_deflate"
+ external deflate_end: stream -> unit = "camlzip_deflateEnd"
+
+ external inflate_init: bool -> stream = "camlzip_inflateInit"
+ external inflate:
+- stream -> string -> int -> int -> string -> int -> int -> flush_command
++ stream -> bytes -> int -> int -> bytes -> int -> int -> flush_command
+ -> bool * int * int
+ = "camlzip_inflate_bytecode" "camlzip_inflate"
+ external inflate_end: stream -> unit = "camlzip_inflateEnd"
+@@ -40,8 +40,8 @@ let zlib_version_num () =
+ let buffer_size = 1024
+
+ let compress ?(level = 6) ?(header = true) refill flush =
+- let inbuf = String.create buffer_size
+- and outbuf = String.create buffer_size in
++ let inbuf = Bytes.create buffer_size
++ and outbuf = Bytes.create buffer_size in
+ let zs = deflate_init level header in
+ let rec compr inpos inavail =
+ if inavail = 0 then begin
+@@ -63,15 +63,15 @@ let compress ?(level = 6) ?(header = tru
+ deflate_end zs
+
+ let grow_buffer s =
+- let s' = String.create (2 * String.length s) in
+- String.blit s 0 s' 0 (String.length s);
++ let s' = Bytes.create (2 * Bytes.length s) in
++ Bytes.blit s 0 s' 0 (Bytes.length s);
+ s'
+
+ let compress_string ?(level = 6) inbuf =
+ let zs = deflate_init level true in
+ let rec compr inpos outbuf outpos =
+- let inavail = String.length inbuf - inpos in
+- let outavail = String.length outbuf - outpos in
++ let inavail = Bytes.length inbuf - inpos in
++ let outavail = Bytes.length outbuf - outpos in
+ if outavail = 0
+ then compr inpos (grow_buffer outbuf) outpos
+ else begin
+@@ -79,11 +79,11 @@ let compress_string ?(level = 6) inbuf =
+ deflate zs inbuf inpos inavail outbuf outpos outavail
+ (if inavail = 0 then Z_FINISH else Z_NO_FLUSH) in
+ if finished then
+- String.sub outbuf 0 (outpos + used_out)
++ Bytes.sub outbuf 0 (outpos + used_out)
+ else
+ compr (inpos + used_in) outbuf (outpos + used_out)
+ end in
+- let res = compr 0 (String.create (String.length inbuf)) 0 in
++ let res = compr 0 (Bytes.create (Bytes.length inbuf)) 0 in
+ deflate_end zs;
+ res
+
+@@ -95,22 +95,22 @@ let gzip_string ?(level = 6) inbuf =
+ let out_crc = ref Int32.zero in
+ let rec compr inpos outbuf outpos =
+ let inavail = String.length inbuf - inpos in
+- let outavail = String.length outbuf - outpos in
++ let outavail = Bytes.length outbuf - outpos in
+ if outavail = 0
+ then compr inpos (grow_buffer outbuf) outpos
+ else begin
+ let (finished, used_in, used_out) =
+- deflate zs inbuf inpos inavail outbuf outpos outavail
++ deflate zs (Bytes.of_string inbuf) inpos inavail outbuf outpos outavail
+ (if inavail = 0 then Z_FINISH else Z_NO_FLUSH) in
+ out_crc := update_crc !out_crc inbuf inpos used_in;
+ if finished then
+- String.sub outbuf 0 (outpos + used_out)
++ Bytes.sub outbuf 0 (outpos + used_out)
+ else
+ compr (inpos + used_in) outbuf (outpos + used_out)
+ end in
+- let res = compr 0 (String.create (String.length inbuf)) 0 in
++ let res = compr 0 (Bytes.create (String.length inbuf)) 0 in
+ deflate_end zs;
+- let buf = Buffer.create (18 + String.length res) in
++ let buf = Buffer.create (18 + Bytes.length res) in
+ let write_int wbuf n =
+ Buffer.add_char wbuf (char_of_int n)
+ in
+@@ -128,15 +128,15 @@ let gzip_string ?(level = 6) inbuf =
+ for i = 1 to 4 do write_int buf 0 done;
+ write_int buf 0;
+ write_int buf 0xFF;
+- Buffer.add_string buf res;
++ Buffer.add_bytes buf res;
+ write_int32 buf !out_crc;
+ write_int32 buf (Int32.of_int (String.length inbuf));
+ Buffer.contents buf
+ end
+
+ let uncompress ?(header = true) refill flush =
+- let inbuf = String.create buffer_size
+- and outbuf = String.create buffer_size in
++ let inbuf = Bytes.create buffer_size
++ and outbuf = Bytes.create buffer_size in
+ let zs = inflate_init header in
+ let rec uncompr inpos inavail =
+ if inavail = 0 then begin
+@@ -164,19 +164,19 @@ let uncompress ?(header = true) refill f
+ let uncompress_string2 inbuf =
+ let zs = inflate_init true in
+ let rec uncompr inpos outbuf outpos =
+- let inavail = String.length inbuf - inpos in
+- let outavail = String.length outbuf - outpos in
++ let inavail = Bytes.length inbuf - inpos in
++ let outavail = Bytes.length outbuf - outpos in
+ if outavail = 0
+ then uncompr inpos (grow_buffer outbuf) outpos
+ else begin
+ let (finished, used_in, used_out) =
+ inflate zs inbuf inpos inavail outbuf outpos outavail Z_SYNC_FLUSH in
+ if finished then
+- String.sub outbuf 0 (outpos + used_out)
++ Bytes.sub outbuf 0 (outpos + used_out)
+ else
+ uncompr (inpos + used_in) outbuf (outpos + used_out)
+ end in
+- let res = uncompr 0 (String.create (2 * String.length inbuf)) 0 in
++ let res = uncompr 0 (Bytes.create (2 * Bytes.length inbuf)) 0 in
+ inflate_end zs;
+ res
+
+@@ -185,11 +185,11 @@ let uncompress_string s =
+ let pos = ref 0 in
+ let len = String.length s in
+ uncompress ~header: true (fun b ->
+- let n = min (String.length b) (len - !pos) in
++ let n = min (Bytes.length b) (len - !pos) in
+ if n < 1 then 0 else begin
+ String.blit s !pos b 0 n;
+ pos := !pos + n;
+ n end
+- ) (fun s len -> Buffer.add_string buf (String.sub s 0 len));
++ ) (fun s len -> Buffer.add_bytes buf (Bytes.sub s 0 len));
+ Buffer.contents buf
+
diff --git a/net/mldonkey/patches/patch-src_utils_cdk_zlibstubs.c b/net/mldonkey/patches/patch-src_utils_cdk_zlibstubs.c
index 4706505abe8..7a68a46266d 100644
--- a/net/mldonkey/patches/patch-src_utils_cdk_zlibstubs.c
+++ b/net/mldonkey/patches/patch-src_utils_cdk_zlibstubs.c
@@ -1,6 +1,7 @@
-$NetBSD: patch-src_utils_cdk_zlibstubs.c,v 1.1 2016/08/15 15:48:19 jaapb Exp $
+$NetBSD: patch-src_utils_cdk_zlibstubs.c,v 1.2 2018/03/14 14:05:37 dholland Exp $
Compile with OCaml 4.03
+
--- src/utils/cdk/zlibstubs.c.orig 2009-02-24 18:34:31.000000000 +0000
+++ src/utils/cdk/zlibstubs.c
@@ -191,7 +191,7 @@ value camlzip_inflateEnd(value vzs)
diff --git a/net/mldonkey/patches/patch-src_utils_extlib_IO.ml b/net/mldonkey/patches/patch-src_utils_extlib_IO.ml
new file mode 100644
index 00000000000..28cfff40aad
--- /dev/null
+++ b/net/mldonkey/patches/patch-src_utils_extlib_IO.ml
@@ -0,0 +1,117 @@
+$NetBSD: patch-src_utils_extlib_IO.ml,v 1.1 2018/03/14 14:05:37 dholland Exp $
+
+Fix build with ocaml 4.06
+
+--- src/utils/extlib/IO.ml~ 2010-11-07 15:01:40.000000000 +0000
++++ src/utils/extlib/IO.ml
+@@ -20,7 +20,7 @@
+
+ type input = {
+ mutable in_read : unit -> char;
+- mutable in_input : string -> int -> int -> int;
++ mutable in_input : bytes -> int -> int -> int;
+ mutable in_close : unit -> unit;
+ }
+
+@@ -62,7 +62,7 @@ let nread i n =
+ if n = 0 then
+ ""
+ else
+- let s = String.create n in
++ let s = Bytes.create n in
+ let l = ref n in
+ let p = ref 0 in
+ try
+@@ -72,11 +72,11 @@ let nread i n =
+ p := !p + r;
+ l := !l - r;
+ done;
+- s
++ Bytes.to_string s
+ with
+ No_more_input as e ->
+ if !p = 0 then raise e;
+- String.sub s 0 !p
++ Bytes.to_string (Bytes.sub s 0 !p)
+
+ let really_output o s p l' =
+ let sl = String.length s in
+@@ -92,7 +92,7 @@ let really_output o s p l' =
+ l'
+
+ let input i s p l =
+- let sl = String.length s in
++ let sl = Bytes.length s in
+ if p + l > sl || p < 0 || l < 0 then invalid_arg "IO.input";
+ if l = 0 then
+ 0
+@@ -100,7 +100,7 @@ let input i s p l =
+ i.in_input s p l
+
+ let really_input i s p l' =
+- let sl = String.length s in
++ let sl = Bytes.length s in
+ if p + l' > sl || p < 0 || l' < 0 then invalid_arg "IO.really_input";
+ let l = ref l' in
+ let p = ref p in
+@@ -116,10 +116,10 @@ let really_nread i n =
+ if n < 0 then invalid_arg "IO.really_nread";
+ if n = 0 then ""
+ else
+- let s = String.create n
++ let s = Bytes.create n
+ in
+ ignore(really_input i s 0 n);
+- s
++ Bytes.to_string s
+
+ let close_in i =
+ let f _ = raise Input_closed in
+@@ -173,11 +173,11 @@ let read_all i =
+ loop()
+ with
+ No_more_input ->
+- let buf = String.create !pos in
++ let buf = Bytes.create !pos in
+ List.iter (fun (s,p) ->
+ String.unsafe_blit s 0 buf p (String.length s)
+ ) !str;
+- buf
++ Bytes.to_string buf
+
+ let pos_in i =
+ let p = ref 0 in
+@@ -267,7 +267,7 @@ let input_channel ch =
+ let output_channel ch =
+ {
+ out_write = (fun c -> output_char ch c);
+- out_output = (fun s p l -> Pervasives.output ch s p l; l);
++ out_output = (fun s p l -> Pervasives.output ch (Bytes.of_string s) p l; l);
+ out_close = (fun () -> Pervasives.close_out ch);
+ out_flush = (fun () -> Pervasives.flush ch);
+ }
+@@ -708,11 +708,11 @@ class out_chars ch =
+ end
+
+ let from_in_channel ch =
+- let cbuf = String.create 1 in
++ let cbuf = Bytes.create 1 in
+ let read() =
+ try
+ if ch#input cbuf 0 1 = 0 then raise Sys_blocked_io;
+- String.unsafe_get cbuf 0
++ Bytes.unsafe_get cbuf 0
+ with
+ End_of_file -> raise No_more_input
+ in
+@@ -725,9 +725,8 @@ let from_in_channel ch =
+ ~close:ch#close_in
+
+ let from_out_channel ch =
+- let cbuf = String.create 1 in
+ let write c =
+- String.unsafe_set cbuf 0 c;
++ let cbuf = String.make 1 c in
+ if ch#output cbuf 0 1 = 0 then raise Sys_blocked_io;
+ in
+ let output s p l =
diff --git a/net/mldonkey/patches/patch-src_utils_extlib_IO.mli b/net/mldonkey/patches/patch-src_utils_extlib_IO.mli
new file mode 100644
index 00000000000..04d1e203fa5
--- /dev/null
+++ b/net/mldonkey/patches/patch-src_utils_extlib_IO.mli
@@ -0,0 +1,41 @@
+$NetBSD: patch-src_utils_extlib_IO.mli,v 1.1 2018/03/14 14:05:37 dholland Exp $
+
+Fix build with ocaml 4.06
+
+--- src/utils/extlib/IO.mli~ 2010-11-07 15:01:40.000000000 +0000
++++ src/utils/extlib/IO.mli
+@@ -59,14 +59,14 @@ val really_nread : input -> int -> strin
+ from the input. Raises [No_more_input] if at least [n] characters are
+ not available. Raises [Invalid_argument] if [n] < 0. *)
+
+-val input : input -> string -> int -> int -> int
++val input : input -> bytes -> int -> int -> int
+ (** [input i s p l] reads up to [l] characters from the given input, storing
+ them in string [s], starting at character number [p]. It returns the actual
+ number of characters read or raise [No_more_input] if no character can be
+ read. It will raise [Invalid_argument] if [p] and [l] do not designate a
+ valid substring of [s]. *)
+
+-val really_input : input -> string -> int -> int -> int
++val really_input : input -> bytes -> int -> int -> int
+ (** [really_input i s p l] reads exactly [l] characters from the given input,
+ storing them in the string [s], starting at position [p]. For consistency with
+ {!IO.input} it returns [l]. Raises [No_more_input] if at [l] characters are
+@@ -126,7 +126,7 @@ val output_enum : unit -> char Enum.t ou
+
+ val create_in :
+ read:(unit -> char) ->
+- input:(string -> int -> int -> int) -> close:(unit -> unit) -> input
++ input:(bytes -> int -> int -> int) -> close:(unit -> unit) -> input
+ (** Fully create an input by giving all the needed functions. *)
+
+ val create_out :
+@@ -293,7 +293,7 @@ val drop_bits : in_bits -> unit
+
+ class in_channel : input ->
+ object
+- method input : string -> int -> int -> int
++ method input : bytes -> int -> int -> int
+ method close_in : unit -> unit
+ end
+
diff --git a/net/mldonkey/patches/patch-src_utils_lib_fst_hash.c b/net/mldonkey/patches/patch-src_utils_lib_fst_hash.c
index efb2b2144cd..85633b92b29 100644
--- a/net/mldonkey/patches/patch-src_utils_lib_fst_hash.c
+++ b/net/mldonkey/patches/patch-src_utils_lib_fst_hash.c
@@ -1,6 +1,8 @@
-$NetBSD: patch-src_utils_lib_fst_hash.c,v 1.1 2016/08/15 15:48:19 jaapb Exp $
+$NetBSD: patch-src_utils_lib_fst_hash.c,v 1.2 2018/03/14 14:05:37 dholland Exp $
+
+Compile with OCaml 4.03 (int64 -> int64_t)
+and with 4.06 (string -> bytes)
-Compile with OCaml 4.03
--- src/utils/lib/fst_hash.c.orig 2005-12-10 19:44:28.000000000 +0000
+++ src/utils/lib/fst_hash.c
@@ -197,7 +197,7 @@ unsigned short fst_hash_checksum (unsign
@@ -21,3 +23,20 @@ Compile with OCaml 4.03
{
unsigned char * buf = file;
size_t len = filesize;
+@@ -323,14 +323,14 @@ void fst_hash_string (unsigned char *fth
+
+ value fst_hash_file_ml(value digest, value filename, value filesize)
+ {
+- if(fst_hash_file(String_val(digest), String_val(filename),
++ if(fst_hash_file(bytes_val(digest), String_val(filename),
+ Int64_val(filesize))) return Val_unit;
+ failwith("Exception during FST computation");
+ }
+
+ value fst_hash_string_ml(value digest, value s, value size)
+ {
+- fst_hash_string(String_val(digest), String_val(s), Int_val(size));
++ fst_hash_string(Bytes_val(digest), String_val(s), Int_val(size));
+ return Val_unit;
+ }
+
diff --git a/net/mldonkey/patches/patch-src_utils_lib_md4.ml b/net/mldonkey/patches/patch-src_utils_lib_md4.ml
new file mode 100644
index 00000000000..96f99a1be70
--- /dev/null
+++ b/net/mldonkey/patches/patch-src_utils_lib_md4.ml
@@ -0,0 +1,410 @@
+$NetBSD: patch-src_utils_lib_md4.ml,v 1.1 2018/03/14 14:05:37 dholland Exp $
+
+Fix build with ocaml 4.06
+
+--- src/utils/lib/md4.ml~ 2006-02-02 00:33:28.000000000 +0000
++++ src/utils/lib/md4.ml
+@@ -46,16 +46,16 @@ module Base16 = struct
+ else Char.chr (Char.code '0' + x)
+
+ let to_string hash_length s =
+- let p = String.create (hash_length * 2) in
++ let p = Bytes.create (hash_length * 2) in
+ for i = 0 to hash_length - 1 do
+ let c = s.[i] in
+ let n = int_of_char c in
+ let i0 = (n/16) land 15 in
+ let i1 = n land 15 in
+- p.[2 * i] <- hexa_digit i0;
+- p.[2 * i+1] <- hexa_digit i1;
++ Bytes.set p (2 * i) (hexa_digit i0);
++ Bytes.set p (2 * i+1) (hexa_digit i1);
+ done;
+- p
++ Bytes.to_string p
+
+ let hexa_digit_case upper x =
+ if x >= 10 then Char.chr (Char.code (
+@@ -63,16 +63,16 @@ module Base16 = struct
+ else Char.chr (Char.code '0' + x)
+
+ let to_string_case upper hash_length s =
+- let p = String.create (hash_length * 2) in
++ let p = Bytes.create (hash_length * 2) in
+ for i = 0 to hash_length - 1 do
+ let c = s.[i] in
+ let n = int_of_char c in
+ let i0 = (n/16) land 15 in
+ let i1 = n land 15 in
+- p.[2 * i] <- hexa_digit_case upper i0;
+- p.[2 * i+1] <- hexa_digit_case upper i1;
++ Bytes.set p (2 * i) (hexa_digit_case upper i0);
++ Bytes.set p (2 * i+1) (hexa_digit_case upper i1);
+ done;
+- p
++ Bytes.to_string p
+
+ let digit_hexa c =
+ let i = int_of_char c in
+@@ -83,13 +83,13 @@ module Base16 = struct
+
+ let of_string hash_length s =
+ assert (String.length s = hash_length*2);
+- let p = String.create hash_length in
++ let p = Bytes.create hash_length in
+ for i = 0 to hash_length - 1 do
+ let c0 = s.[2*i] in
+ let c1 = s.[2*i+1] in
+- p.[i] <- char_of_int ((16 * digit_hexa c0) + digit_hexa c1);
++ Bytes.set p i (char_of_int ((16 * digit_hexa c0) + digit_hexa c1));
+ done;
+- p
++ Bytes.to_string p
+
+ end
+
+@@ -108,7 +108,7 @@ module Base32 = struct
+ let of_string hash_length r =
+ let len = String.length r in
+ assert (len = (hash_length * 8 + 4)/5);
+- let s = String.make hash_length '\000' in
++ let s = Bytes.make hash_length '\000' in
+ for i = 0 to len - 1 do
+ let pos = i * 5 in
+ let byte = pos / 8 in
+@@ -116,20 +116,20 @@ module Base32 = struct
+ let c = int5_of_char r.[i] in
+ if bit < 3 then
+ let x = c lsl (3-bit) in
+- s.[byte] <- char_of_int (int_of_char s.[byte] lor x);
++ Bytes.set s byte (char_of_int (int_of_char (Bytes.get s byte) lor x));
+ else
+ let x = (c lsr (bit - 3)) land 0xff in
+- s.[byte] <- char_of_int (int_of_char s.[byte] lor x);
++ Bytes.set s byte (char_of_int (int_of_char (Bytes.get s byte) lor x));
+ if byte+1 < hash_length then
+ let y = (c lsl (11 - bit)) land 0xff in
+- s.[byte+1] <- char_of_int (int_of_char s.[byte+1] lor y);
++ Bytes.set s (byte+1) (char_of_int (int_of_char (Bytes.get s (byte+1)) lor y));
+ done;
+- s
++ Bytes.to_string s
+
+ let to_string hash_length s =
+ assert (String.length s = hash_length);
+ let len = (hash_length * 8 + 4)/5 in
+- let r = String.create len in
++ let r = Bytes.create len in
+ for i = 0 to len - 1 do
+ let pos = i * 5 in
+ let byte = pos / 8 in
+@@ -137,16 +137,16 @@ module Base32 = struct
+ if bit < 3 then
+ let x = int_of_char s.[byte] in
+ let c = (x lsr (3 - bit)) land 0x1f in
+- r.[i] <- char_of_int5 c
++ Bytes.set r i (char_of_int5 c)
+ else
+ let x = int_of_char s.[byte] in
+ let y = if byte + 1 = hash_length then 0 else
+ int_of_char s.[byte+1] in
+ let x = (x lsl 8) + y in
+ let c = (x lsr (11 - bit)) land 0x1f in
+- r.[i] <- char_of_int5 c
++ Bytes.set r i (char_of_int5 c)
+ done;
+- r
++ Bytes.to_string r
+
+ let char_of_int5 upper n =
+ char_of_int (if n < 26 then (if upper then 65 else 97)+n else
+@@ -155,7 +155,7 @@ module Base32 = struct
+ let to_string_case upper hash_length s =
+ assert (String.length s = hash_length);
+ let len = (hash_length * 8 + 4)/5 in
+- let r = String.create len in
++ let r = Bytes.create len in
+ for i = 0 to len - 1 do
+ let pos = i * 5 in
+ let byte = pos / 8 in
+@@ -163,16 +163,16 @@ module Base32 = struct
+ if bit < 3 then
+ let x = int_of_char s.[byte] in
+ let c = (x lsr (3 - bit)) land 0x1f in
+- r.[i] <- char_of_int5 upper c
++ Bytes.set r i (char_of_int5 upper c)
+ else
+ let x = int_of_char s.[byte] in
+ let y = if byte + 1 = hash_length then 0 else
+ int_of_char s.[byte+1] in
+ let x = (x lsl 8) + y in
+ let c = (x lsr (11 - bit)) land 0x1f in
+- r.[i] <- char_of_int5 upper c
++ Bytes.set r i (char_of_int5 upper c)
+ done;
+- r
++ Bytes.to_string r
+
+ end
+
+@@ -182,9 +182,9 @@ module Base6427 = struct
+ let _ = assert (String.length base64tbl = 64)
+
+ let to_string _ hashbin =
+- let hash64 = String.create 30 in
++ let hash64 = Bytes.create 30 in
+ let hashbin n = int_of_char hashbin.[n] in
+- hash64.[0] <- '=';
++ Bytes.set hash64 0 '=';
+ let j = ref 1 in
+ for i = 0 to 6 do
+ let tmp = if i < 6 then
+@@ -194,24 +194,24 @@ module Base6427 = struct
+ ((hashbin(3*i)) lsl 16) lor ((hashbin(3*i+1)) lsl 8)
+ in
+ for k = 0 to 3 do
+- hash64.[!j] <- base64tbl.[(tmp lsr ((3- k)*6)) land 0x3f];
++ Bytes.set hash64 !j (base64tbl.[(tmp lsr ((3- k)*6)) land 0x3f]);
+ incr j
+ done
+ done;
+- hash64.[!j-1] <- '=';
+- String.sub hash64 0 !j
++ Bytes.set hash64 (!j-1) '=';
++ Bytes.to_string (Bytes.sub hash64 0 !j)
+
+- let base64tbl_inv = String.create 126
++ let base64tbl_inv = Bytes.create 126
+ let _ =
+ for i = 0 to 63 do
+- base64tbl_inv.[int_of_char base64tbl.[i]] <- char_of_int i
++ Bytes.set base64tbl_inv (int_of_char base64tbl.[i]) (char_of_int i)
+ done
+
+ let of_string _ hash64 =
+- let hashbin = String.make 20 '\000' in
++ let hashbin = Bytes.make 20 '\000' in
+ let hash64 n =
+ let c = hash64.[n] in
+- int_of_char base64tbl_inv.[int_of_char c]
++ int_of_char (Bytes.get base64tbl_inv (int_of_char c))
+ in
+ let j = ref 0 in
+ for i = 0 to 6 do
+@@ -220,9 +220,9 @@ module Base6427 = struct
+ for k = 0 to 3 do
+ tmp := (!tmp lsl 6) lor (hash64 (i*4+k+1))
+ done;
+- hashbin.[!j] <- char_of_int ((!tmp lsr 16) land 0xff);
+- hashbin.[!j+1] <- char_of_int ((!tmp lsr 8) land 0xff);
+- hashbin.[!j+2] <- char_of_int ((!tmp lsr 0) land 0xff);
++ Bytes.set hashbin (!j) (char_of_int ((!tmp lsr 16) land 0xff));
++ Bytes.set hashbin (!j+1) (char_of_int ((!tmp lsr 8) land 0xff));
++ Bytes.set hashbin (!j+2) (char_of_int ((!tmp lsr 0) land 0xff));
+ j := !j + 3;
+ else
+ let tmp = ref 0 in
+@@ -230,11 +230,11 @@ module Base6427 = struct
+ tmp := (!tmp lsl 6) lor (hash64 (i*4+k+1))
+ done;
+ tmp := (!tmp lsl 6);
+- hashbin.[!j] <- char_of_int ((!tmp lsr 16) land 0xff);
+- hashbin.[!j+1] <- char_of_int ((!tmp lsr 8) land 0xff);
++ Bytes.set hashbin (!j) (char_of_int ((!tmp lsr 16) land 0xff));
++ Bytes.set hashbin (!j+1) (char_of_int ((!tmp lsr 8) land 0xff));
+ j := !j + 2;
+ done;
+- hashbin
++ Bytes.to_string hashbin
+
+ let to_string_case _ = to_string
+ end
+@@ -265,7 +265,7 @@ module type Digest = sig
+
+ val string : string -> t
+ (* val file : string -> t *)
+- val create : unit -> t
++ val create : unit -> bytes
+ val direct_of_string : string -> t
+ val direct_to_string : t -> string
+ val random : unit -> t
+@@ -274,7 +274,7 @@ module type Digest = sig
+
+ val option : t Options.option_class
+
+- val xor : t -> t -> t
++ val xor : t -> t -> bytes
+ val value_to_hash : Options.option_value -> t
+ val hash_to_value : t -> Options.option_value
+
+@@ -292,12 +292,12 @@ module Make(M: sig
+ val hash_name : string
+
+ (* [unsafe_string digest string string_len] *)
+- val unsafe_string : string -> string -> int -> unit
++ val unsafe_string : bytes -> string -> int -> unit
+
+ (* [unsafe_file digest filename filesize] *)
+- val unsafe_file : string -> string -> int64 -> unit
++ val unsafe_file : bytes -> string -> int64 -> unit
+ (* [unsafe_string digest file_fd offset len] *)
+- val digest_subfile : string -> Unix.file_descr -> int64 -> int64 -> unit
++ val digest_subfile : bytes -> Unix.file_descr -> int64 -> int64 -> unit
+
+ module Base : Base
+ end) = struct
+@@ -315,44 +315,44 @@ module Make(M: sig
+
+ let string s =
+ let len = String.length s in
+- let digest = String.create hash_length in
++ let digest = Bytes.create hash_length in
+ unsafe_string digest s len;
+- digest
++ Bytes.to_string digest
+
+ let to_bits s =
+ let len = String.length s in
+- let digest = String.create (8*len) in
++ let digest = Bytes.create (8*len) in
+ for i = 0 to len-1 do
+ let c = int_of_char s.[i] in
+ for j = 7 downto 0 do
+- digest.[i*8 + (7-j)] <-
++ Bytes.set digest (i*8 + (7-j))
+ (if c land (1 lsl j) <> 0 then '1' else '0')
+
+ done
+ done;
+- digest
++ Bytes.to_string digest
+
+- external xor_c : t -> t -> t -> unit = "md4_xor" "noalloc"
++ external xor_c : t -> t -> bytes -> unit = "md4_xor" [@@noalloc]
+
+ let xor m1 m2 =
+- let m3 = String.create hash_length in
++ let m3 = Bytes.create hash_length in
+ xor_c m1 m2 m3;
+ m3
+
+ let file s =
+- let digest = String.create hash_length in
++ let digest = Bytes.create hash_length in
+ let file_size = Unix32.getsize s in
+ unsafe_file digest s file_size;
+- digest
++ Bytes.to_string digest
+
+ let digest_subfile fd pos len =
+- let digest = String.create hash_length in
++ let digest = Bytes.create hash_length in
+ Unix32.apply_on_chunk fd pos len
+ (fun fd pos ->
+ digest_subfile digest fd pos len);
+- digest
++ Bytes.to_string digest
+
+- let create () = String.create hash_length
++ let create () = Bytes.create hash_length
+
+ let direct_to_string s = s
+ let direct_of_string s = s
+@@ -360,9 +360,9 @@ module Make(M: sig
+ let random () =
+ let s = create () in
+ for i = 0 to hash_length - 1 do
+- s.[i] <- char_of_int (Random.int 256)
++ Bytes.set s i (char_of_int (Random.int 256))
+ done;
+- s
++ Bytes.to_string s
+
+ let of_string = Base.of_string hash_length
+ let to_string = Base.to_string hash_length
+@@ -397,10 +397,14 @@ module Make(M: sig
+ module Md4 = Make(struct
+ let hash_length = 16
+ let hash_name = "Md4"
+-
+- external unsafe_string : string -> string -> int -> unit = "md4_unsafe_string"
+- external unsafe_file : string -> string -> int64 -> unit = "md4_unsafe_file"
+- external digest_subfile : string -> Unix.file_descr -> int64 -> int64 -> unit =
++
++(*
++ * XXX the first arg was string and I can't find the implementation; hope
++ * this is safe enough
++ *)
++ external unsafe_string : bytes -> string -> int -> unit = "md4_unsafe_string"
++ external unsafe_file : bytes -> string -> int64 -> unit = "md4_unsafe_file"
++ external digest_subfile : bytes -> Unix.file_descr -> int64 -> int64 -> unit =
+ "md4_unsafe64_fd"
+
+ module Base = Base16
+@@ -410,9 +414,13 @@ module Md5 = Make(struct
+ let hash_length = 16
+ let hash_name = "Md5"
+
+- external unsafe_string : string -> string -> int -> unit = "md5_unsafe_string"
+- external unsafe_file : string -> string -> int64 -> unit = "md5_unsafe_file"
+- external digest_subfile : string -> Unix.file_descr -> int64 -> int64 -> unit =
++(*
++ * XXX the first arg was string and I can't find the implementation; hope
++ * this is safe enough
++ *)
++ external unsafe_string : bytes -> string -> int -> unit = "md5_unsafe_string"
++ external unsafe_file : bytes -> string -> int64 -> unit = "md5_unsafe_file"
++ external digest_subfile : bytes -> Unix.file_descr -> int64 -> int64 -> unit =
+ "md5_unsafe64_fd"
+
+ module Base = Base16
+@@ -422,9 +430,13 @@ module PreSha1 = Make(struct
+ let hash_length = 20
+ let hash_name = "Sha1"
+
+- external unsafe_string : string -> string -> int -> unit = "sha1_unsafe_string"
+- external unsafe_file : string -> string -> int64 -> unit = "sha1_unsafe_file"
+- external digest_subfile : string -> Unix.file_descr -> int64 -> int64 -> unit =
++(*
++ * XXX the first arg was string and I can't find the implementation; hope
++ * this is safe enough
++ *)
++ external unsafe_string : bytes -> string -> int -> unit = "sha1_unsafe_string"
++ external unsafe_file : bytes -> string -> int64 -> unit = "sha1_unsafe_file"
++ external digest_subfile : bytes -> Unix.file_descr -> int64 -> int64 -> unit =
+ "sha1_unsafe64_fd"
+
+ module Base = Base32
+@@ -465,7 +477,7 @@ module Tiger = Make(struct
+ let hash_length = 24
+ let hash_name = "Tiger"
+
+- external unsafe_string : string -> string -> int -> unit =
++ external unsafe_string : bytes -> string -> int -> unit =
+ "tiger_unsafe_string"
+
+ let unsafe_file digest filename =
+@@ -482,8 +494,8 @@ module PreTigerTree = Make(struct
+ let hash_length = 24
+ let hash_name = "TigerTree"
+
+- external unsafe_string : string -> string -> int -> unit = "tigertree_unsafe_string"
+- external digest_subfile : string -> Unix.file_descr -> int64 -> int64 -> unit =
++ external unsafe_string : bytes -> string -> int -> unit = "tigertree_unsafe_string"
++ external digest_subfile : bytes -> Unix.file_descr -> int64 -> int64 -> unit =
+ "tigertree_unsafe64_fd"
+
+ let unsafe_file digest filename file_size =
+@@ -531,10 +543,10 @@ module PreMd5Ext = Make(struct
+ let hash_length = 20
+ let hash_name = "Md5Ext"
+
+- external unsafe_string : string -> string -> int -> unit =
++ external unsafe_string : bytes -> string -> int -> unit =
+ "fst_hash_string_ml"
+
+- external unsafe_file : string -> string -> int64 -> unit = "fst_hash_file_ml"
++ external unsafe_file : bytes -> string -> int64 -> unit = "fst_hash_file_ml"
+ let digest_subfile _ _ _ _ =
+ failwith "Md5Ext.digest_subfile not implemented"
+
diff --git a/net/mldonkey/patches/patch-src_utils_lib_md4.mli b/net/mldonkey/patches/patch-src_utils_lib_md4.mli
new file mode 100644
index 00000000000..6c5ac34b53d
--- /dev/null
+++ b/net/mldonkey/patches/patch-src_utils_lib_md4.mli
@@ -0,0 +1,24 @@
+$NetBSD: patch-src_utils_lib_md4.mli,v 1.1 2018/03/14 14:05:37 dholland Exp $
+
+Fix build with ocaml 4.06
+
+--- src/utils/lib/md4.mli~ 2004-08-04 16:59:27.000000000 +0000
++++ src/utils/lib/md4.mli
+@@ -49,7 +49,7 @@ module type Digest = sig
+
+ val string : string -> t
+ (* val file : string -> t *)
+- val create : unit -> t
++ val create : unit -> bytes
+ val direct_of_string : string -> t
+ val direct_to_string : t -> string
+ val random : unit -> t
+@@ -58,7 +58,7 @@ module type Digest = sig
+
+ val option : t Options.option_class
+
+- val xor : t -> t -> t
++ val xor : t -> t -> bytes
+ val value_to_hash : Options.option_value -> t
+ val hash_to_value : t -> Options.option_value
+
diff --git a/net/mldonkey/patches/patch-src_utils_lib_misc.ml b/net/mldonkey/patches/patch-src_utils_lib_misc.ml
new file mode 100644
index 00000000000..2841012396d
--- /dev/null
+++ b/net/mldonkey/patches/patch-src_utils_lib_misc.ml
@@ -0,0 +1,22 @@
+$NetBSD: patch-src_utils_lib_misc.ml,v 1.1 2018/03/14 14:05:37 dholland Exp $
+
+Fix build with ocaml 4.06
+
+--- src/utils/lib/misc.ml~ 2008-03-31 07:58:17.000000000 +0000
++++ src/utils/lib/misc.ml
+@@ -92,13 +92,13 @@ let zip_create zipfile files =
+ let gz_extract filename =
+ let file = ref "" in
+ try
+- let buffer = String.create 4096 in
++ let buffer = Bytes.create 4096 in
+ let file_out = Filename2.temp_file "arch_" ".tmp" in
+ file := file_out;
+ Unix2.tryopen_read_gzip filename (fun ic ->
+ Unix2.tryopen_write_bin file_out (fun oc ->
+ let rec decompress () =
+- let n = Gzip.input ic buffer 0 (String.length buffer) in
++ let n = Gzip.input ic buffer 0 (Bytes.length buffer) in
+ if n = 0 then ()
+ else
+ begin
diff --git a/net/mldonkey/patches/patch-src_utils_lib_misc2.mlcpp b/net/mldonkey/patches/patch-src_utils_lib_misc2.mlcpp
new file mode 100644
index 00000000000..aabd0344049
--- /dev/null
+++ b/net/mldonkey/patches/patch-src_utils_lib_misc2.mlcpp
@@ -0,0 +1,23 @@
+$NetBSD: patch-src_utils_lib_misc2.mlcpp,v 1.1 2018/03/14 14:05:37 dholland Exp $
+
+Fix build with ocaml 4.06
+
+--- src/utils/lib/misc2.mlcpp~ 2008-03-31 07:58:17.000000000 +0000
++++ src/utils/lib/misc2.mlcpp
+@@ -26,14 +26,14 @@ let bz2_extract filename =
+ else begin
+ let file = ref "" in
+ try
+- let buffer = String.create 4096 in
++ let buffer = Bytes.create 4096 in
+ let file_out = Filename2.temp_file "arch_" ".tmp" in
+ file := file_out;
+ let ic = Bzip2.open_in filename
+ in
+ let oc = open_out_bin file_out in
+ let rec decompress () =
+- let n = Bzip2.input ic buffer 0 (String.length buffer) in
++ let n = Bzip2.input ic buffer 0 (Bytes.length buffer) in
+ if n = 0 then ()
+ else
+ begin
diff --git a/net/mldonkey/patches/patch-src_utils_lib_options.ml4 b/net/mldonkey/patches/patch-src_utils_lib_options.ml4
index 94f30d2acbe..de8b3e24898 100644
--- a/net/mldonkey/patches/patch-src_utils_lib_options.ml4
+++ b/net/mldonkey/patches/patch-src_utils_lib_options.ml4
@@ -1,17 +1,30 @@
-$NetBSD: patch-src_utils_lib_options.ml4,v 1.1 2016/08/15 15:48:19 jaapb Exp $
+$NetBSD: patch-src_utils_lib_options.ml4,v 1.2 2018/03/14 14:05:37 dholland Exp $
-Compile with OCaml 4.03
---- src/utils/lib/options.ml4.orig 2013-07-07 10:56:43.000000000 +0000
+Compile with OCaml 4.03 (is_printable changes)
+and 4.06 (string/bytes changes)
+
+--- src/utils/lib/options.ml4.dist 2013-07-07 10:56:43.000000000 +0000
+++ src/utils/lib/options.ml4
-@@ -332,7 +332,6 @@ let exit_exn = Exit
+@@ -208,7 +208,7 @@ and parse_option = parser
+ | [< 'Int i >] -> IntValue i
+ | [< 'Float f >] -> FloatValue f
+ | [< 'Kwd "@"; 'Int i; v = parse_once_value i >] -> OnceValue v
+-| [< 'Char c >] -> StringValue (let s = String.create 1 in s.[0] <- c; s)
++| [< 'Char c >] -> StringValue (String.make 1 c)
+ | [< 'Kwd "["; v = parse_list [] >] -> List v
+ | [< 'Kwd "("; v = parse_list [] >] -> List v
+
+@@ -332,8 +332,7 @@ let exit_exn = Exit
let unsafe_get = String.unsafe_get
-external is_printable : char -> bool = "caml_is_printable"
- let unsafe_set = String.unsafe_set
+-let unsafe_set = String.unsafe_set
++let unsafe_set = Bytes.unsafe_set
let escaped s =
-@@ -343,7 +342,7 @@ let escaped s =
+ let n = ref 0 in
+@@ -343,31 +342,22 @@ let escaped s =
(match unsafe_get s i with
'"' | '\\' -> 2
| '\n' | '\t' -> 1
@@ -20,7 +33,11 @@ Compile with OCaml 4.03
done;
if !n = String.length s then s
else
-@@ -354,16 +353,7 @@ let escaped s =
+- let s' = String.create !n in
++ let s' = Bytes.create !n in
+ n := 0;
+ for i = 0 to String.length s - 1 do
+ begin match unsafe_get s i with
'"' | '\\' as c -> unsafe_set s' !n '\\'; incr n; unsafe_set s' !n c
| '\n' | '\t' as c -> unsafe_set s' !n c
| c ->
@@ -38,3 +55,8 @@ Compile with OCaml 4.03
end;
incr n
done;
+- s'
++ Bytes.to_string s'
+
+ let safe_string s =
+ if s = "" then "\"\""
diff --git a/net/mldonkey/patches/patch-src_utils_lib_os_stubs.h b/net/mldonkey/patches/patch-src_utils_lib_os_stubs.h
index be352f7280b..edf0f1e1f4f 100644
--- a/net/mldonkey/patches/patch-src_utils_lib_os_stubs.h
+++ b/net/mldonkey/patches/patch-src_utils_lib_os_stubs.h
@@ -1,6 +1,7 @@
-$NetBSD: patch-src_utils_lib_os_stubs.h,v 1.1 2016/08/15 15:48:19 jaapb Exp $
+$NetBSD: patch-src_utils_lib_os_stubs.h,v 1.2 2018/03/14 14:05:37 dholland Exp $
Compile with OCaml 4.03
+
--- src/utils/lib/os_stubs.h.orig 2010-08-01 14:05:29.000000000 +0000
+++ src/utils/lib/os_stubs.h
@@ -155,8 +155,8 @@ extern OFF_T os_lseek(OS_FD fd, OFF_T po
diff --git a/net/mldonkey/patches/patch-src_utils_lib_syslog.ml b/net/mldonkey/patches/patch-src_utils_lib_syslog.ml
new file mode 100644
index 00000000000..66fc207c519
--- /dev/null
+++ b/net/mldonkey/patches/patch-src_utils_lib_syslog.ml
@@ -0,0 +1,47 @@
+$NetBSD: patch-src_utils_lib_syslog.ml,v 1.1 2018/03/14 14:05:37 dholland Exp $
+
+Fix build with ocaml 4.06
+
+--- src/utils/lib/syslog.ml~ 2007-06-17 01:24:28.000000000 +0000
++++ src/utils/lib/syslog.ml
+@@ -44,7 +44,7 @@ type level = [ `LOG_EMERG | `LOG_ALERT |
+ exception Syslog_error of string
+
+ let facility_of_string s =
+- match String.lowercase s with
++ match String.lowercase_ascii s with
+ "kern" -> `LOG_KERN
+ | "user" -> `LOG_USER
+ | "mail" -> `LOG_MAIL
+@@ -194,7 +194,7 @@ let protected_write loginfo str =
+ in
+ let prev = Sys.signal Sys.sigpipe (Sys.Signal_handle fallback) in
+ try
+- ignore (write loginfo.fd str 0 (String.length str));
++ ignore (write loginfo.fd str 0 (Bytes.length str));
+ Sys.set_signal Sys.sigpipe prev
+ with Unix_error (_, _, _) ->
+ (* on error, attempt to reconnect *)
+@@ -220,16 +220,16 @@ let syslog ?fac loginfo lev str =
+ if String.length loginfo.tag > 0 then
+ Buffer.add_string msg ": ";
+ Buffer.add_string msg str;
+- let realmsg = ref (Buffer.contents msg) in
+- if String.length !realmsg > 1024 then begin
+- realmsg := String.sub !realmsg 0 1024;
+- String.blit "<truncated>" 0 !realmsg 1012 11
++ let realmsg = ref (Bytes.of_string (Buffer.contents msg)) in
++ if Bytes.length !realmsg > 1024 then begin
++ realmsg := Bytes.sub !realmsg 0 1024;
++ Bytes.blit (Bytes.of_string "<truncated>") 0 !realmsg 1012 11
+ end;
+ protected_write loginfo !realmsg;
+ if List.mem `LOG_PERROR loginfo.flags then begin
+ try
+- ignore (Unix.write Unix.stderr !realmsg 0 (String.length !realmsg));
+- ignore (Unix.write Unix.stderr "\n" 0 1)
++ ignore (Unix.write Unix.stderr !realmsg 0 (Bytes.length !realmsg));
++ ignore (Unix.write Unix.stderr (Bytes.of_string "\n") 0 1)
+ with _ -> ()
+ end
+
diff --git a/net/mldonkey/patches/patch-src_utils_lib_tiger.c b/net/mldonkey/patches/patch-src_utils_lib_tiger.c
new file mode 100644
index 00000000000..f043cc8e057
--- /dev/null
+++ b/net/mldonkey/patches/patch-src_utils_lib_tiger.c
@@ -0,0 +1,24 @@
+$NetBSD: patch-src_utils_lib_tiger.c,v 1.1 2018/03/14 14:05:37 dholland Exp $
+
+Fix build with ocaml 4.06
+
+--- src/utils/lib/tiger.c~ 2012-06-24 07:59:41.000000000 +0000
++++ src/utils/lib/tiger.c
+@@ -827,7 +827,7 @@ OFF_T tiger_block_size(OFF_T len)
+
+ value tigertree_unsafe_string(value digest_v, value string_v, value len_v)
+ {
+- unsigned char *digest = String_val(digest_v);
++ unsigned char *digest = Bytes_val(digest_v);
+ unsigned char *string = String_val(string_v);
+ long len = Long_val(len_v);
+
+@@ -838,7 +838,7 @@ value tigertree_unsafe_string(value dige
+
+ value tiger_unsafe_string(value digest_v, value string_v, value len_v)
+ {
+- unsigned char *digest = String_val(digest_v);
++ unsigned char *digest = Bytes_val(digest_v);
+ unsigned char *string = String_val(string_v);
+ long len = Long_val(len_v);
+
diff --git a/net/mldonkey/patches/patch-src_utils_lib_unix32.ml b/net/mldonkey/patches/patch-src_utils_lib_unix32.ml
new file mode 100644
index 00000000000..60fc59f7dca
--- /dev/null
+++ b/net/mldonkey/patches/patch-src_utils_lib_unix32.ml
@@ -0,0 +1,80 @@
+$NetBSD: patch-src_utils_lib_unix32.ml,v 1.1 2018/03/14 14:05:37 dholland Exp $
+
+Fix build with ocaml 4.06
+
+--- src/utils/lib/unix32.ml~ 2011-03-13 17:45:32.000000000 +0000
++++ src/utils/lib/unix32.ml
+@@ -318,7 +318,7 @@ module FDCache = struct
+ file_pos
+ len
+ string_pos
+- (String.length string)
++ (Bytes.length string)
+ (Printexc2.to_string e);
+ raise e
+
+@@ -327,7 +327,7 @@ module FDCache = struct
+ check_destroyed t2;
+ let buffer_len = 128 * 1024 in
+ let buffer_len64 = Int64.of_int buffer_len in
+- let buffer = String.make buffer_len '\001' in
++ let buffer = Bytes.make buffer_len '\001' in
+ let rec iter remaining pos1 pos2 =
+ let len64 = min remaining buffer_len64 in
+ let len = Int64.to_int len64 in
+@@ -363,8 +363,8 @@ module type File = sig
+ val mtime64 : t -> float
+ val exists : t -> bool
+ val remove : t -> unit
+- val read : t -> int64 -> string -> int -> int -> unit
+- val write : t -> int64 -> string -> int -> int -> unit
++ val read : t -> int64 -> bytes -> int -> int -> unit
++ val write : t -> int64 -> bytes -> int -> int -> unit
+ val destroy : t -> unit
+ val is_closed : t -> bool
+ end
+@@ -648,7 +648,7 @@ module MultiFile = struct
+ let possible_len = Int64.to_int possible_len64 in
+ if possible_len64 > zero then
+ FDCache.read file.fd in_file_pos s in_string_pos possible_len;
+- String.fill s (in_string_pos + possible_len) (len - possible_len) '\000'
++ Bytes.fill s (in_string_pos + possible_len) (len - possible_len) '\000'
+
+ let io f t chunk_begin string string_pos len =
+ let (file, tail) = find_file t chunk_begin in
+@@ -1039,7 +1039,7 @@ module SparseFile = struct
+ len = zero;
+ fd = fd;
+ } in
+- let new_array = Array.create (nchunks+1) chunk in
++ let new_array = Array.make (nchunks+1) chunk in
+ Array.blit t.chunks 0 new_array 0 nchunks;
+ t.chunks <- new_array
+
+@@ -1055,7 +1055,7 @@ module SparseFile = struct
+ len = zero;
+ fd = fd;
+ } in
+- let new_array = Array.create (nchunks+1) chunk in
++ let new_array = Array.make (nchunks+1) chunk in
+ Array.blit t.chunks 0 new_array 0 index;
+ Array.blit t.chunks index new_array (index+1) (nchunks-index);
+ t.chunks <- new_array;
+@@ -1226,7 +1226,7 @@ let flush_buffer t offset =
+ let len = String.length s in
+ try
+ if !verbose then lprintf_nl "seek64 %Ld" offset;
+- if len > 0 then write t offset s 0 len;
++ if len > 0 then write t offset (Bytes.of_string s) 0 len;
+ (*
+ let fd, offset = fd_of_chunk t offset (Int64.of_int len) in
+ let final_pos = Unix2.c_seek64 fd offset Unix.SEEK_SET in
+@@ -1349,7 +1349,7 @@ let copy_chunk t1 t2 pos1 pos2 len =
+ flush_fd t1;
+ flush_fd t2;
+ let buffer_size = 128 * 1024 in
+- let buffer = String.make buffer_size '\001' in
++ let buffer = Bytes.make buffer_size '\001' in
+ let rec iter remaining pos1 pos2 =
+ let len = mini remaining buffer_size in
+ if len > 0 then begin
diff --git a/net/mldonkey/patches/patch-src_utils_lib_unix32.mli b/net/mldonkey/patches/patch-src_utils_lib_unix32.mli
new file mode 100644
index 00000000000..60ba4c452b5
--- /dev/null
+++ b/net/mldonkey/patches/patch-src_utils_lib_unix32.mli
@@ -0,0 +1,20 @@
+$NetBSD: patch-src_utils_lib_unix32.mli,v 1.1 2018/03/14 14:05:37 dholland Exp $
+
+Fix build with ocaml 4.06
+
+--- src/utils/lib/unix32.mli~ 2011-01-31 17:17:07.000000000 +0000
++++ src/utils/lib/unix32.mli
+@@ -54,11 +54,11 @@ val flush : unit -> unit
+ val flush_fd : t -> unit
+ val buffered_write : t -> int64 -> string -> int -> int -> unit
+ val buffered_write_copy : t -> int64 -> string -> int -> int -> unit
+-val write : t -> int64 -> string -> int -> int -> unit
++val write : t -> int64 -> bytes -> int -> int -> unit
+ val max_buffered : int64 ref
+ val remove : t -> unit
+
+-val read : t -> int64 -> string -> int -> int -> unit
++val read : t -> int64 -> bytes -> int -> int -> unit
+ (*val allocate_chunk : t -> int64 -> int -> unit*)
+
+ val copy_chunk : t -> t -> int64 -> int64 -> int -> unit
diff --git a/net/mldonkey/patches/patch-src_utils_lib_url.ml b/net/mldonkey/patches/patch-src_utils_lib_url.ml
new file mode 100644
index 00000000000..468952b691c
--- /dev/null
+++ b/net/mldonkey/patches/patch-src_utils_lib_url.ml
@@ -0,0 +1,34 @@
+$NetBSD: patch-src_utils_lib_url.ml,v 1.1 2018/03/14 14:05:37 dholland Exp $
+
+Fix build with ocaml 4.06
+
+--- src/utils/lib/url.ml~ 2009-02-24 18:38:34.000000000 +0000
++++ src/utils/lib/url.ml
+@@ -36,21 +36,21 @@ type url = {
+ let encode s =
+ let pos = ref 0 in
+ let len = String.length s in
+- let res = String.create (3*len) in
++ let res = Bytes.create (3*len) in
+ let hexa_digit x =
+ if x >= 10 then Char.chr (Char.code 'A' + x - 10)
+ else Char.chr (Char.code '0' + x) in
+ for i=0 to len-1 do
+ match s.[i] with
+ | 'a'..'z' | 'A'..'Z' | '0'..'9' | '.' | '-' | '*' | '_' | '\''| '(' | ')'->
+- res.[!pos] <- s.[i]; incr pos
++ Bytes.set res !pos s.[i]; incr pos
+ | c ->
+- res.[!pos] <- '%';
+- res.[!pos+1] <- hexa_digit (Char.code c / 16);
+- res.[!pos+2] <- hexa_digit (Char.code c mod 16);
++ Bytes.set res !pos '%';
++ Bytes.set res (!pos+1) (hexa_digit (Char.code c / 16));
++ Bytes.set res (!pos+2) (hexa_digit (Char.code c mod 16));
+ pos := !pos + 3
+ done;
+- String.sub res 0 !pos
++ Bytes.to_string (Bytes.sub res 0 !pos)
+
+ (** decodes a sting according RFC 1738
+ or x-www-form-urlencoded ('+' with ' ')
diff --git a/net/mldonkey/patches/patch-src_utils_lib_verificationBitmap.ml b/net/mldonkey/patches/patch-src_utils_lib_verificationBitmap.ml
new file mode 100644
index 00000000000..ea42136a331
--- /dev/null
+++ b/net/mldonkey/patches/patch-src_utils_lib_verificationBitmap.ml
@@ -0,0 +1,72 @@
+$NetBSD: patch-src_utils_lib_verificationBitmap.ml,v 1.1 2018/03/14 14:05:37 dholland Exp $
+
+Fix build with ocaml 4.06
+
+--- src/utils/lib/verificationBitmap.ml~ 2006-06-11 17:39:51.000000000 +0000
++++ src/utils/lib/verificationBitmap.ml
+@@ -1,4 +1,4 @@
+-type t = string
++type t = bytes
+ type part_state =
+ State_missing | State_partial | State_complete | State_verified
+
+@@ -15,24 +15,24 @@ let char_to_state = function
+ | '3' -> State_verified
+ | _ -> assert false
+
+-let create n c = String.make n (state_to_char c)
+-let get x i = (char_to_state x.[i])
+-let set x i c = x.[i] <- state_to_char c
+-let length = String.length
++let create n c = Bytes.make n (state_to_char c)
++let get x i = char_to_state (Bytes.get x i)
++let set x i c = Bytes.set x i (state_to_char c)
++let length = Bytes.length
+ let init n f =
+- let s = String.create n in
++ let s = Bytes.create n in
+ for i = 0 to n - 1 do
+ set s i (f i)
+ done;
+ s
+-let to_string x = x
+-let of_string x = x
++let to_string x = Bytes.to_string x
++let of_string x = Bytes.of_string x
+
+ let iteri f x =
+- let l = String.length x in
++ let l = Bytes.length x in
+ let rec aux i =
+ if i < l then begin
+- f i (char_to_state x.[i]);
++ f i (char_to_state (Bytes.get x i));
+ aux (i+1)
+ end in
+ aux 0
+@@ -41,20 +41,20 @@ let mapi f x =
+ Array.init (length x) (fun i -> f i (get x i))
+
+ let fold_lefti f acc x =
+- let l = String.length x in
++ let l = Bytes.length x in
+ let rec aux acc i =
+ if i = l then acc
+ else aux (f acc i (get x i)) (i + 1) in
+ aux acc 0
+
+ let existsi p x =
+- let l = String.length x in
++ let l = Bytes.length x in
+ let rec aux i =
+- i < l && (p i (char_to_state x.[i]) || aux (i+1)) in
++ i < l && (p i (char_to_state (Bytes.get x i)) || aux (i+1)) in
+ aux 0
+
+ let for_all p s =
+- let l = String.length s in
++ let l = Bytes.length s in
+ let rec aux i =
+- i >= l || p (char_to_state s.[i]) && aux (i+1) in
++ i >= l || p (char_to_state (Bytes.get s i)) && aux (i+1) in
+ aux 0
diff --git a/net/mldonkey/patches/patch-src_utils_net_terminal.ml b/net/mldonkey/patches/patch-src_utils_net_terminal.ml
index c35643a8011..84bf419ce1a 100644
--- a/net/mldonkey/patches/patch-src_utils_net_terminal.ml
+++ b/net/mldonkey/patches/patch-src_utils_net_terminal.ml
@@ -1,6 +1,7 @@
-$NetBSD: patch-src_utils_net_terminal.ml,v 1.1 2014/10/20 10:12:51 jaapb Exp $
+$NetBSD: patch-src_utils_net_terminal.ml,v 1.2 2018/03/14 14:05:37 dholland Exp $
Unterminated string constant cleaned up
+
--- src/utils/net/terminal.ml.orig 2005-11-19 17:19:45.000000000 +0000
+++ src/utils/net/terminal.ml
@@ -185,7 +185,7 @@ module Output = struct