From: rich Date: Sun, 13 Feb 2005 16:33:27 +0000 (+0000) Subject: Handle NUL characters in Perl strings properly. X-Git-Url: http://git.annexia.org/?a=commitdiff_plain;h=0b407a0c622e181699f5d3984332c5c76f21cdd1;p=perl4caml.git Handle NUL characters in Perl strings properly. URI: Lots more methods bound. WWW::Mechanize: Bind the WWW::Mechanize::Links class and links method. --- diff --git a/perl_c.c b/perl_c.c index 06b69b6..11d1cc6 100644 --- a/perl_c.c +++ b/perl_c.c @@ -1,6 +1,6 @@ /* Interface to Perl from OCaml. * Copyright (C) 2003 Merjis Ltd. - * $Id: perl_c.c,v 1.21 2005-01-29 12:22:49 rich Exp $ + * $Id: perl_c.c,v 1.22 2005-02-13 16:33:27 rich Exp $ */ #include @@ -129,8 +129,8 @@ perl4caml_string_of_sv (value svv) STRLEN len; CAMLlocal1 (strv); str = SvPV (sv, len); - /* XXX This won't work if the string contains NUL. */ - strv = caml_copy_string (str); + strv = caml_alloc_string (len); + memcpy (String_val (strv), str, len); CAMLreturn (strv); } diff --git a/wrappers/pl_URI.ml b/wrappers/pl_URI.ml index fa4389f..a4a7732 100644 --- a/wrappers/pl_URI.ml +++ b/wrappers/pl_URI.ml @@ -2,7 +2,7 @@ * * Copyright (C) 2003 Merjis Ltd. * - * $Id: pl_URI.ml,v 1.3 2003-10-16 13:41:07 rich Exp $ + * $Id: pl_URI.ml,v 1.4 2005-02-13 16:33:28 rich Exp $ *) open Perl @@ -40,6 +40,22 @@ object (self) method rel base = string_of_sv (call_method sv "rel" [sv_of_string base]) + + method host = + string_of_sv (call_method sv "host" []) + method set_host host = + call_method_void sv "host" [sv_of_string host] + method port = + string_of_sv (call_method sv "port" []) + method set_port port = + call_method_void sv "port" [sv_of_string port] + method host_port = + string_of_sv (call_method sv "host_port" []) + method set_host_port host_port = + call_method_void sv "host_port" [sv_of_string host_port] + method default_port = + int_of_sv (call_method sv "default_port" []) + end let new_ ?scheme str = @@ -50,3 +66,8 @@ let new_ ?scheme str = | Some scheme -> [sv_of_string scheme] in let sv = call_class_method "URI" "new" args in new uri sv + +let new_abs str base = + let sv = call_class_method "URI" "new_abs" [sv_of_string str; + sv_of_string base] in + new uri sv diff --git a/wrappers/pl_WWW_Mechanize.ml b/wrappers/pl_WWW_Mechanize.ml index a0b5f60..a666ecd 100644 --- a/wrappers/pl_WWW_Mechanize.ml +++ b/wrappers/pl_WWW_Mechanize.ml @@ -2,7 +2,7 @@ * * Copyright (C) 2004 Merjis Ltd. * - * $Id: pl_WWW_Mechanize.ml,v 1.3 2005-01-13 16:06:04 rich Exp $ + * $Id: pl_WWW_Mechanize.ml,v 1.4 2005-02-13 16:33:28 rich Exp $ *) open Perl @@ -156,7 +156,9 @@ object (self) let sv = call_method sv "content" [] in string_of_sv sv (* method current_forms = *) - (* method links = *) + method links = + let svs = call_method_array sv "links" [] in + List.map (new www_mechanize_link) svs method is_html = let sv = call_method sv "is_html" [] in bool_of_sv sv @@ -185,6 +187,21 @@ object (self) end +(* Not much documentation exists for the WWW::Mechanize::Link class. As far + * as I can see, the only documented method is #url to return the URL. XXX + *) +and www_mechanize_link sv = + +object (self) + + method sv = sv + + method url = + let sv = call_method sv "url" [] in + string_of_sv sv + +end + (* XXX Should be able to pass args to constructor of LWP::UserAgent. *) (* XXX WWW::Mechanize has additional parameters. *) let new_ ?autocheck () =