| Index: libexif/sources/libexif/olympus/mnote-olympus-entry.c
|
| ===================================================================
|
| --- libexif/sources/libexif/olympus/mnote-olympus-entry.c (revision 143189)
|
| +++ libexif/sources/libexif/olympus/mnote-olympus-entry.c (working copy)
|
| @@ -76,6 +76,9 @@
|
| } \
|
| }
|
|
|
| +#define R2L(n) ((n).denominator ? (long)(n).numerator/(n).denominator : 0L)
|
| +#define R2D(n) ((n).denominator ? (double)(n).numerator/(n).denominator : 0.0)
|
| +
|
| static const struct {
|
| ExifTag tag;
|
| ExifFormat fmt;
|
| @@ -287,6 +290,9 @@
|
| if ((!entry->data) && (entry->components > 0))
|
| return (v);
|
|
|
| + if ((!entry->data) && (entry->size > 0))
|
| + return NULL; /* internal inconsistency error */
|
| +
|
| switch (entry->tag) {
|
|
|
| /* Nikon */
|
| @@ -369,20 +375,20 @@
|
| CF (entry->format, EXIF_FORMAT_RATIONAL, v, maxlen);
|
| CC (entry->components, 4, v, maxlen);
|
| vr = exif_get_rational (entry->data, entry->order);
|
| - r = (double)vr.numerator / vr.denominator;
|
| + r = R2D(vr);
|
| vr = exif_get_rational (entry->data+8, entry->order);
|
| - b = (double)vr.numerator / vr.denominator;
|
| + b = R2D(vr);
|
| snprintf (v, maxlen, _("Red Correction %f, blue Correction %f"), r,b);
|
| break;
|
| case MNOTE_NIKON_TAG_MANUALFOCUSDISTANCE:
|
| CF (entry->format, EXIF_FORMAT_RATIONAL, v, maxlen);
|
| CC (entry->components, 1, v, maxlen);
|
| vr = exif_get_rational (entry->data, entry->order);
|
| - if (vr.numerator) {
|
| - r = (double)vr.numerator / vr.denominator;
|
| + if (!vr.numerator || !vr.denominator) {
|
| + strncpy (v, _("No manual focus selection"), maxlen);
|
| + } else {
|
| + r = R2D(vr);
|
| snprintf (v, maxlen, _("%2.2f meters"), r);
|
| - } else {
|
| - strncpy (v, _("No manual focus selection"), maxlen);
|
| }
|
| break;
|
| case MNOTE_NIKON_TAG_SENSORPIXELSIZE:
|
| @@ -390,8 +396,8 @@
|
| CC (entry->components, 2, v, maxlen);
|
| vr = exif_get_rational (entry->data, entry->order);
|
| vr2 = exif_get_rational (entry->data+8, entry->order);
|
| - r = (double)vr.numerator / vr.denominator;
|
| - b = (double)vr2.numerator / vr2.denominator;
|
| + r = R2D(vr);
|
| + b = R2D(vr2);
|
| snprintf (v, maxlen, "%2.2f x %2.2f um", r, b);
|
| break;
|
| case MNOTE_NIKON_TAG_BRACKETING:
|
| @@ -447,10 +453,10 @@
|
| if (entry->format == EXIF_FORMAT_RATIONAL) {
|
| CC (entry->components, 1, v, maxlen);
|
| vr = exif_get_rational (entry->data, entry->order);
|
| - if (!vr.numerator) {
|
| + if (!vr.numerator || !vr.denominator) {
|
| strncpy (v, _("None"), maxlen);
|
| } else {
|
| - r = (double)vr.numerator / vr.denominator;
|
| + r = R2D(vr);
|
| snprintf (v, maxlen, "%2.2f", r);
|
| }
|
| break;
|
| @@ -565,13 +571,13 @@
|
| double c,d;
|
| unsigned long a,b;
|
| vr = exif_get_rational (entry->data, entry->order);
|
| - a = vr.numerator / vr.denominator;
|
| + a = R2L(vr);
|
| vr = exif_get_rational (entry->data+8, entry->order);
|
| - b = vr.numerator / vr.denominator;
|
| + b = R2L(vr);
|
| vr = exif_get_rational (entry->data+16, entry->order);
|
| - c = (double)vr.numerator / vr.denominator;
|
| + c = R2D(vr);
|
| vr = exif_get_rational (entry->data+24, entry->order);
|
| - d = (double)vr.numerator / vr.denominator;
|
| + d = R2D(vr);
|
| snprintf (v, maxlen, "%ld-%ldmm 1:%3.1f - %3.1f",a,b,c,d);
|
| }
|
| break;
|
| @@ -679,7 +685,7 @@
|
| CF (entry->format, EXIF_FORMAT_RATIONAL, v, maxlen);
|
| CC (entry->components, 1, v, maxlen);
|
| vr = exif_get_rational (entry->data, entry->order);
|
| - if (vr.numerator == 0) {
|
| + if (!vr.numerator || !vr.denominator) {
|
| strncpy (v, _("Unknown"), maxlen);
|
| }
|
| else {
|
| @@ -790,7 +796,7 @@
|
| if (!vr.denominator) {
|
| strncpy (v, _("Infinite"), maxlen);
|
| } else {
|
| - r = (double)vr.numerator / vr.denominator;
|
| + r = R2D(vr);
|
| snprintf (v, maxlen, "%2.3f", r);
|
| }
|
| break;
|
| @@ -800,7 +806,7 @@
|
| if (!vsr.denominator) {
|
| strncpy (v, _("Infinite"), maxlen);
|
| } else {
|
| - r = (double)vsr.numerator / vsr.denominator;
|
| + r = R2D(vsr);
|
| snprintf (v, maxlen, "%2.3f", r);
|
| }
|
| break;
|
|
|