This is an automated email from the git hooks/post-receive script. mehdi pushed a commit to branch master in repository pgocaml.
commit 0ec0ee8a976a8d06fab5d2cb9d4419eda4dc97f8 Author: Mehdi Dogguy <me...@debian.org> Date: Sun Jan 17 23:39:12 2016 +0100 Imported Upstream version 2.2 --- CHANGELOG.txt | 8 ++ _oasis | 12 +-- _tags | 51 ++++++++----- myocamlbuild.ml | 88 ++++++++++++--------- setup.ml | 198 ++++++++++++++++++++++++++++-------------------- src/META | 8 +- src/PGOCaml_aux.ml | 17 +++-- src/PGOCaml_aux.mli | 2 +- src/PGOCaml_generic.ml | 40 ++++------ src/PGOCaml_generic.mli | 2 +- 10 files changed, 245 insertions(+), 181 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 358915a..66e7fb5 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,3 +1,11 @@ +Release 2.2 +=========== + +* Jacques-Pascal Deplaix: Use Bytes instead of String when mutation + is required. +* Jacques-Pascal Deplaix: fix bug in AuthenticationCryptPassword. + + Release 2.1 =========== diff --git a/_oasis b/_oasis index ed69d46..bbdf288 100644 --- a/_oasis +++ b/_oasis @@ -1,12 +1,12 @@ -OASISFormat: 0.3 +OASISFormat: 0.4 Name: PG'OCaml -Version: 2.1 +Version: 2.2 Synopsis: OCaml bindings for the PostgreSQL database Authors: Richard W. M. Jones et al. Maintainers: Dario Teixeira License: LGPL-2.0 with OCaml linking exception LicenseFile: LICENSE.txt -Plugins: META (0.3), DevFiles (0.3) +Plugins: META (0.4), DevFiles (0.4) BuildTools: ocamlbuild, make, camlp4 PreBuildCommand: $make config @@ -17,9 +17,9 @@ Flag "pgprof" Library "pgocaml" Path: src Modules: PGOCaml_aux, PGOCaml, PGOCaml_generic, PGOCaml_config - BuildDepends: unix, calendar, csv, pcre + BuildDepends: unix, calendar, csv, pcre, bytes FindlibName: pgocaml - XMETARequires: unix, calendar, csv, pcre + XMETARequires: unix, calendar, csv, pcre, bytes Library "pa_pgsql" Path: src @@ -36,7 +36,7 @@ Document "APIDOC" Install: true InstallDir: $htmldir Title: API reference for PG'OCaml - Type: ocamlbuild (0.3) + Type: ocamlbuild (0.4) BuildTools+: ocamldoc XOCamlbuildPath: src XOCamlbuildLibraries: pgocaml diff --git a/_tags b/_tags index f6b3968..b1b74dd 100644 --- a/_tags +++ b/_tags @@ -1,8 +1,9 @@ # OASIS_START -# DO NOT EDIT (digest: 3857d58a649db5119e8a9082760b68c2) +# DO NOT EDIT (digest: 2195434e610096d70cae76da7908ab60) # Ignore VCS directories, you can use the same kind of rule outside # OASIS_START/STOP if you want to exclude directories that contains # useless stuff for the build process +true: annot, bin_annot <**/.svn>: -traverse <**/.svn>: not_hygienic ".bzr": -traverse @@ -17,31 +18,36 @@ "src/pgocaml.cmxs": use_pgocaml # Library pa_pgsql "src/pa_pgsql.cmxs": use_pa_pgsql -<src/*.ml{,i}>: pkg_calendar -<src/*.ml{,i}>: pkg_camlp4.extend -<src/*.ml{,i}>: pkg_camlp4.quotations -<src/*.ml{,i}>: pkg_csv -<src/*.ml{,i}>: pkg_pcre -<src/*.ml{,i}>: pkg_unix -<src/*.ml{,i}>: use_pgocaml +<src/*.ml{,i,y}>: pkg_bytes +<src/*.ml{,i,y}>: pkg_calendar +<src/*.ml{,i,y}>: pkg_camlp4.extend +<src/*.ml{,i,y}>: pkg_camlp4.quotations +<src/*.ml{,i,y}>: pkg_csv +<src/*.ml{,i,y}>: pkg_pcre +<src/*.ml{,i,y}>: pkg_unix +<src/*.ml{,i,y}>: use_pgocaml # Executable pgocaml_prof +"utils/pgocaml_prof.byte": pkg_bytes "utils/pgocaml_prof.byte": pkg_calendar "utils/pgocaml_prof.byte": pkg_csv "utils/pgocaml_prof.byte": pkg_pcre "utils/pgocaml_prof.byte": pkg_unix "utils/pgocaml_prof.byte": use_pgocaml -<utils/*.ml{,i}>: pkg_calendar -<utils/*.ml{,i}>: pkg_csv -<utils/*.ml{,i}>: pkg_pcre -<utils/*.ml{,i}>: pkg_unix -<utils/*.ml{,i}>: use_pgocaml +<utils/*.ml{,i,y}>: pkg_bytes +<utils/*.ml{,i,y}>: pkg_calendar +<utils/*.ml{,i,y}>: pkg_csv +<utils/*.ml{,i,y}>: pkg_pcre +<utils/*.ml{,i,y}>: pkg_unix +<utils/*.ml{,i,y}>: use_pgocaml # Executable test_pgocaml_lowlevel +"tests/test_pgocaml_lowlevel.byte": pkg_bytes "tests/test_pgocaml_lowlevel.byte": pkg_calendar "tests/test_pgocaml_lowlevel.byte": pkg_csv "tests/test_pgocaml_lowlevel.byte": pkg_pcre "tests/test_pgocaml_lowlevel.byte": pkg_unix "tests/test_pgocaml_lowlevel.byte": use_pgocaml # Executable test_pgocaml_highlevel +"tests/test_pgocaml_highlevel.byte": pkg_bytes "tests/test_pgocaml_highlevel.byte": pkg_calendar "tests/test_pgocaml_highlevel.byte": pkg_camlp4.extend "tests/test_pgocaml_highlevel.byte": pkg_camlp4.quotations @@ -50,14 +56,17 @@ "tests/test_pgocaml_highlevel.byte": pkg_unix "tests/test_pgocaml_highlevel.byte": use_pa_pgsql "tests/test_pgocaml_highlevel.byte": use_pgocaml -<tests/*.ml{,i}>: pkg_calendar -<tests/*.ml{,i}>: pkg_camlp4.extend -<tests/*.ml{,i}>: pkg_camlp4.quotations -<tests/*.ml{,i}>: pkg_csv -<tests/*.ml{,i}>: pkg_pcre -<tests/*.ml{,i}>: pkg_unix -<tests/*.ml{,i}>: use_pa_pgsql -<tests/*.ml{,i}>: use_pgocaml +<tests/*.ml{,i,y}>: pkg_bytes +<tests/*.ml{,i,y}>: pkg_calendar +<tests/*.ml{,i,y}>: pkg_camlp4.extend +<tests/*.ml{,i,y}>: pkg_camlp4.quotations +<tests/*.ml{,i,y}>: pkg_csv +<tests/*.ml{,i,y}>: pkg_pcre +<tests/*.ml{,i,y}>: pkg_unix +<tests/*.ml{,i,y}>: use_pa_pgsql +<tests/*.ml{,i,y}>: use_pgocaml # OASIS_STOP <src/pa_pgsql.ml>: syntax_camlp4o <tests/test_pgocaml_highlevel.ml>: syntax_camlp4o, pkg_pgocaml.syntax + +true: safe_string diff --git a/myocamlbuild.ml b/myocamlbuild.ml index 174291a..c65fb7e 100644 --- a/myocamlbuild.ml +++ b/myocamlbuild.ml @@ -1,5 +1,5 @@ (* OASIS_START *) -(* DO NOT EDIT (digest: 43d333dec891efc29775898a6cd6223d) *) +(* DO NOT EDIT (digest: f841356cd28294705cfe988a752cc54d) *) module OASISGettext = struct (* # 22 "src/oasis/OASISGettext.ml" *) @@ -249,6 +249,9 @@ module MyOCamlbuildFindlib = struct *) open Ocamlbuild_plugin + type conf = + { no_automatic_syntax: bool; + } (* these functions are not really officially exported *) let run_and_read = @@ -315,7 +318,7 @@ module MyOCamlbuildFindlib = struct (* This lists all supported packages. *) let find_packages () = - List.map before_space (split_nl & run_and_read "ocamlfind list") + List.map before_space (split_nl & run_and_read (exec_from_conf "ocamlfind" ^ " list")) (* Mock to list available syntaxes. *) @@ -338,7 +341,7 @@ module MyOCamlbuildFindlib = struct ] - let dispatch = + let dispatch conf = function | After_options -> (* By using Before_options one let command line options have an higher @@ -357,31 +360,39 @@ module MyOCamlbuildFindlib = struct * -linkpkg *) flag ["ocaml"; "link"; "program"] & A"-linkpkg"; - (* For each ocamlfind package one inject the -package option when - * compiling, computing dependencies, generating documentation and - * linking. *) - List.iter - begin fun pkg -> - let base_args = [A"-package"; A pkg] in - (* TODO: consider how to really choose camlp4o or camlp4r. *) - let syn_args = [A"-syntax"; A "camlp4o"] in - let args = - (* Heuristic to identify syntax extensions: whether they end in - ".syntax"; some might not. - *) - if Filename.check_suffix pkg "syntax" || - List.mem pkg well_known_syntax then - syn_args @ base_args - else - base_args - in - flag ["ocaml"; "compile"; "pkg_"^pkg] & S args; - flag ["ocaml"; "ocamldep"; "pkg_"^pkg] & S args; - flag ["ocaml"; "doc"; "pkg_"^pkg] & S args; - flag ["ocaml"; "link"; "pkg_"^pkg] & S base_args; - flag ["ocaml"; "infer_interface"; "pkg_"^pkg] & S args; - end - (find_packages ()); + if not (conf.no_automatic_syntax) then begin + (* For each ocamlfind package one inject the -package option when + * compiling, computing dependencies, generating documentation and + * linking. *) + List.iter + begin fun pkg -> + let base_args = [A"-package"; A pkg] in + (* TODO: consider how to really choose camlp4o or camlp4r. *) + let syn_args = [A"-syntax"; A "camlp4o"] in + let (args, pargs) = + (* Heuristic to identify syntax extensions: whether they end in + ".syntax"; some might not. + *) + if Filename.check_suffix pkg "syntax" || + List.mem pkg well_known_syntax then + (syn_args @ base_args, syn_args) + else + (base_args, []) + in + flag ["ocaml"; "compile"; "pkg_"^pkg] & S args; + flag ["ocaml"; "ocamldep"; "pkg_"^pkg] & S args; + flag ["ocaml"; "doc"; "pkg_"^pkg] & S args; + flag ["ocaml"; "link"; "pkg_"^pkg] & S base_args; + flag ["ocaml"; "infer_interface"; "pkg_"^pkg] & S args; + + (* TODO: Check if this is allowed for OCaml < 3.12.1 *) + flag ["ocaml"; "compile"; "package("^pkg^")"] & S pargs; + flag ["ocaml"; "ocamldep"; "package("^pkg^")"] & S pargs; + flag ["ocaml"; "doc"; "package("^pkg^")"] & S pargs; + flag ["ocaml"; "infer_interface"; "package("^pkg^")"] & S pargs; + end + (find_packages ()); + end; (* Like -package but for extensions syntax. Morover -syntax is useless * when linking. *) @@ -546,12 +557,13 @@ module MyOCamlbuildBase = struct (* When ocaml link something that use the C library, then one need that file to be up to date. + This holds both for programs and for libraries. *) - dep ["link"; "ocaml"; "program"; tag_libstubs lib] - [dir/"lib"^(nm_libstubs lib)^"."^(!Options.ext_lib)]; + dep ["link"; "ocaml"; tag_libstubs lib] + [dir/"lib"^(nm_libstubs lib)^"."^(!Options.ext_lib)]; - dep ["compile"; "ocaml"; "program"; tag_libstubs lib] - [dir/"lib"^(nm_libstubs lib)^"."^(!Options.ext_lib)]; + dep ["compile"; "ocaml"; tag_libstubs lib] + [dir/"lib"^(nm_libstubs lib)^"."^(!Options.ext_lib)]; (* TODO: be more specific about what depends on headers *) (* Depends on .h files *) @@ -580,18 +592,18 @@ module MyOCamlbuildBase = struct () - let dispatch_default t = + let dispatch_default conf t = dispatch_combine [ dispatch t; - MyOCamlbuildFindlib.dispatch; + MyOCamlbuildFindlib.dispatch conf; ] end -# 594 "myocamlbuild.ml" +# 606 "myocamlbuild.ml" open Ocamlbuild_plugin;; let package_default = { @@ -603,8 +615,10 @@ let package_default = } ;; -let dispatch_default = MyOCamlbuildBase.dispatch_default package_default;; +let conf = {MyOCamlbuildFindlib.no_automatic_syntax = false} + +let dispatch_default = MyOCamlbuildBase.dispatch_default conf package_default;; -# 609 "myocamlbuild.ml" +# 623 "myocamlbuild.ml" (* OASIS_STOP *) Ocamlbuild_plugin.dispatch dispatch_default;; diff --git a/setup.ml b/setup.ml index 4851e5f..398c8c9 100644 --- a/setup.ml +++ b/setup.ml @@ -1,9 +1,9 @@ (* setup.ml generated for the first time by OASIS v0.3.0~rc6 *) (* OASIS_START *) -(* DO NOT EDIT (digest: f74db3e169dd9abe1ee5fa718712b010) *) +(* DO NOT EDIT (digest: bb76fd3ff2c896e5074a6dc636bcc5e8) *) (* - Regenerated by OASIS v0.4.4 + Regenerated by OASIS v0.4.5 Visit http://oasis.forge.ocamlcore.org for more information and documentation about functions used in this file. *) @@ -242,11 +242,9 @@ module OASISString = struct let replace_chars f s = - let buf = String.make (String.length s) 'X' in - for i = 0 to String.length s - 1 do - buf.[i] <- f s.[i] - done; - buf + let buf = Buffer.create (String.length s) in + String.iter (fun c -> Buffer.add_char buf (f c)) s; + Buffer.contents buf end @@ -1729,6 +1727,13 @@ module OASISFeatures = struct (fun () -> s_ "Allows the OASIS section comments and digest to be omitted in \ generated files.") + + let no_automatic_syntax = + create "no_automatic_syntax" alpha + (fun () -> + s_ "Disable the automatic inclusion of -syntax camlp4o for packages \ + that matches the internal heuristic (if a dependency ends with \ + a .syntax or is a well known syntax).") end module OASISUnixPath = struct @@ -2099,16 +2104,6 @@ module OASISLibrary = struct lst in - (* The headers that should be compiled along *) - let headers = - if lib.lib_pack then - [] - else - find_modules - lib.lib_modules - "cmi" - in - (* The .cmx that be compiled along *) let cmxs = let should_be_built = @@ -2134,12 +2129,32 @@ module OASISLibrary = struct [] in + (* The headers and annot/cmt files that should be compiled along *) + let headers = + let sufx = + if lib.lib_pack + then [".cmti"; ".cmt"; ".annot"] + else [".cmi"; ".cmti"; ".cmt"; ".annot"] + in + List.map + begin + List.fold_left + begin fun accu s -> + let dot = String.rindex s '.' in + let base = String.sub s 0 dot in + List.map ((^) base) sufx @ accu + end + [] + end + (find_modules lib.lib_modules "cmi") + in + (* Compute what libraries should be built *) let acc_nopath = (* Add the packed header file if required *) let add_pack_header acc = if lib.lib_pack then - [cs.cs_name^".cmi"] :: acc + [cs.cs_name^".cmi"; cs.cs_name^".cmti"; cs.cs_name^".cmt"] :: acc else acc in @@ -2499,13 +2514,13 @@ module OASISFindlib = struct in let library_name_of_findlib_name = - Lazy.lazy_from_fun - (fun () -> - (* Revert findlib_name_of_library_name. *) - MapString.fold - (fun k v mp -> MapString.add v k mp) - fndlb_name_of_lib_name - MapString.empty) + lazy begin + (* Revert findlib_name_of_library_name. *) + MapString.fold + (fun k v mp -> MapString.add v k mp) + fndlb_name_of_lib_name + MapString.empty + end in let library_name_of_findlib_name fndlb_nm = try @@ -2875,7 +2890,7 @@ module OASISFileUtil = struct end -# 2878 "setup.ml" +# 2893 "setup.ml" module BaseEnvLight = struct (* # 22 "src/base/BaseEnvLight.ml" *) @@ -2980,7 +2995,7 @@ module BaseEnvLight = struct end -# 2983 "setup.ml" +# 2998 "setup.ml" module BaseContext = struct (* # 22 "src/base/BaseContext.ml" *) @@ -5391,7 +5406,7 @@ module BaseSetup = struct end -# 5394 "setup.ml" +# 5409 "setup.ml" module InternalConfigurePlugin = struct (* # 22 "src/plugins/internal/InternalConfigurePlugin.ml" *) @@ -5827,6 +5842,17 @@ module InternalInstallPlugin = struct lst in + let make_fnames modul sufx = + List.fold_right + begin fun sufx accu -> + (String.capitalize modul ^ sufx) :: + (String.uncapitalize modul ^ sufx) :: + accu + end + sufx + [] + in + (** Install all libraries *) let install_libs pkg = @@ -5847,27 +5873,29 @@ module InternalInstallPlugin = struct OASISHostPath.of_unix bs.bs_path in List.fold_left - (fun acc modul -> - try - List.find - OASISFileUtil.file_exists_case - (List.map - (Filename.concat path) - [modul^".mli"; - modul^".ml"; - String.uncapitalize modul^".mli"; - String.capitalize modul^".mli"; - String.uncapitalize modul^".ml"; - String.capitalize modul^".ml"]) - :: acc - with Not_found -> - begin - warning - (f_ "Cannot find source header for module %s \ - in library %s") - modul cs.cs_name; - acc - end) + begin fun acc modul -> + begin + try + [List.find + OASISFileUtil.file_exists_case + (List.map + (Filename.concat path) + (make_fnames modul [".mli"; ".ml"]))] + with Not_found -> + warning + (f_ "Cannot find source header for module %s \ + in library %s") + modul cs.cs_name; + [] + end + @ + List.filter + OASISFileUtil.file_exists_case + (List.map + (Filename.concat path) + (make_fnames modul [".annot";".cmti";".cmt"])) + @ acc + end acc lib.lib_modules in @@ -5915,27 +5943,29 @@ module InternalInstallPlugin = struct OASISHostPath.of_unix bs.bs_path in List.fold_left - (fun acc modul -> - try - List.find - OASISFileUtil.file_exists_case - (List.map - (Filename.concat path) - [modul^".mli"; - modul^".ml"; - String.uncapitalize modul^".mli"; - String.capitalize modul^".mli"; - String.uncapitalize modul^".ml"; - String.capitalize modul^".ml"]) - :: acc - with Not_found -> - begin - warning - (f_ "Cannot find source header for module %s \ - in object %s") - modul cs.cs_name; - acc - end) + begin fun acc modul -> + begin + try + [List.find + OASISFileUtil.file_exists_case + (List.map + (Filename.concat path) + (make_fnames modul [".mli"; ".ml"]))] + with Not_found -> + warning + (f_ "Cannot find source header for module %s \ + in object %s") + modul cs.cs_name; + [] + end + @ + List.filter + OASISFileUtil.file_exists_case + (List.map + (Filename.concat path) + (make_fnames modul [".annot";".cmti";".cmt"])) + @ acc + end acc obj.obj_modules in @@ -6240,7 +6270,7 @@ module InternalInstallPlugin = struct end -# 6243 "setup.ml" +# 6273 "setup.ml" module OCamlbuildCommon = struct (* # 22 "src/plugins/ocamlbuild/OCamlbuildCommon.ml" *) @@ -6298,6 +6328,11 @@ module OCamlbuildCommon = struct else []; + if bool_of_string (tests ()) then + ["-tag"; "tests"] + else + []; + if bool_of_string (profile ()) then ["-tag"; "profile"] else @@ -6613,7 +6648,7 @@ module OCamlbuildDocPlugin = struct end -# 6616 "setup.ml" +# 6651 "setup.ml" module CustomPlugin = struct (* # 22 "src/plugins/custom/CustomPlugin.ml" *) @@ -6761,7 +6796,7 @@ module CustomPlugin = struct end -# 6764 "setup.ml" +# 6799 "setup.ml" open OASISTypes;; let setup_t = @@ -6844,13 +6879,13 @@ let setup_t = distclean_doc = []; package = { - oasis_version = "0.3"; + oasis_version = "0.4"; ocaml_version = None; findlib_version = None; alpha_features = []; beta_features = []; name = "PG'OCaml"; - version = "2.1"; + version = "2.2"; license = OASISLicense.DEP5License (OASISLicense.DEP5Unit @@ -6931,7 +6966,8 @@ let setup_t = FindlibPackage ("unix", None); FindlibPackage ("calendar", None); FindlibPackage ("csv", None); - FindlibPackage ("pcre", None) + FindlibPackage ("pcre", None); + FindlibPackage ("bytes", None) ]; bs_build_tools = [ @@ -7009,7 +7045,7 @@ let setup_t = cs_plugin_data = [] }, { - doc_type = (`Doc, "ocamlbuild", Some "0.3"); + doc_type = (`Doc, "ocamlbuild", Some "0.4"); doc_custom = { pre_command = [(OASISExpr.EBool true, None)]; @@ -7205,14 +7241,14 @@ let setup_t = }) ]; plugins = - [(`Extra, "META", Some "0.3"); (`Extra, "DevFiles", Some "0.3")]; + [(`Extra, "META", Some "0.4"); (`Extra, "DevFiles", Some "0.4")]; disable_oasis_section = []; schema_data = PropList.Data.create (); plugin_data = [] }; oasis_fn = Some "_oasis"; - oasis_version = "0.4.4"; - oasis_digest = Some "\251\024\216\184Z\220\235\232\225Z|!AS=9"; + oasis_version = "0.4.5"; + oasis_digest = Some "=#\021(1\214^*s;\006\230\026P3."; oasis_exec = None; oasis_setup_args = []; setup_update = false @@ -7220,6 +7256,6 @@ let setup_t = let setup () = BaseSetup.setup setup_t;; -# 7224 "setup.ml" +# 7260 "setup.ml" (* OASIS_STOP *) let () = setup ();; diff --git a/src/META b/src/META index 9b388f7..63e25a5 100644 --- a/src/META +++ b/src/META @@ -1,15 +1,15 @@ # OASIS_START -# DO NOT EDIT (digest: cb1509fc9b26fe21e7753dabd32b93d7) -version = "2.1" +# DO NOT EDIT (digest: 023ae9385c9c2cfcf39a4b5db8ae0c35) +version = "2.2" description = "OCaml bindings for the PostgreSQL database" -requires = "unix calendar csv pcre" +requires = "unix calendar csv pcre bytes" archive(byte) = "pgocaml.cma" archive(byte, plugin) = "pgocaml.cma" archive(native) = "pgocaml.cmxa" archive(native, plugin) = "pgocaml.cmxs" exists_if = "pgocaml.cma" package "syntax" ( - version = "2.1" + version = "2.2" description = "Syntax extension for PG'OCaml" requires = "pgocaml camlp4" archive(syntax, preprocessor) = "pa_pgsql.cma" diff --git a/src/PGOCaml_aux.ml b/src/PGOCaml_aux.ml index b1507c1..44ff860 100644 --- a/src/PGOCaml_aux.ml +++ b/src/PGOCaml_aux.ml @@ -20,11 +20,9 @@ struct let join = concat let implode xs = - let res = create (List.length xs) in - let rec aux i = function - | [] -> res - | hd :: tl -> res.[i] <- hd; aux (i + 1) tl in - aux 0 xs + let buf = Buffer.create (List.length xs) in + List.iter (Buffer.add_char buf) xs; + Buffer.contents buf let fold_left f init str = let len = length str in @@ -33,6 +31,14 @@ struct then accum else loop (i + 1) (f accum str.[i]) in loop 0 init + + (* Only available in the standard library since OCaml 4.02 *) + let init n f = + let s = Bytes.create n in + for i = 0 to n - 1 do + Bytes.unsafe_set s i (f i) + done; + Bytes.to_string s end module Option = @@ -66,4 +72,3 @@ struct | hd :: tl -> let hd' = f i hd in hd' :: loop (i+1) tl in loop 0 xs end - diff --git a/src/PGOCaml_aux.mli b/src/PGOCaml_aux.mli index f9e04ad..28a01b1 100644 --- a/src/PGOCaml_aux.mli +++ b/src/PGOCaml_aux.mli @@ -6,6 +6,7 @@ module String : val join : string -> string list -> string val implode : char list -> string val fold_left : ('a -> char -> 'a) -> 'a -> string -> 'a + val init: int -> (int -> char) -> string end module Option : @@ -23,4 +24,3 @@ module List : val iteri : (int -> 'a -> unit) -> 'a list -> unit val mapi : (int -> 'a -> 'b) -> 'a list -> 'b list end - diff --git a/src/PGOCaml_generic.ml b/src/PGOCaml_generic.ml index a071d83..1a4435c 100644 --- a/src/PGOCaml_generic.ml +++ b/src/PGOCaml_generic.ml @@ -39,7 +39,7 @@ module type THREAD = sig val flush : out_channel -> unit t val input_char : in_channel -> char t val input_binary_int : in_channel -> int t - val really_input : in_channel -> string -> int -> int -> unit t + val really_input : in_channel -> Bytes.t -> int -> int -> unit t val close_in : in_channel -> unit t end @@ -459,7 +459,7 @@ let receive_message { ichan = ichan; chan = chan } = if len > !max_message_length then ( (* Skip the message so we stay in synch with the stream. *) let bufsize = 65_536 in - let buf = String.create bufsize in + let buf = Bytes.create bufsize in let rec loop n = if n > 0 then begin let m = min n bufsize in @@ -475,9 +475,9 @@ let receive_message { ichan = ichan; chan = chan } = ) else ( (* Read the binary message content. *) - let msg = String.create len in + let msg = Bytes.create len in really_input ichan msg 0 len >>= fun () -> - return (typ, msg) + return (typ, Bytes.to_string msg) ) (* Send a message and expect a single result. *) @@ -633,13 +633,7 @@ let parse_backend_message (typ, msg) = in loop () in - let get_n_bytes n = - let str = String.create n in - for i = 0 to n-1 do - str.[i] <- get_char "get_n_bytes" - done; - str - in + let get_n_bytes n = String.init n (fun _ -> get_char "get_n_bytes") in let get_char () = get_char "get_char" in (*let get_byte () = get_byte "get_byte" in*) @@ -652,16 +646,10 @@ let parse_backend_message (typ, msg) = | 2l -> AuthenticationKerberosV5 | 3l -> AuthenticationCleartextPassword | 4l -> - let salt = String.create 2 in - for i = 0 to 2 do - salt.[i] <- get_char () - done; + let salt = String.init 2 (fun _ -> get_char ()) in AuthenticationCryptPassword salt | 5l -> - let salt = String.create 4 in - for i = 0 to 3 do - salt.[i] <- get_char () - done; + let salt = String.init 4 (fun _ -> get_char ()) in AuthenticationMD5Password salt | 6l -> AuthenticationSCMCredential | _ -> UnknownMessage (typ, msg) @@ -832,7 +820,9 @@ let pg_error ?conn fields = type 'a retexn = Ret of 'a | Exn of exn -(* profile_op : string -> string -> string list -> (unit -> 'a) -> 'a *) +(* profile_op : + * string -> string -> string list -> (unit -> 'a Thread.t) -> 'a Thread.t + *) let profile_op uuid op detail f = let chan = try @@ -847,7 +837,9 @@ let profile_op uuid op detail f = | None -> f () (* No profiling - just run it. *) | Some chan -> (* Profiling. *) let start_time = Unix.gettimeofday () in - let ret = try Ret (f ()) with exn -> Exn exn in + catch + (fun () -> f () >>= fun x -> return (Ret x)) + (fun exn -> return (Exn exn)) >>= fun ret -> let end_time = Unix.gettimeofday () in let elapsed_time_ms = int_of_float (1000. *. (end_time -. start_time)) in @@ -871,8 +863,8 @@ let profile_op uuid op detail f = (* Return result or re-raise the exception. *) match ret with - | Ret r -> r - | Exn exn -> raise exn + | Ret r -> return r + | Exn exn -> fail exn (*----- Connection. -----*) @@ -1736,7 +1728,7 @@ let any_array_of_string str = None else let n = String.length x in - if n >= 2 && x.[0] = '"' + if n >= 2 && x.[0] = '"' then Some (String.sub x 1 (n-2)) else Some x in field :: accum in diff --git a/src/PGOCaml_generic.mli b/src/PGOCaml_generic.mli index c41708b..e1d33cc 100644 --- a/src/PGOCaml_generic.mli +++ b/src/PGOCaml_generic.mli @@ -39,7 +39,7 @@ module type THREAD = sig val flush : out_channel -> unit t val input_char : in_channel -> char t val input_binary_int : in_channel -> int t - val really_input : in_channel -> string -> int -> int -> unit t + val really_input : in_channel -> Bytes.t -> int -> int -> unit t val close_in : in_channel -> unit t end -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ocaml-maint/packages/pgocaml.git _______________________________________________ Pkg-ocaml-maint-commits mailing list Pkg-ocaml-maint-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-ocaml-maint-commits