exif test pasted by mario-goulart on Sun Jan 3 23:12:40 2016

$ cat exit-test.scm
(use exif extras srfi-1)

(let ((exif-info (tag-alist-from-file (car (command-line-arguments)))))
  (and exif-info
       (pp (remove (lambda (item)
                     (equal? (cdr item) ""))
                   exif-info))))


;;; http://parenteses.org/mario/misc/DSC00018.JPG

$ csi -s exif-test.scm DSC00018.JPG 

Error: segmentation violation

        Call history:

        exif.scm:312: ##sys#peek-c-string         
        exif.scm:319: string-trim-right   
        exif.scm:363: g526        
        exif.scm:317: make-string         
        exif.scm:298: g415        
        exif.scm:49: loop         
        exif.scm:312: ##sys#make-c-string         
        exif.scm:312: ##sys#peek-c-string         
        exif.scm:319: string-trim-right   
        exif.scm:363: g526        
        exif.scm:317: make-string         
        exif.scm:298: g415        
        exif.scm:49: loop         
        exif.scm:312: ##sys#make-c-string         
        exif.scm:312: ##sys#peek-c-string         
        exif.scm:319: string-trim-right         <--

maybe another ref fixes this, also use the correct pointer types added by C-Keen on Wed Jan 6 12:43:31 2016

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)))