]> gitweb.factorcode.org Git - factor.git/blobdiff - basis/checksums/openssl/openssl.factor
Updating code to use with-out-parameters
[factor.git] / basis / checksums / openssl / openssl.factor
index 58748b7c297b6f5bc1ee9d28ee784b45b9a7d7c1..1fec109d5f105219ee545c69de34f75cb2e38e2d 100644 (file)
@@ -1,8 +1,8 @@
-! Copyright (C) 2008 Slava Pestov
+! Copyright (C) 2008, 2010 Slava Pestov
 ! See http://factorcode.org/license.txt for BSD license.
-USING: accessors byte-arrays alien.c-types kernel continuations
-destructors sequences io openssl openssl.libcrypto checksums
-checksums.stream ;
+USING: accessors byte-arrays alien.c-types alien.data kernel
+continuations destructors sequences io openssl openssl.libcrypto
+checksums checksums.stream classes.struct ;
 IN: checksums.openssl
 
 ERROR: unknown-digest name ;
@@ -19,14 +19,14 @@ C: <openssl-checksum> openssl-checksum
 
 <PRIVATE
 
-TUPLE: evp-md-context handle ;
+TUPLE: evp-md-context < disposable handle ;
 
 : <evp-md-context> ( -- ctx )
-    "EVP_MD_CTX" <c-object>
-    dup EVP_MD_CTX_init evp-md-context boa ;
+    evp-md-context new-disposable
+    EVP_MD_CTX_create >>handle ;
 
-M: evp-md-context dispose
-    handle>> EVP_MD_CTX_cleanup drop ;
+M: evp-md-context dispose*
+    handle>> EVP_MD_CTX_destroy ;
 
 : with-evp-md-context ( quot -- )
     maybe-init-ssl [ <evp-md-context> ] dip with-disposal ; inline
@@ -47,9 +47,10 @@ M: evp-md-context dispose
 
 : digest-value ( ctx -- value )
     handle>>
-    EVP_MAX_MD_SIZE <byte-array> 0 <int>
-    [ EVP_DigestFinal_ex ssl-error ] 2keep
-    *int memory>byte-array ;
+    { { int EVP_MAX_MD_SIZE } int }
+    [ EVP_DigestFinal_ex ssl-error ]
+    [ memory>byte-array ]
+    with-out-parameters ;
 
 PRIVATE>