Support signed types in some generic MakerNote formatters.
authorDan Fandrich <dan@coneharvesters.com>
Tue, 14 Aug 2018 16:18:47 +0000 (18:18 +0200)
committerDan Fandrich <dan@coneharvesters.com>
Fri, 17 Aug 2018 05:34:28 +0000 (07:34 +0200)
The unsigned types are now also formatted correctly as unsigned in a
number of them.

libexif/fuji/mnote-fuji-entry.c
libexif/olympus/mnote-olympus-entry.c
libexif/pentax/mnote-pentax-entry.c
test/testdata/olympus_makernote_variant_2.jpg.parsed
test/testdata/pentax_makernote_variant_2.jpg.parsed
test/testdata/pentax_makernote_variant_3.jpg.parsed
test/testdata/pentax_makernote_variant_4.jpg.parsed

index 0dbea49..add7086 100644 (file)
@@ -193,6 +193,7 @@ mnote_fuji_entry_get_value (MnoteFujiEntry *entry,
        ExifLong  vl;
        ExifSLong vsl;
        ExifShort vs, vs2;
+       ExifSShort vss;
        ExifRational vr;
        ExifSRational vsr;
        int i, j;
@@ -271,7 +272,11 @@ mnote_fuji_entry_get_value (MnoteFujiEntry *entry,
                  break;
                case EXIF_FORMAT_SHORT:
                  vs = exif_get_short (entry->data, entry->order);
-                 snprintf (val, maxlen, "%i", vs);
+                 snprintf (val, maxlen, "%hu", vs);
+                 break;
+               case EXIF_FORMAT_SSHORT:
+                 vss = exif_get_sshort (entry->data, entry->order);
+                 snprintf (val, maxlen, "%hi", vss);
                  break;
                case EXIF_FORMAT_LONG:
                  vl = exif_get_long (entry->data, entry->order);
index dd6b7cf..07d0087 100644 (file)
@@ -274,6 +274,7 @@ mnote_olympus_entry_get_value (MnoteOlympusEntry *entry, char *v, unsigned int m
 {
        char         buf[30];
        ExifLong     vl;
+       ExifSLong    vsl;
        ExifShort    vs = 0;
        ExifSShort   vss = 0;
        ExifRational vr, vr2;
@@ -785,10 +786,20 @@ mnote_olympus_entry_get_value (MnoteOlympusEntry *entry, char *v, unsigned int m
                        vs = exif_get_short (entry->data, entry->order);
                        snprintf (v, maxlen, "%hu", vs);
                        break;
+               case EXIF_FORMAT_SSHORT:
+                       CC (entry->components, 1, v, maxlen);
+                       vss = exif_get_sshort (entry->data, entry->order);
+                       snprintf (v, maxlen, "%hi", vss);
+                       break;
                case EXIF_FORMAT_LONG:
                        CC (entry->components, 1, v, maxlen);
                        vl = exif_get_long (entry->data, entry->order);
-                       snprintf (v, maxlen, "%li", (long int) vl);
+                       snprintf (v, maxlen, "%lu", (long unsigned) vl);
+                       break;
+               case EXIF_FORMAT_SLONG:
+                       CC (entry->components, 1, v, maxlen);
+                       vsl = exif_get_slong (entry->data, entry->order);
+                       snprintf (v, maxlen, "%li", (long int) vsl);
                        break;
                case EXIF_FORMAT_RATIONAL:
                        CC (entry->components, 1, v, maxlen);
index ea0429a..f8fdf7f 100644 (file)
@@ -309,7 +309,9 @@ mnote_pentax_entry_get_value (MnotePentaxEntry *entry,
                              char *val, unsigned int maxlen)
 {
        ExifLong vl;
+       ExifSLong vsl;
        ExifShort vs, vs2;
+       ExifSShort vss;
        int i = 0, j = 0;
 
        if (!entry) return (NULL);
@@ -347,7 +349,7 @@ mnote_pentax_entry_get_value (MnotePentaxEntry *entry,
                        for (i = 0; (items[i].tag && items[i].tag != entry->tag); i++);
                        if (!items[i].tag) {
                                snprintf (val, maxlen,
-                                         _("Internal error (unknown value %i)"), vs);
+                                         _("Internal error (unknown value %hu)"), vs);
                                break;
                        }
 
@@ -356,7 +358,7 @@ mnote_pentax_entry_get_value (MnotePentaxEntry *entry,
                            (items[i].elem[j].index < vs); j++);
                        if (items[i].elem[j].index != vs) {
                                snprintf (val, maxlen,
-                                         _("Internal error (unknown value %i)"), vs);
+                                         _("Internal error (unknown value %hu)"), vs);
                                break;
                        }
                        strncpy (val, _(items[i].elem[j].string), maxlen);
@@ -371,7 +373,7 @@ mnote_pentax_entry_get_value (MnotePentaxEntry *entry,
                        for (i = 0; (items2[i].tag && items2[i].tag != entry->tag); i++);
                        if (!items2[i].tag) {
                                snprintf (val, maxlen,
-                                         _("Internal error (unknown value %i %i)"), vs, vs2);
+                                         _("Internal error (unknown value %hu %hu)"), vs, vs2);
                                break;
                        }
 
@@ -380,7 +382,7 @@ mnote_pentax_entry_get_value (MnotePentaxEntry *entry,
                                || ((items2[i].elem[j].index2 == vs2) && (items2[i].elem[j].index1 < vs))); j++);
                        if ((items2[i].elem[j].index1 != vs) || (items2[i].elem[j].index2 != vs2)) {
                                snprintf (val, maxlen,
-                                         _("Internal error (unknown value %i %i)"), vs, vs2);
+                                         _("Internal error (unknown value %hi %hi)"), vs, vs2);
                                break;
                        }
                        strncpy (val, _(items2[i].elem[j].string), maxlen);
@@ -391,7 +393,7 @@ mnote_pentax_entry_get_value (MnotePentaxEntry *entry,
                CF (entry->format, EXIF_FORMAT_LONG, val, maxlen);
                CC (entry->components, 1, val, maxlen);
                vl = exif_get_long (entry->data, entry->order);
-               snprintf (val, maxlen, "%li", (long int) vl);
+               snprintf (val, maxlen, "%lu", (long unsigned) vl);
                break;
        case MNOTE_PENTAX_TAG_PRINTIM:
                CF (entry->format, EXIF_FORMAT_UNDEFINED, val, maxlen);
@@ -410,7 +412,7 @@ mnote_pentax_entry_get_value (MnotePentaxEntry *entry,
                CC (entry->components, 4, val, maxlen);
                /* Note: format is UNDEFINED, not SHORT -> order is fixed: MOTOROLA */
                vs = exif_get_short (entry->data, EXIF_BYTE_ORDER_MOTOROLA);
-               snprintf (val, maxlen, "%i:%02i:%02i", vs, entry->data[2], entry->data[3]);
+               snprintf (val, maxlen, "%hi:%02i:%02i", vs, entry->data[2], entry->data[3]);
                break;
        case MNOTE_PENTAX2_TAG_TIME:
                CF (entry->format, EXIF_FORMAT_UNDEFINED, val, maxlen);
@@ -425,14 +427,31 @@ mnote_pentax_entry_get_value (MnotePentaxEntry *entry,
                case EXIF_FORMAT_SHORT:
                  {
                        const unsigned char *data = entry->data;
-                       size_t k, len = strlen(val), sizeleft;
+                       size_t k, len = strlen(val), sizeleft;
 
                        sizeleft = entry->size;
-                       for(k=0; k<entry->components; k++) {
+                       for(k=0; k<entry->components; k++) {
                                if (sizeleft < 2)
                                        break;
                                vs = exif_get_short (data, entry->order);
-                               snprintf (val+len, maxlen-len, "%i ", vs);
+                               snprintf (val+len, maxlen-len, "%hu ", vs);
+                               len = strlen(val);
+                               data += 2;
+                               sizeleft -= 2;
+                       }
+                 }
+                 break;
+               case EXIF_FORMAT_SSHORT:
+                 {
+                       const unsigned char *data = entry->data;
+                       size_t k, len = strlen(val), sizeleft;
+
+                       sizeleft = entry->size;
+                       for(k=0; k<entry->components; k++) {
+                               if (sizeleft < 2)
+                                       break;
+                               vss = exif_get_sshort (data, entry->order);
+                               snprintf (val+len, maxlen-len, "%hi ", vss);
                                len = strlen(val);
                                data += 2;
                                sizeleft -= 2;
@@ -442,14 +461,31 @@ mnote_pentax_entry_get_value (MnotePentaxEntry *entry,
                case EXIF_FORMAT_LONG:
                  {
                        const unsigned char *data = entry->data;
-                       size_t k, len = strlen(val), sizeleft;
+                       size_t k, len = strlen(val), sizeleft;
 
                        sizeleft = entry->size;
-                       for(k=0; k<entry->components; k++) {
+                       for(k=0; k<entry->components; k++) {
                                if (sizeleft < 4)
                                        break;
                                vl = exif_get_long (data, entry->order);
-                               snprintf (val+len, maxlen-len, "%li", (long int) vl);
+                               snprintf (val+len, maxlen-len, "%lu ", (long unsigned) vl);
+                               len = strlen(val);
+                               data += 4;
+                               sizeleft -= 4;
+                       }
+                 }
+                 break;
+               case EXIF_FORMAT_SLONG:
+                 {
+                       const unsigned char *data = entry->data;
+                       size_t k, len = strlen(val), sizeleft;
+
+                       sizeleft = entry->size;
+                       for(k=0; k<entry->components; k++) {
+                               if (sizeleft < 4)
+                                       break;
+                               vsl = exif_get_slong (data, entry->order);
+                               snprintf (val+len, maxlen-len, "%li ", (long int) vsl);
                                len = strlen(val);
                                data += 4;
                                sizeleft -= 4;
index c9114cd..3efdcc7 100644 (file)
@@ -220,7 +220,7 @@ File olympus_makernote_variant_2.jpg
     Entry 31: 158, (unknown)
       Size: 46
     Entry 32: 159, (unknown)
-      Size: 26
+      Size: 1
     Entry 33: 172, (unknown)
       Size: 11
     Entry 34: 178, (unknown)
index 168ac61..5282b93 100644 (file)
@@ -137,9 +137,9 @@ File pentax_makernote_variant_2.jpg
     Entry 0: 16386, Preview Size
       Size: 8
     Entry 1: 16387, Preview Length
-      Size: 1
+      Size: 2
     Entry 2: 16388, Preview Start
-      Size: 4
+      Size: 5
     Entry 3: 24576, Preview Start
       Size: 20
     Entry 4: 24577, (unknown)
@@ -157,7 +157,7 @@ File pentax_makernote_variant_2.jpg
     Entry 10: 24609, (unknown)
       Size: 24
     Entry 11: 24610, Object Distance
-      Size: 4
+      Size: 5
     Entry 12: 24611, (unknown)
       Size: 2
     Entry 13: 24625, (unknown)
index 533d6d2..d0a6d95 100644 (file)
@@ -142,11 +142,11 @@ File pentax_makernote_variant_3.jpg
     Entry 1: 16386, Preview Size
       Size: 8
     Entry 2: 16387, Preview Length
-      Size: 1
+      Size: 2
     Entry 3: 16388, Preview Start
-      Size: 4
-    Entry 4: 16389, Model Identification
       Size: 5
+    Entry 4: 16389, Model Identification
+      Size: 6
     Entry 5: 16390, Date
       Size: 10
     Entry 6: 16391, Time
@@ -168,7 +168,7 @@ File pentax_makernote_variant_3.jpg
     Entry 14: 16400, Focus Position
       Size: 5
     Entry 15: 16402, Exposure Time
-      Size: 6
+      Size: 7
     Entry 16: 16403, F-Number
       Size: 3
     Entry 17: 16404, ISO Number
@@ -188,7 +188,7 @@ File pentax_makernote_variant_3.jpg
     Entry 24: 16412, Red Balance
       Size: 2
     Entry 25: 16413, Focal Length
-      Size: 2
+      Size: 3
     Entry 26: 16414, Digital Zoom
       Size: 4
     Entry 27: 16415, Saturation
@@ -210,7 +210,7 @@ File pentax_makernote_variant_3.jpg
     Entry 35: 16423, (unknown)
       Size: 20
     Entry 36: 16425, Frame Number
-      Size: 1
+      Size: 2
     Entry 37: 16434, Image Processing
       Size: 20
     Entry 38: 16449, (unknown)
index 4ed86dc..2ea197c 100644 (file)
@@ -149,11 +149,11 @@ File pentax_makernote_variant_4.jpg
     Entry 0: 16386, Preview Size
       Size: 8
     Entry 1: 16387, Preview Length
-      Size: 1
+      Size: 2
     Entry 2: 16388, Preview Start
-      Size: 4
+      Size: 5
     Entry 3: 16389, Model Identification
-      Size: 4
+      Size: 5
     Entry 4: 24576, Preview Start
       Size: 20
     Entry 5: 24577, (unknown)
@@ -179,7 +179,7 @@ File pentax_makernote_variant_4.jpg
     Entry 15: 24609, (unknown)
       Size: 24
     Entry 16: 24610, Object Distance
-      Size: 4
+      Size: 5
     Entry 17: 24611, (unknown)
       Size: 2
     Entry 18: 24625, (unknown)
@@ -193,11 +193,11 @@ File pentax_makernote_variant_4.jpg
     Entry 22: 24629, (unknown)
       Size: 4
     Entry 23: 24630, (unknown)
-      Size: 9
+      Size: 10
     Entry 24: 24631, (unknown)
-      Size: 9
+      Size: 10
     Entry 25: 24632, (unknown)
-      Size: 1
+      Size: 2
     Entry 26: 24633, (unknown)
       Size: 2
     Entry 27: 24634, (unknown)
@@ -207,9 +207,9 @@ File pentax_makernote_variant_4.jpg
     Entry 29: 24636, (unknown)
       Size: 2
     Entry 30: 24637, (unknown)
-      Size: 5
+      Size: 6
     Entry 31: 24638, (unknown)
-      Size: 5
+      Size: 6
     Entry 32: 24641, (unknown)
       Size: 5
     Entry 33: 24642, (unknown)
@@ -223,7 +223,7 @@ File pentax_makernote_variant_4.jpg
     Entry 37: 24646, (unknown)
       Size: 5
     Entry 38: 24647, (unknown)
-      Size: 6
+      Size: 7
     Entry 39: 24648, (unknown)
       Size: 4
     Entry 40: 24649, (unknown)
@@ -233,13 +233,13 @@ File pentax_makernote_variant_4.jpg
     Entry 42: 24651, (unknown)
       Size: 21
     Entry 43: 24657, (unknown)
-      Size: 1
+      Size: 2
     Entry 44: 24658, (unknown)
-      Size: 8
+      Size: 9
     Entry 45: 24659, (unknown)
-      Size: 1
+      Size: 2
     Entry 46: 24660, (unknown)
-      Size: 10
+      Size: 11
     Entry 47: 24661, (unknown)
       Size: 2
     Entry 48: 24662, (unknown)
@@ -253,25 +253,25 @@ File pentax_makernote_variant_4.jpg
     Entry 52: 24666, (unknown)
       Size: 23
     Entry 53: 24667, (unknown)
-      Size: 10
+      Size: 11
     Entry 54: 24668, (unknown)
-      Size: 9
+      Size: 10
     Entry 55: 24669, (unknown)
-      Size: 6
+      Size: 7
     Entry 56: 24670, (unknown)
-      Size: 6
+      Size: 7
     Entry 57: 24673, (unknown)
       Size: 2
     Entry 58: 24674, (unknown)
       Size: 2
     Entry 59: 24675, (unknown)
-      Size: 1
+      Size: 2
     Entry 60: 24676, (unknown)
       Size: 22
     Entry 61: 24677, (unknown)
-      Size: 9
+      Size: 10
     Entry 62: 24678, (unknown)
-      Size: 9
+      Size: 10
     Entry 63: 24689, (unknown)
       Size: 2
     Entry 64: 24691, (unknown)
@@ -283,11 +283,11 @@ File pentax_makernote_variant_4.jpg
     Entry 67: 24695, (unknown)
       Size: 20
     Entry 68: 24697, (unknown)
-      Size: 1
+      Size: 2
     Entry 69: 24698, (unknown)
-      Size: 1
+      Size: 2
     Entry 70: 24699, (unknown)
-      Size: 1
+      Size: 2
     Entry 71: 24700, (unknown)
       Size: 5
     Entry 72: 24701, (unknown)
@@ -297,7 +297,7 @@ File pentax_makernote_variant_4.jpg
     Entry 74: 24703, (unknown)
       Size: 2
     Entry 75: 24705, (unknown)
-      Size: 1
+      Size: 2
     Entry 76: 24706, (unknown)
       Size: 5
     Entry 77: 24707, (unknown)
@@ -329,7 +329,7 @@ File pentax_makernote_variant_4.jpg
     Entry 90: 24722, (unknown)
       Size: 20
     Entry 91: 24723, (unknown)
-      Size: 5
+      Size: 6
     Entry 92: 24724, (unknown)
       Size: 21
     Entry 93: 24725, (unknown)
@@ -351,17 +351,17 @@ File pentax_makernote_variant_4.jpg
     Entry 101: 24739, (unknown)
       Size: 2
     Entry 102: 24740, (unknown)
-      Size: 20
+      Size: 2
     Entry 103: 24741, (unknown)
-      Size: 20
+      Size: 2
     Entry 104: 24753, (unknown)
-      Size: 1
+      Size: 2
     Entry 105: 24754, (unknown)
-      Size: 1
+      Size: 2
     Entry 106: 24755, (unknown)
-      Size: 1
+      Size: 2
     Entry 107: 24756, (unknown)
-      Size: 1
+      Size: 2
     Entry 108: 24757, (unknown)
       Size: 4
     Entry 109: 24768, (unknown)
@@ -453,9 +453,9 @@ File pentax_makernote_variant_4.jpg
     Entry 152: 28720, (unknown)
       Size: 2
     Entry 153: 28929, (unknown)
-      Size: 1
+      Size: 2
     Entry 154: 28930, (unknown)
-      Size: 1
+      Size: 2
     Entry 155: 28931, (unknown)
       Size: 2
     Entry 156: 28933, (unknown)