Handle non utf8 paths on OCaml side too
authormalc <av1474@comtv.ru>
Fri, 23 Nov 2012 02:36:51 +0000 (23 06:36 +0400)
committermalc <av1474@comtv.ru>
Fri, 23 Nov 2012 02:36:51 +0000 (23 06:36 +0400)
link.c
main.ml

diff --git a/link.c b/link.c
index 70e10d2..86e7156 100644 (file)
--- a/link.c
+++ b/link.c
@@ -1525,6 +1525,24 @@ static char *mbtoutf8 (char *s)
     return r;
 }
 
+CAMLprim value ml_mbtoutf8 (value s_v)
+{
+    CAMLparam1 (s_v);
+    CAMLlocal1 (ret_v);
+    char *s, *r;
+
+    s = String_val (s_v);
+    r = mbtoutf8 (s);
+    if (r == s) {
+        ret_v = s_v;
+    }
+    else {
+        ret_v = caml_copy_string (r);
+        free (r);
+    }
+    CAMLreturn (ret_v);
+}
+
 static void * mainloop (void *unused)
 {
     char *p = NULL;
diff --git a/main.ml b/main.ml
index 4ad9395..baa12b0 100644 (file)
--- a/main.ml
+++ b/main.ml
@@ -98,6 +98,7 @@ external getlinkrect : opaque -> int -> irect = "ml_getlinkrect";;
 external getlinkcount : opaque -> int = "ml_getlinkcount";;
 external findpwl: int -> int -> pagewithlinks = "ml_find_page_with_links"
 external popen : string -> (Unix.file_descr * int) list -> unit = "ml_popen";;
+external mbtoutf8 : string -> string = "ml_mbtoutf8";;
 
 let platform_to_string = function
   | Punknown      -> "unknown"
@@ -1853,7 +1854,7 @@ let opendoc path password =
 
   flushpages ();
   setaalevel conf.aalevel;
-  Wsi.settitle ("llpp " ^ Filename.basename path);
+  Wsi.settitle ("llpp " ^ (mbtoutf8 (Filename.basename path)));
   wcmd "open %s\000%s\000" path password;
   invalidate "reqlayout"
     (fun () ->