From 276c8f34b3070db313908a6d49a1ada16923fc21 Mon Sep 17 00:00:00 2001 From: "Kevin M. Rosenberg" Date: Mon, 9 Dec 2002 16:30:20 +0000 Subject: [PATCH] r3593: *** empty log message *** --- debian/changelog | 6 ++++++ doc/html.tar.gz | Bin 21777 -> 21793 bytes doc/uffi.pdf | Bin 226092 -> 226096 bytes examples/compress.lisp | 40 +++++++++++++++++++++++++++++++++++++++- examples/union.lisp | 4 ++-- tests/compress.lisp | 40 +++++++++++++++++++++++++++++++++++++++- tests/union.lisp | 4 ++-- 7 files changed, 88 insertions(+), 6 deletions(-) diff --git a/debian/changelog b/debian/changelog index b8f46d3..1df933a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +cl-uffi (1.2.1-1) unstable; urgency=low + + * Add uncompression test + + -- Kevin M. Rosenberg Mon, 9 Dec 2002 09:05:52 -0700 + cl-uffi (1.2.0-1) unstable; urgency=low * Fixes in allocate-foreign-object and deref-array for allegro diff --git a/doc/html.tar.gz b/doc/html.tar.gz index 31797e6658310eb228a8c9753b70c643bb5fe771..e45c5143424da11add8c90d9fe449345a97f96b4 100644 GIT binary patch delta 19716 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 delta 19681 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 diff --git a/doc/uffi.pdf b/doc/uffi.pdf index 7caca46df988c17bfc51f5be873efadef3fcb2c9..2c121f7f474b8cc026172e8b6a56c1dcfeb2b3b1 100644 GIT binary patch delta 33248 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 Ucu)6_Xq>^!^zOSg8r977f0O02ga7~l delta 33269 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 J)%`5}{{j6xw66dF diff --git a/examples/compress.lisp b/examples/compress.lisp index e5140ae..1229be5 100644 --- a/examples/compress.lisp +++ b/examples/compress.lisp @@ -7,7 +7,7 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Feb 2002 ;;;; -;;;; $Id: compress.lisp,v 1.2 2002/12/03 06:58:39 kevin Exp $ +;;;; $Id: compress.lisp,v 1.3 2002/12/09 16:30:20 kevin Exp $ ;;;; ;;;; This file, part of UFFI, is Copyright (c) 2002 by Kevin M. Rosenberg ;;;; @@ -63,6 +63,33 @@ (uffi:free-foreign-object destlen) (uffi:free-foreign-object dest))))))) +(uffi:def-function ("uncompress" c-uncompress) + ((dest (* :unsigned-char)) + (destlen (* :long)) + (source :cstring) + (source-len :long)) + :returning :int + :module "zlib") + +(defun uncompress (source) + (let* ((sourcelen (length source)) + (destsize 200000) ;adjust as needed + (dest (uffi:allocate-foreign-string destsize :unsigned t)) + (destlen (uffi:allocate-foreign-object :long))) + (setf (uffi:deref-pointer destlen :long) destsize) + (uffi:with-cstring (source-native source) + (let ((result (c-uncompress dest destlen source-native sourcelen)) + (newdestlen (uffi:deref-pointer destlen :long))) + (unwind-protect + (if (zerop result) + (uffi:convert-from-foreign-string + dest + :length newdestlen + :null-terminated-p nil) + (error "zlib error, code ~D" result)) + (progn + (uffi:free-foreign-object destlen) + (uffi:free-foreign-object dest))))))) #+examples-uffi (progn @@ -76,6 +103,17 @@ (print-results "test") (print-results "test2"))) +#+test-uffi +(progn + (flet ((test-compress (str) + (multiple-value-bind (compressed len) (compress str) + (multiple-value-bind (uncompressed len2) (uncompress compressed) + (util.test:test str uncompressed :test #'string= + :fail-info "Error uncompressing a compressed string"))))) + (test-compress "") + (test-compress "test") + (test-compress "test2"))) + ;; Results of the above on my system: ;; (compress "") => 789c300001,8 ;; (compress "test") => 789c2b492d2e1045d1c1,12 diff --git a/examples/union.lisp b/examples/union.lisp index 5b22be2..2e186d8 100644 --- a/examples/union.lisp +++ b/examples/union.lisp @@ -7,7 +7,7 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Mar 2002 ;;;; -;;;; $Id: union.lisp,v 1.2 2002/12/03 06:58:39 kevin Exp $ +;;;; $Id: union.lisp,v 1.3 2002/12/09 16:30:20 kevin Exp $ ;;;; ;;;; This file, part of UFFI, is Copyright (c) 2002 by Kevin M. Rosenberg ;;;; @@ -29,7 +29,7 @@ (let ((u (uffi:allocate-foreign-object 'tunion1))) (setf (uffi:get-slot-value u 'tunion1 'uint) ;; little endian - #-(or sparc sparc-v9 powerpc ppc little-endian) + #-(or sparc sparc-v9 powerpc ppc big-endian) (+ (* 1 (char-code #\A)) (* 256 (char-code #\B)) (* 65536 (char-code #\C)) diff --git a/tests/compress.lisp b/tests/compress.lisp index e5140ae..1229be5 100644 --- a/tests/compress.lisp +++ b/tests/compress.lisp @@ -7,7 +7,7 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Feb 2002 ;;;; -;;;; $Id: compress.lisp,v 1.2 2002/12/03 06:58:39 kevin Exp $ +;;;; $Id: compress.lisp,v 1.3 2002/12/09 16:30:20 kevin Exp $ ;;;; ;;;; This file, part of UFFI, is Copyright (c) 2002 by Kevin M. Rosenberg ;;;; @@ -63,6 +63,33 @@ (uffi:free-foreign-object destlen) (uffi:free-foreign-object dest))))))) +(uffi:def-function ("uncompress" c-uncompress) + ((dest (* :unsigned-char)) + (destlen (* :long)) + (source :cstring) + (source-len :long)) + :returning :int + :module "zlib") + +(defun uncompress (source) + (let* ((sourcelen (length source)) + (destsize 200000) ;adjust as needed + (dest (uffi:allocate-foreign-string destsize :unsigned t)) + (destlen (uffi:allocate-foreign-object :long))) + (setf (uffi:deref-pointer destlen :long) destsize) + (uffi:with-cstring (source-native source) + (let ((result (c-uncompress dest destlen source-native sourcelen)) + (newdestlen (uffi:deref-pointer destlen :long))) + (unwind-protect + (if (zerop result) + (uffi:convert-from-foreign-string + dest + :length newdestlen + :null-terminated-p nil) + (error "zlib error, code ~D" result)) + (progn + (uffi:free-foreign-object destlen) + (uffi:free-foreign-object dest))))))) #+examples-uffi (progn @@ -76,6 +103,17 @@ (print-results "test") (print-results "test2"))) +#+test-uffi +(progn + (flet ((test-compress (str) + (multiple-value-bind (compressed len) (compress str) + (multiple-value-bind (uncompressed len2) (uncompress compressed) + (util.test:test str uncompressed :test #'string= + :fail-info "Error uncompressing a compressed string"))))) + (test-compress "") + (test-compress "test") + (test-compress "test2"))) + ;; Results of the above on my system: ;; (compress "") => 789c300001,8 ;; (compress "test") => 789c2b492d2e1045d1c1,12 diff --git a/tests/union.lisp b/tests/union.lisp index 5b22be2..2e186d8 100644 --- a/tests/union.lisp +++ b/tests/union.lisp @@ -7,7 +7,7 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Mar 2002 ;;;; -;;;; $Id: union.lisp,v 1.2 2002/12/03 06:58:39 kevin Exp $ +;;;; $Id: union.lisp,v 1.3 2002/12/09 16:30:20 kevin Exp $ ;;;; ;;;; This file, part of UFFI, is Copyright (c) 2002 by Kevin M. Rosenberg ;;;; @@ -29,7 +29,7 @@ (let ((u (uffi:allocate-foreign-object 'tunion1))) (setf (uffi:get-slot-value u 'tunion1 'uint) ;; little endian - #-(or sparc sparc-v9 powerpc ppc little-endian) + #-(or sparc sparc-v9 powerpc ppc big-endian) (+ (* 1 (char-code #\A)) (* 256 (char-code #\B)) (* 65536 (char-code #\C)) -- 2.34.1