/* #define DEBUG */
+#undef MIN
+#define MIN(a, b) (((a) < (b)) ? (a) : (b))
+
#define CF(format,target,v) \
{ \
if (format != target) { \
break; \
} \
}
+#define CC2(number,t1,t2,v) \
+{ \
+ if ((number != t1) && (number != t2)) { \
+ snprintf (v, sizeof (v), \
+ _("Invalid number of components (%i, " \
+ "expected %i or %i)."), (int) number, \
+ (int) t1, (int) t2); \
+ break; \
+ } \
+}
char *
mnote_canon_entry_get_value (const MnoteCanonEntry *entry)
case MNOTE_CANON_TAG_OWNER:
CF (entry->format, EXIF_FORMAT_ASCII, v);
CC (entry->components, 32, v);
- strncpy (v,data,sizeof (v));
+ strncpy (v,data,MIN (entry->size, sizeof (v) - 1));
break;
case MNOTE_CANON_TAG_FIRMWARE:
CF (entry->format, EXIF_FORMAT_ASCII, v);
- CC (entry->components, 24, v);
- strncpy (v,data,sizeof (v));
+ CC2 (entry->components, 24, 32, v);
+ strncpy (v,data,MIN (entry->size, sizeof (v) - 1));
break;
case MNOTE_CANON_TAG_IMAGE_NUMBER:
printf ("Value%d=%d\n", i, vs);
}
else if (entry->format == EXIF_FORMAT_ASCII)
- strncpy (v, data, sizeof (v));
+ strncpy (v,data,MIN (entry->size, sizeof (v) - 1));
#endif
break;
}
ExifByteOrder o;
double d;
ExifEntry *entry;
+ static struct {
+ char *label;
+ char major, minor;
+ } versions[] = {
+ {"0110", 1, 1},
+ {"0120", 1, 2},
+ {"0200", 2, 0},
+ {"0210", 2, 1},
+ {"0220", 2, 2},
+ {"0221", 2, 21},
+ {NULL , 0, 0}
+ };
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
bindtextdomain (GETTEXT_PACKAGE, LIBEXIF_LOCALEDIR);
case EXIF_TAG_USER_COMMENT:
CF (e->format, EXIF_FORMAT_UNDEFINED, v);
if (e->size < 8) break;
- strncpy (v, e->data + 8, MIN (e->size, sizeof (v) - 1));
+ strncpy (v, e->data + 8, MIN (e->size - 8, sizeof (v) - 1));
break;
case EXIF_TAG_EXIF_VERSION:
CF (e->format, EXIF_FORMAT_UNDEFINED, v);
CC (e->components, 4, v);
- if (!memcmp (e->data, "0110", 4))
- strncpy (v, "Exif Version 1.1", sizeof (v) - 1);
- else if (!memcmp (e->data, "0200", 4))
- strncpy (v, "Exif Version 2.0", sizeof (v) - 1);
- else if (!memcmp (e->data, "0210", 4))
- strncpy (v, "Exif Version 2.1", sizeof (v) - 1);
- else if (!memcmp (e->data, "0220", 4))
- strncpy (v, "Exif Version 2.2", sizeof (v) - 1);
- else strncpy (v, _("Unknown Exif Version"), sizeof (v) - 1);
+ strncpy (v, _("Unknown Exif Version"), sizeof (v) - 1);
+ for (i = 0; versions[i].label; i++) {
+ if (!memcmp (e->data, versions[i].label, 4)) {
+ snprintf (v, sizeof (v) - 1,
+ _("Exif Version %d.%d"),
+ versions[i].major,
+ versions[i].minor);
+ break;
+ }
+ }
break;
case EXIF_TAG_FLASH_PIX_VERSION:
CF (e->format, EXIF_FORMAT_UNDEFINED, v);
CC (e->components, 4, v);
if (!memcmp (e->data, "0100", 4))
- strncpy (v, "FlashPix Version 1.0", sizeof (v));
+ strncpy (v, _("FlashPix Version 1.0"), sizeof (v));
+ else if (!memcmp (e->data, "0101", 4))
+ strncpy (v, _("FlashPix Version 1.01"), sizeof (v));
else
strncpy (v, _("Unknown FlashPix Version"), sizeof (v));
break;
strncat (v, b, sizeof (v));
}
break;
+ case EXIF_FORMAT_DOUBLE:
+ case EXIF_FORMAT_FLOAT:
+ default:
+ /* What to do here? */
+ break;
}
}