浏览代码

Update terminal-read-str for better mem handling

Lily Carpenter 9 年之前
父节点
当前提交
cc0a7ef690
共有 2 个文件被更改,包括 6 次插入10 次删除
  1. 1 2
      bearlibterminal.asd
  2. 5 8
      src/bearlibterminal-internal.lisp

+ 1 - 2
bearlibterminal.asd

@@ -7,8 +7,7 @@
7 7
   :serial t
8 8
   :pathname "src"
9 9
   :depends-on ("cl-autowrap"
10
-               "cl-plus-c"
11
-               "trivial-garbage")
10
+               "cl-plus-c")
12 11
   :components ((:module :autowrap-spec
13 12
                 :pathname "spec"
14 13
                 :components

+ 5 - 8
src/bearlibterminal-internal.lisp

@@ -2,11 +2,6 @@
2 2
 
3 3
 (in-package #:bearlibterminal-internal)
4 4
 
5
-(defun foreign-collect (wrapped-ptr &optional (free-fun #'cffi:foreign-free))
6
-  (let ((ptr (autowrap:ptr wrapped-ptr)))
7
-    (tg:finalize wrapped-ptr (lambda () (funcall free-fun ptr)))
8
-    wrapped-ptr))
9
-
10 5
 (defun terminal-print (x y string)
11 6
   (terminal-print8 x y string))
12 7
 
@@ -17,9 +12,11 @@
17 12
   (terminal-measure8 string))
18 13
 
19 14
 (defun terminal-read-str (x y max)
20
-  (let ((input (foreign-collect (cffi:foreign-alloc :char :initial-element 0 :count max))))
21
-    (terminal-read-str8 x y input max)
22
-    (cffi:foreign-string-to-lisp input)))
15
+  (let ((input-buffer (cffi:foreign-alloc :char :initial-element 0 :count max)))
16
+    (terminal-read-str8 x y input-buffer max)
17
+    (let ((input-string (cffi:foreign-string-to-lisp input-buffer)))
18
+      (cffi:foreign-free input-buffer)
19
+      input-string)))
23 20
 
24 21
 (defun terminal-get (key default)
25 22
   (terminal-get8 key default))