r2261: *** empty log message ***
[clsql.git] / interfaces / postgresql-socket / postgresql-socket-api.cl
index 0be635e1aea8b9b63f387f212b7ad3f601b78860..e30584eac4d5ca08489444cf5b2010c44780d162 100644 (file)
@@ -9,7 +9,7 @@
 ;;;;                
 ;;;; Date Started:  Feb 2002
 ;;;;
-;;;; $Id: postgresql-socket-api.cl,v 1.10 2002/03/27 10:48:12 kevin Exp $
+;;;; $Id: postgresql-socket-api.cl,v 1.14 2002/04/07 15:10:01 kevin Exp $
 ;;;;
 ;;;; This file, part of CLSQL, is Copyright (c) 2002 by Kevin M. Rosenberg
 ;;;; and Copyright (c) 1999-2001 by Pierre R. Mai
@@ -219,24 +219,24 @@ socket interface"
 
 ;;; Support for encrypted password transmission
 
-(defconstant +crypt-library+ "/usr/lib/libcrypt.so"
-  "Name of the shared library to load in order to access the crypt
-function named by `*crypt-function-name*'.")
-
 (defvar *crypt-library-loaded* nil)
 
 (defun crypt-password (password salt)
   "Encrypt a password for transmission to a PostgreSQL server."
   (unless *crypt-library-loaded*
-    (uffi:load-foreign-library +crypt-library+ :supporting-libaries '("c"))
-    (eval (uffi:def-function "crypt" 
-             ((key :cstring)
-              (salt :cstring))
+    (uffi:load-foreign-library 
+     (uffi:find-foreign-library "libcrypt"
+                          '("/usr/lib/" "/usr/local/lib/" "/lib/"))
+     :supporting-libaries '("c"))
+    (eval '(uffi:def-function "crypt" 
+           ((key :cstring)
+            (salt :cstring))
            :returning :cstring))
     (setq *crypt-library-loaded* t))
    (uffi:with-cstring (password-cstring password)
      (uffi:with-cstring (salt-cstring salt)
-       (uffi:convert-from-cstring (crypt password-cstring salt-cstring)))))
+       (uffi:convert-from-cstring 
+       (funcall (fdefinition 'crypt) password-cstring salt-cstring)))))
 ;;; Condition hierarchy
 
 (define-condition postgresql-condition (condition)
@@ -569,7 +569,7 @@ connection, if it is still open."
 (defun read-field (socket type)
   (let ((length (- (read-socket-value 'int32 socket) 4)))
     (case type
-      ((:int :long :longlong)
+      ((:int32 :int64)
        (read-integer-from-socket socket length))
       (:double
        (read-double-from-socket socket length))
@@ -644,27 +644,28 @@ connection, if it is still open."
        (unless before-decimal
         (error "Unexpected value"))))
     
-    (dotimes (i length)
-      (setq char (read-byte socket))
-;;      (format t "~&len:~D, i:~D, char:~D, minusp:~A, decimalp:~A" length i char minusp decimalp)
-      (let ((weight (ascii-digit char)))
-       (cond 
-         ((and weight (not decimalp)) ;; before decimal point
-          (setq before-decimal (+ weight (* 10 before-decimal))))
-         ((and weight decimalp) ;; after decimal point
-          (setq after-decimal (+ weight (* 10 after-decimal)))
-          (incf decimal-count))
-         ((and (= char +char-code-period+))
-          (setq decimalp t))
-         ((or (= char +char-code-lower-e+)           ;; E is for exponent
-              (= char +char-code-upper-e+))
-          (setq exponent (read-integer-from-socket socket (- length i 1)))
-          (setq exponent (or exponent 0))
-          (setq i length))
+    (block loop
+      (dotimes (i length)
+       (setq char (read-byte socket))
+       ;;      (format t "~&len:~D, i:~D, char:~D, minusp:~A, decimalp:~A" length i char minusp decimalp)
+       (let ((weight (ascii-digit char)))
+         (cond 
+          ((and weight (not decimalp)) ;; before decimal point
+           (setq before-decimal (+ weight (* 10 before-decimal))))
+          ((and weight decimalp) ;; after decimal point
+           (setq after-decimal (+ weight (* 10 after-decimal)))
+           (incf decimal-count))
+          ((and (= char +char-code-period+))
+           (setq decimalp t))
+          ((or (= char +char-code-lower-e+)          ;; E is for exponent
+               (= char +char-code-upper-e+))
+           (setq exponent (read-integer-from-socket socket (- length i 1)))
+           (setq exponent (or exponent 0))
+           (return-from loop))
          (t 
           (break "Unexpected value"))
          )
-       ))
+       )))
     (setq result (* (+ (coerce before-decimal 'double-float)
                       (* after-decimal 
                          (expt 10 (- decimal-count))))