- (let ((dsn (allocate-foreign-string (1+ $SQL_MAX_DSN_LENGTH)))
- (desc (allocate-foreign-string 256))
- (results nil))
- (unwind-protect
- (with-foreign-objects ((dsn-len :short)
- (desc-len :short))
- (let ((res (with-error-handling (:henv henv)
- (SQLDataSources henv $SQL_FETCH_FIRST dsn
- (1+ $SQL_MAX_DSN_LENGTH)
- dsn-len desc 256 desc-len))))
- (when (or (eql res $SQL_SUCCESS)
- (eql res $SQL_SUCCESS_WITH_INFO))
- (push (convert-from-foreign-string dsn) results))
-
- (do ((res (with-error-handling (:henv henv)
- (SQLDataSources henv $SQL_FETCH_NEXT dsn
- (1+ $SQL_MAX_DSN_LENGTH)
- dsn-len desc 256 desc-len))
- (with-error-handling (:henv henv)
- (SQLDataSources henv $SQL_FETCH_NEXT dsn
- (1+ $SQL_MAX_DSN_LENGTH)
- dsn-len desc 256 desc-len))))
- ((not (or (eql res $SQL_SUCCESS)
- (eql res $SQL_SUCCESS_WITH_INFO))))
- (push (convert-from-foreign-string dsn) results))))
- (progn
- (free-foreign-object dsn)
- (free-foreign-object desc)))
+ (let ((results nil))
+ (with-foreign-strings ((dsn-ptr (1+ $SQL_MAX_DSN_LENGTH))
+ (desc-ptr 256))
+ (with-foreign-objects ((dsn-len :short)
+ (desc-len :short))
+ (let ((res (with-error-handling (:henv henv)
+ (SQLDataSources henv $SQL_FETCH_FIRST dsn-ptr
+ (1+ $SQL_MAX_DSN_LENGTH)
+ dsn-len desc-ptr 256 desc-len))))
+ (when (or (eql res $SQL_SUCCESS)
+ (eql res $SQL_SUCCESS_WITH_INFO))
+ (push (convert-from-foreign-string dsn-ptr) results))
+
+ (do ((res (with-error-handling (:henv henv)
+ (SQLDataSources henv $SQL_FETCH_NEXT dsn-ptr
+ (1+ $SQL_MAX_DSN_LENGTH)
+ dsn-len desc-ptr 256 desc-len))
+ (with-error-handling (:henv henv)
+ (SQLDataSources henv $SQL_FETCH_NEXT dsn-ptr
+ (1+ $SQL_MAX_DSN_LENGTH)
+ dsn-len desc-ptr 256 desc-len))))
+ ((not (or (eql res $SQL_SUCCESS)
+ (eql res $SQL_SUCCESS_WITH_INFO))))
+ (push (convert-from-foreign-string dsn-ptr) results)))))