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