Index: exif.scm =================================================================== --- exif.scm (revision 32280) +++ exif.scm (working copy) @@ -284,13 +284,15 @@ gamma print-image-matching)) - (define-foreign-type exif-data (nonnull-c-pointer "ExifData")) + (define-foreign-type exif-data (c-pointer "ExifData")) (define exif-from-file (foreign-lambda exif-data "exif_data_new_from_file" nonnull-c-string)) (define unref-exif-data (foreign-lambda void "exif_data_unref" exif-data)) + (define ref-exif-data + (foreign-lambda void "exif_data_ref" exif-data)) - (define-foreign-type exif-entry (nonnull-c-pointer "ExifEntry")) + (define-foreign-type exif-entry (c-pointer "ExifEntry")) (define unref-exif-entry (foreign-lambda void "exif_entry_unref" exif-entry)) @@ -311,7 +313,7 @@ (define tag-value (foreign-lambda c-string "exif_entry_get_value" exif-entry c-string unsigned-integer)) - (define (tag-value->string ed t #!optional (default #f)) +(define (tag-value->string ed t) (and-let* ((ed) (size 1024) (s (make-string size)) @@ -360,6 +362,7 @@ (define (tag-alist-from-file f #!optional (tags tags)) (and-let* ((ed (exif-from-file f)) (_ (not (equal? (address->pointer 0) ed))) + (_ (ref-exif-data ed)) (ts (map (lambda (t) (cons t (tag-value->string ed t))) tags)))