From 8197bf4a655197c49c0f57ace91d87c4be810e6a Mon Sep 17 00:00:00 2001 From: Dan Fandrich Date: Fri, 12 Jul 2019 18:01:47 +0200 Subject: [PATCH] Stopped printing some values as int in exif_entry_get_value By leaving them as double, it avoids undefined behaviour when the values are out of the range of an int. This also has the side effect of rounding some values to the nearest integer, improving display accuracy. Patch from Google. --- libexif/exif-entry.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/libexif/exif-entry.c b/libexif/exif-entry.c index c2980ea..34159c1 100644 --- a/libexif/exif-entry.c +++ b/libexif/exif-entry.c @@ -1053,9 +1053,9 @@ exif_entry_get_value (ExifEntry *e, char *val, unsigned int maxlen) } } if (d) - snprintf (b, sizeof (b), _(" (35 equivalent: %d mm)"), - (int) (d * (double) v_rat.numerator / - (double) v_rat.denominator)); + snprintf (b, sizeof (b), _(" (35 equivalent: %.0f mm)"), + (d * (double) v_rat.numerator / + (double) v_rat.denominator)); else b[0] = 0; @@ -1084,9 +1084,9 @@ exif_entry_get_value (ExifEntry *e, char *val, unsigned int maxlen) } d = (double) v_rat.numerator / (double) v_rat.denominator; if (d < 1) - snprintf (val, maxlen, _("1/%i"), (int) (0.5 + 1. / d)); + snprintf (val, maxlen, _("1/%.0f"), 1. / d); else - snprintf (val, maxlen, "%i", (int) d); + snprintf (val, maxlen, "%.0f", d); strncat (val, _(" sec."), maxlen-1 - strlen (val)); break; case EXIF_TAG_SHUTTER_SPEED_VALUE: @@ -1101,9 +1101,9 @@ exif_entry_get_value (ExifEntry *e, char *val, unsigned int maxlen) snprintf (val, maxlen, _("%.02f EV"), d); d = 1. / pow (2, d); if (d < 1) - snprintf (b, sizeof (b), _(" (1/%d sec.)"), (int) (1. / d)); + snprintf (b, sizeof (b), _(" (1/%.0f sec.)"), 1. / d); else - snprintf (b, sizeof (b), _(" (%d sec.)"), (int) d); + snprintf (b, sizeof (b), _(" (%.0f sec.)"), d); strncat (val, b, maxlen-1 - strlen (val)); break; case EXIF_TAG_BRIGHTNESS_VALUE: -- 2.7.4