Handle NUL characters in Perl strings properly.
authorrich <rich>
Sun, 13 Feb 2005 16:33:27 +0000 (16:33 +0000)
committerrich <rich>
Sun, 13 Feb 2005 16:33:27 +0000 (16:33 +0000)
URI: Lots more methods bound.
WWW::Mechanize: Bind the WWW::Mechanize::Links class and links method.

perl_c.c
wrappers/pl_URI.ml
wrappers/pl_WWW_Mechanize.ml

index 06b69b6..11d1cc6 100644 (file)
--- 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 <stdio.h>
@@ -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);
 }
 
index fa4389f..a4a7732 100644 (file)
@@ -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
index a0b5f60..a666ecd 100644 (file)
@@ -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 () =