chiark
/
gitweb
/
~mdw
/
clg
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
a15ecb7
)
All alien strings automatically converted to and from utf8 i SBCL
author
espen
<espen>
Sun, 17 Apr 2005 21:49:19 +0000
(21:49 +0000)
committer
espen
<espen>
Sun, 17 Apr 2005 21:49:19 +0000
(21:49 +0000)
glib/defpackage.lisp
patch
|
blob
|
blame
|
history
glib/ffi.lisp
patch
|
blob
|
blame
|
history
diff --git
a/glib/defpackage.lisp
b/glib/defpackage.lisp
index 0fd7053d04c462e6c9a7d26b18c042550a192b96..f32dde22b0240a89cd586b4c153644495ccede4f 100644
(file)
--- a/
glib/defpackage.lisp
+++ b/
glib/defpackage.lisp
@@
-1,5
+1,5
@@
;; Common Lisp bindings for GTK+ v2.0
;; Common Lisp bindings for GTK+ v2.0
-;; Copyright (C) 1999-200
0 Espen S. Johnsen <espejohn@online.no
>
+;; Copyright (C) 1999-200
5 Espen S. Johnsen <espen@users.sf.net
>
;;
;; This library is free software; you can redistribute it and/or
;; modify it under the terms of the GNU Lesser General Public
;;
;; This library is free software; you can redistribute it and/or
;; modify it under the terms of the GNU Lesser General Public
@@
-15,7
+15,7
@@
;; License along with this library; if not, write to the Free Software
;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
;; License along with this library; if not, write to the Free Software
;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-;; $Id: defpackage.lisp,v 1.
5 2005/02/03 23:09:03
espen Exp $
+;; $Id: defpackage.lisp,v 1.
6 2005/04/17 21:49:19
espen Exp $
;(export 'kernel::type-expand-1 "KERNEL")
;(export 'kernel::type-expand-1 "KERNEL")
@@
-37,7
+37,9
@@
(defpackage "GLIB"
(:import-from #+cmu"ALIEN" #+sbcl"SB-ALIEN"
"WITH-ALIEN" "ALIEN-FUNCALL" "%HEAP-ALIEN" "MAKE-HEAP-ALIEN-INFO"
"ADDR" "PARSE-ALIEN-TYPE" "SYSTEM-AREA-POINTER" "EXTERN-ALIEN")
(:import-from #+cmu"ALIEN" #+sbcl"SB-ALIEN"
"WITH-ALIEN" "ALIEN-FUNCALL" "%HEAP-ALIEN" "MAKE-HEAP-ALIEN-INFO"
"ADDR" "PARSE-ALIEN-TYPE" "SYSTEM-AREA-POINTER" "EXTERN-ALIEN")
- (:import-from #+cmu"C-CALL" #+sbcl"SB-ALIEN" "%NATURALIZE-C-STRING" "VOID")
+ #+cmu(:import-from "C-CALL" "%NATURALIZE-C-STRING" "VOID")
+ #+sbcl(:import-from "SB-ALIEN"
+ "%NATURALIZE-UTF8-STRING" "%DEPORT-UTF8-STRING" "VOID")
(:export "DEFTYPE-METHOD" "TRANSLATE-TYPE-SPEC" "TRANSLATE-TO-ALIEN"
"TRANSLATE-FROM-ALIEN" "CLEANUP-ALIEN" "UNREFERENCE-ALIEN"
"SIZE-OF" "UNBOUND-VALUE")
(:export "DEFTYPE-METHOD" "TRANSLATE-TYPE-SPEC" "TRANSLATE-TO-ALIEN"
"TRANSLATE-FROM-ALIEN" "CLEANUP-ALIEN" "UNREFERENCE-ALIEN"
"SIZE-OF" "UNBOUND-VALUE")
diff --git
a/glib/ffi.lisp
b/glib/ffi.lisp
index bf721a72686888d5199df1f3ecdd0787b1191f57..ca6bd5822b8f245931fe4296315c7ef81d986d47 100644
(file)
--- a/
glib/ffi.lisp
+++ b/
glib/ffi.lisp
@@
-1,5
+1,5
@@
;; Common Lisp bindings for GTK+ v2.0
;; Common Lisp bindings for GTK+ v2.0
-;; Copyright (C) 1999-200
1 Espen S. Johnsen <esj@stud.cs.uit.no
>
+;; Copyright (C) 1999-200
5 Espen S. Johnsen <espen@users.sf.net
>
;;
;; This library is free software; you can redistribute it and/or
;; modify it under the terms of the GNU Lesser General Public
;;
;; This library is free software; you can redistribute it and/or
;; modify it under the terms of the GNU Lesser General Public
@@
-15,7
+15,7
@@
;; License along with this library; if not, write to the Free Software
;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
;; License along with this library; if not, write to the Free Software
;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-;; $Id: ffi.lisp,v 1.1
8 2005/03/13 18:06:51
espen Exp $
+;; $Id: ffi.lisp,v 1.1
9 2005/04/17 21:49:19
espen Exp $
(in-package "GLIB")
(in-package "GLIB")
@@
-546,23
+546,32
@@
(defmethod to-alien-form (string (type (eql 'string)) &rest args)
(declare (ignore type args))
`(let ((string ,string))
;; Always copy strings to prevent seg fault due to GC
(declare (ignore type args))
`(let ((string ,string))
;; Always copy strings to prevent seg fault due to GC
+ #+cmu
(copy-memory
(vector-sap (coerce string 'simple-base-string))
(copy-memory
(vector-sap (coerce string 'simple-base-string))
- (1+ (length string)))))
+ (1+ (length string)))
+ #+sbcl
+ (let ((utf8 (%deport-utf8-string string)))
+ (copy-memory (vector-sap utf8) (length utf8)))))
(defmethod to-alien-function ((type (eql 'string)) &rest args)
(declare (ignore type args))
#'(lambda (string)
(defmethod to-alien-function ((type (eql 'string)) &rest args)
(declare (ignore type args))
#'(lambda (string)
+ #+cmu
(copy-memory
(vector-sap (coerce string 'simple-base-string))
(copy-memory
(vector-sap (coerce string 'simple-base-string))
- (1+ (length string)))))
+ (1+ (length string)))
+ #+sbcl
+ (let ((utf8 (%deport-utf8-string string)))
+ (copy-memory (vector-sap utf8) (length utf8)))))
(defmethod from-alien-form (string (type (eql 'string)) &rest args)
(declare (ignore type args))
`(let ((string ,string))
(unless (null-pointer-p string)
(prog1
(defmethod from-alien-form (string (type (eql 'string)) &rest args)
(declare (ignore type args))
`(let ((string ,string))
(unless (null-pointer-p string)
(prog1
- (%naturalize-c-string string)
+ #+cmu(%naturalize-c-string string)
+ #+sbcl(%naturalize-utf8-string string)
(deallocate-memory string)))))
(defmethod from-alien-function ((type (eql 'string)) &rest args)
(deallocate-memory string)))))
(defmethod from-alien-function ((type (eql 'string)) &rest args)
@@
-570,7
+579,8
@@
(defmethod from-alien-function ((type (eql 'string)) &rest args)
#'(lambda (string)
(unless (null-pointer-p string)
(prog1
#'(lambda (string)
(unless (null-pointer-p string)
(prog1
- (%naturalize-c-string string)
+ #+cmu(%naturalize-c-string string)
+ #+sbcl(%naturalize-utf8-string string)
(deallocate-memory string)))))
(defmethod cleanup-form (string (type (eql 'string)) &rest args)
(deallocate-memory string)))))
(defmethod cleanup-form (string (type (eql 'string)) &rest args)
@@
-589,29
+599,35
@@
(defmethod copy-from-alien-form (string (type (eql 'string)) &rest args)
(declare (ignore type args))
`(let ((string ,string))
(unless (null-pointer-p string)
(declare (ignore type args))
`(let ((string ,string))
(unless (null-pointer-p string)
-
(%naturalize-c-string string)))
)
-
+
#+cmu(%naturalize-c-string string
)
+ #+sbcl(%naturalize-utf8-string string))))
(defmethod copy-from-alien-function ((type (eql 'string)) &rest args)
(declare (ignore type args))
#'(lambda (string)
(unless (null-pointer-p string)
(defmethod copy-from-alien-function ((type (eql 'string)) &rest args)
(declare (ignore type args))
#'(lambda (string)
(unless (null-pointer-p string)
- (%naturalize-c-string string))))
+ #+cmu(%naturalize-c-string string)
+ #+sbcl(%naturalize-utf8-string string))))
(defmethod writer-function ((type (eql 'string)) &rest args)
(declare (ignore type args))
#'(lambda (string location &optional (offset 0))
(assert (null-pointer-p (sap-ref-sap location offset)))
(setf (sap-ref-sap location offset)
(defmethod writer-function ((type (eql 'string)) &rest args)
(declare (ignore type args))
#'(lambda (string location &optional (offset 0))
(assert (null-pointer-p (sap-ref-sap location offset)))
(setf (sap-ref-sap location offset)
+ #+cmu
(copy-memory
(vector-sap (coerce string 'simple-base-string))
(copy-memory
(vector-sap (coerce string 'simple-base-string))
- (1+ (length string))))))
+ (1+ (length string)))
+ #+sbcl
+ (let ((utf8 (%deport-utf8-string string)))
+ (copy-memory (vector-sap utf8) (length utf8))))))
(defmethod reader-function ((type (eql 'string)) &rest args)
(declare (ignore type args))
#'(lambda (location &optional (offset 0))
(unless (null-pointer-p (sap-ref-sap location offset))
(defmethod reader-function ((type (eql 'string)) &rest args)
(declare (ignore type args))
#'(lambda (location &optional (offset 0))
(unless (null-pointer-p (sap-ref-sap location offset))
- (%naturalize-c-string (sap-ref-sap location offset)))))
+ #+cmu(%naturalize-c-string (sap-ref-sap location offset))
+ #+sbcl(%naturalize-utf8-string (sap-ref-sap location offset)))))
(defmethod destroy-function ((type (eql 'string)) &rest args)
(declare (ignore type args))
(defmethod destroy-function ((type (eql 'string)) &rest args)
(declare (ignore type args))
@@
-624,6
+640,7
@@
(defmethod unbound-value ((type (eql 'string)) &rest args)
(declare (ignore type args))
(values t nil))
(declare (ignore type args))
(values t nil))
+
(defmethod alien-type ((type (eql 'pathname)) &rest args)
(declare (ignore type args))
(alien-type 'string))
(defmethod alien-type ((type (eql 'pathname)) &rest args)
(declare (ignore type args))
(alien-type 'string))