x11: null terminate strings; punt unused optimization.
authorMatt Birkholz <matt@birchwood-abbey.net>
Mon, 28 Aug 2017 18:33:32 +0000 (11:33 -0700)
committerMatt Birkholz <matt@birchwood-abbey.net>
Mon, 28 Aug 2017 18:33:32 +0000 (11:33 -0700)
src/x11/x11-base.scm
src/x11/x11-graphics.scm
src/x11/x11-terminal.scm
src/x11/x11.pkg

index ed50a8b5a50b18d9f6c1575b0b355c423c3e2224..496d2b109eeac12dbe190b0155061205aed894ee 100644 (file)
@@ -51,22 +51,18 @@ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
   (if (not (zero? (C-call "x_window_set_input_hint" window (if hint? 1 0))))
       (error "XAllocWMHints failed.")))
 
+(define-integrable primitive-u8-set! (ucode-primitive bytevector-u8-set! 3))
+
 (define (->bytes string)
-  (if (and (or (bytevector? string)
-              (and (ustring? string)
-                   (fix:= 1 (ustring-cp-size string))))
-          (let ((end (string-length string)))
-            (every-loop (lambda (cp) (fix:< cp #x80))
-                        cp1-ref string 0 end)))
+  (if (bytevector? string)
       string
-      (string->iso8859-1 string)))
-
-(define-integrable (every-loop proc ref string start end)
-  (let loop ((i start))
-    (if (fix:< i end)
-       (and (proc (ref string i))
-            (loop (fix:+ i 1)))
-       #t)))
+      (let* ((end (string-length string))
+            (result (make-bytevector (fix:1+ end))))
+       (do ((i 0 (fix:+ i 1)))
+           ((not (fix:< i end))
+            (primitive-u8-set! result i #x00))
+         (primitive-u8-set! result i (char->integer (string-ref string i))))
+       result)))
 
 (define (x-window-set-name window name)
   (guarantee-xwindow window 'x-window-set-name)
index f160f554249a69620c8ab8678f031d75ebb411ff..d2753b089160baac89e592588544c0874e014a4c 100644 (file)
@@ -58,23 +58,6 @@ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
 (define (x-graphics-reconfigure window width height)
   (C-call "x_graphics_reconfigure" window width height))
 
-(define (->bytes string)
-  (if (and (or (bytevector? string)
-              (and (ustring? string)
-                   (fix:= 1 (ustring-cp-size string))))
-          (let ((end (string-length string)))
-            (every-loop (lambda (cp) (fix:< cp #x80))
-                        cp1-ref string 0 end)))
-      string
-      (string->iso8859-1 string)))
-
-(define-integrable (every-loop proc ref string start end)
-  (let loop ((i start))
-    (if (fix:< i end)
-       (and (proc (ref string i))
-            (loop (fix:+ i 1)))
-       #t)))
-
 (define (x-graphics-open-window display geometry suppress-map)
   ;; Open a window on DISPLAY using GEOMETRY.  If GEOMETRY is false
   ;; map window interactively.  If third argument SUPPRESS-MAP? is
index 1cee3cb1e5b1c7d5e12c306355b3e2cdeb3fe763..fdf6925e9a75b750b8b6e94e50d2fe6bcc5d8c7e 100644 (file)
@@ -75,9 +75,9 @@ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
     (let ((window
           (c-call "xterm_open_window" (make-alien '(struct |xwindow|))
                   display
-                  (string->utf8 geometry)
-                  (string->utf8 name)
-                  (string->utf8 class)
+                  (->bytes geometry)
+                  (->bytes name)
+                  (->bytes class)
                   (if map? 1 0))))
       (if (alien-null? window)
          (error "Could not open xterm:" geometry))
@@ -125,7 +125,7 @@ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
 (define (xterm-write-substring! xterm x y string start end highlight)
   (guarantee-all-ascii string 'xterm-write-substring!)
   (let ((code (c-call "xterm_write_substring"
-                     xterm x y (string->utf8 string) start end highlight)))
+                     xterm x y (->bytes string) start end highlight)))
     (case code
       ((1) (error:bad-range-argument x 'xterm-write-substring!))
       ((2) (error:bad-range-argument y 'xterm-write-substring!))
index f9e0137d81b446d8d60564a24690ffca008ddc76..ceb8d09abdeca2a16056b6bb0bedfd245d102ba4 100644 (file)
@@ -35,11 +35,8 @@ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
   (parent (x11))
   (export ()
          x-close-all-displays)
-  (import (runtime ustring)
-         cp1-ref
-         ustring-cp-size
-         ustring?)
   (export (x11)
+         ->bytes
          x-visual-deallocate
          x-close-display
          x-window-set-input-hint