;;;;
;;;; Copyright (c) 2002 Kevin M. Rosenberg
;;;;
-;;;; $Id: compress.cl,v 1.1 2002/03/09 19:55:33 kevin Exp $
+;;;; $Id: compress.cl,v 1.6 2002/03/10 20:01:55 kevin Exp $
;;;;
;;;; This file is part of UFFI.
;;;;
(in-package :cl-user)
-(unless (uffi:load-foreign-library "/usr/lib/libz.so" "zlib" '("c"))
+(unless (uffi:load-foreign-library "/usr/lib/libz.so"
+ :module "zlib"
+ :supporting-libraries '("c"))
(warn "Unable to load zlib"))
-(uffi:def-routine ("compress" c-compress)
+(uffi:def-function ("compress" c-compress)
((dest (* :unsigned-char))
(destlen (* :long))
- (source :c-string)
+ (source :cstring)
(source-len :long))
:returning :int
:module "zlib")
and the numbe of compressed bytes"
(let* ((sourcelen (length source))
(destsize (+ 12 (ceiling (* sourcelen 1.01))))
- (dest (uffi:allocate-foreign-string destsize))
+ (dest (uffi:allocate-foreign-string destsize :unsigned t))
(destlen (uffi:allocate-foreign-object :long)))
(setf (uffi:deref-pointer destlen :long) destsize)
- (uffi:with-c-string (source-native source)
+ (uffi:with-cstring (source-native source)
(let ((result (c-compress dest destlen source-native sourcelen))
(newdestlen (uffi:deref-pointer destlen :long)))
(unwind-protect
(uffi:free-foreign-object dest)))))))
+#+test-uffi
+(progn
+ (flet ((print-results (str)
+ (multiple-value-bind (compressed len) (compress str)
+ (format t "~&(compress ~S) => ~S,~D" str compressed len))))
+ (print-results "")
+ (print-results "test")
+ (print-results "test2")))