2002-07-10 Lutz Müller <lutz@users.sourceforge.net>
authorLutz Mueller <lutz.s.mueller@gmail.com>
Wed, 10 Jul 2002 14:46:38 +0000 (16:46 +0200)
committerLutz Mueller <lutz.s.mueller@gmail.com>
Wed, 10 Jul 2002 14:46:38 +0000 (16:46 +0200)
Bug spotted by Andres <aplaza@smalcamera.com>:

* libexif/exif-data.c: Save the EXIF_TAG_INTEROPERABILITY_IFD_POINTER
  in ifd_exif, not in ifd0.

libexif/exif-data.c

index d3bc614..3da02cb 100644 (file)
@@ -263,25 +263,23 @@ exif_data_save_data_content (ExifData *data, ExifContent *ifd,
 {
        unsigned int i, n_ptr = 0, n_thumb = 0;
 
-       /* If we are to save IFD 0 or 1, we need some extra entries. */
+       /*
+        * Check if we need some extra entries for pointers or the thumbnail.
+        */
        if (ifd == data->ifd0) {
-               if (data->ifd_exif->count)
+               if (data->ifd_exif->count || data->ifd_interoperability->count)
                        n_ptr++;
                if (data->ifd_gps->count)
                        n_ptr++;
        } else if (ifd == data->ifd1) {
+               if (data->size)
+                       n_thumb = 2;
+       } else if (ifd == data->ifd_exif) {
                if (data->ifd_interoperability->count)
                        n_ptr++;
        }
 
        /*
-        * If we are to save IFD 1, we can point to the thumbnail if it
-        * exists.
-        */
-       if ((ifd == data->ifd1) && data->data)
-               n_thumb = 2;
-
-       /*
         * Allocate enough memory for all entries
         * and the number of entries.
         */
@@ -303,7 +301,8 @@ exif_data_save_data_content (ExifData *data, ExifContent *ifd,
        offset += 12 * ifd->count;
 
        /* Save special entries */
-       if (ifd == data->ifd0 && data->ifd_exif->count) {
+       if (ifd == data->ifd0 && (data->ifd_exif->count ||
+                                 data->ifd_interoperability->count)) {
 
                /* EXIF_TAG_EXIF_IFD_POINTER */
                exif_set_short (*d + 6 + offset + 0, data->priv->order,
@@ -333,7 +332,7 @@ exif_data_save_data_content (ExifData *data, ExifContent *ifd,
                offset += 12;
        }
 
-       if (ifd == data->ifd1 && data->ifd_interoperability->count) {
+       if (ifd == data->ifd_exif && data->ifd_interoperability->count) {
 
                /* EXIF_TAG_INTEROPERABILITY_IFD_POINTER */
                exif_set_short (*d + 6 + offset + 0, data->priv->order,
@@ -374,8 +373,8 @@ exif_data_save_data_content (ExifData *data, ExifContent *ifd,
                offset += 12;
        }
 
-       if (ifd == data->ifd0 && (data->ifd1->count ||
-                                 data->ifd_interoperability->count)) {
+       if (ifd == data->ifd0 && data->ifd1->count) {
+
                /*
                 * We are saving IFD 0. Tell where IFD 1 starts and save
                 * IFD 1.