From: Dan Fandrich Date: Fri, 12 Jul 2019 16:01:47 +0000 (+0200) Subject: Stopped printing some values as int in exif_entry_get_value X-Git-Tag: libexif-0_6_22-release~40 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fupstream%2Flibexif.git;a=commitdiff_plain;h=8197bf4a655197c49c0f57ace91d87c4be810e6a 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. --- 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: