From: Jan P. <pa...@us...> - 2004-01-07 14:53:09
|
Update of /cvsroot/libexif/libexif/libexif/canon In directory sc8-pr-cvs1:/tmp/cvs-serv26628 Modified Files: exif-mnote-data-canon.c mnote-canon-entry.c mnote-canon-entry.h Log Message: exif_mnote_data_canon_get_value(), mnote_canon_entry_get_value(): 1) 2 new args value & maxlen 2) no static variables 3) does not duplicate string on return Index: mnote-canon-entry.c =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/canon/mnote-canon-entry.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- mnote-canon-entry.c 9 Dec 2003 19:49:59 -0000 1.4 +++ mnote-canon-entry.c 7 Jan 2004 14:53:04 -0000 1.5 @@ -35,10 +35,10 @@ #undef MIN #define MIN(a, b) (((a) < (b)) ? (a) : (b)) -#define CF(format,target,v) \ +#define CF(format,target,v,maxlen) \ { \ if (format != target) { \ - snprintf (v, sizeof (v), \ + snprintf (v, maxlen, \ _("Invalid format '%s', " \ "expected '%s'."), \ exif_format_get_name (format), \ @@ -47,19 +47,19 @@ } \ } -#define CC(number,target,v) \ +#define CC(number,target,v,maxlen) \ { \ if (number != target) { \ - snprintf (v, sizeof (v), \ + snprintf (v, maxlen, \ _("Invalid number of components (%i, " \ "expected %i)."), (int) number, (int) target); \ break; \ } \ } -#define CC2(number,t1,t2,v) \ +#define CC2(number,t1,t2,v,maxlen) \ { \ if ((number != t1) && (number != t2)) { \ - snprintf (v, sizeof (v), \ + snprintf (v, maxlen, \ _("Invalid number of components (%i, " \ "expected %i or %i)."), (int) number, \ (int) t1, (int) t2); \ @@ -68,366 +68,367 @@ } char * -mnote_canon_entry_get_value (const MnoteCanonEntry *entry) +mnote_canon_entry_get_value (const MnoteCanonEntry *entry, char *val, unsigned int maxlen) { - char v[1024], buf[1024]; - ExifLong vl; - ExifShort vs, n; - int i; - unsigned char *data = entry->data; + char buf[128]; + ExifLong vl; + ExifShort vs, n; + int i; + unsigned char *data = entry->data; - if (!entry) return NULL; + if (!entry) return NULL; + + memset (val, 0, maxlen); + maxlen--; - memset (v, 0, sizeof (v)); switch (entry->tag) { case MNOTE_CANON_TAG_SETTINGS_1: - CF (entry->format, EXIF_FORMAT_SHORT, v); + CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen); n = exif_get_short (data, entry->order) / 2; data += 2; - CC (entry->components, n, v); + CC (entry->components, n, val, maxlen); for (i = 1; i < n; i++) { vs = exif_get_short (data, entry->order); data += 2; switch (i) { case 1: - strncpy (v, _("Macro mode : "), sizeof (v) - 1); + strncpy (val, _("Macro mode : "), maxlen); switch (vs) { case 1: - strncat (v, _("Macro"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Macro"), maxlen - strlen(val)); break; case 2: - strncat (v, _("Normal"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Normal"), maxlen - strlen(val)); break; default: - snprintf (buf, sizeof (buf), "%i???", vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _("%i???"), vs); + strncat (val, buf, maxlen - strlen(val)); } break; case 2: if (vs) { snprintf (buf, sizeof (buf), _(" / Self Timer : %i (ms)"), vs*100); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + strncat (val, buf, maxlen - strlen(val)); } break; case 4: - strncat (v,_(" / Flash mode : "), sizeof (v) - 1 - strlen(v)); + strncat (val, _(" / Flash mode : "), maxlen - strlen(val)); switch (vs) { case 0: - strncat (v, _("Flash not fired"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Flash not fired"), maxlen - strlen(val)); break; case 1: - strncat (v, _("auto"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("auto"), maxlen - strlen(val)); break; case 2: - strncat (v, _("on"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("on"), maxlen - strlen(val)); break; case 3: - strncat (v, _("red eyes reduction"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("red eyes reduction"), maxlen - strlen(val)); break; case 4: - strncat (v, _("slow synchro"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("slow synchro"), maxlen - strlen(val)); break; case 5: - strncat (v, _("auto + red eyes reduction"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("auto + red eyes reduction"), maxlen - strlen(val)); break; case 6: - strncat (v, _("on + red eyes reduction"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("on + red eyes reduction"), maxlen - strlen(val)); break; case 16: - strncat (v, _("external"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("external"), maxlen - strlen(val)); break; default: - snprintf (buf, sizeof (buf), "%i???", vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _("%i???"), vs); + strncat (val, buf, maxlen - strlen(val)); } break; case 5: - strncat (v, _(" / Continuous drive mode : "), sizeof (v) - 1 - strlen(v)); + strncat (val, _(" / Continuous drive mode : "), maxlen - strlen(val)); switch (vs) { case 0: - strncat (v, _("single or timer"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("single or timer"), maxlen - strlen(val)); break; case 1: - strncat (v, _("continuous"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("continuous"), maxlen - strlen(val)); break; default: - snprintf (buf, sizeof (buf), "%i???", vs); - strncat (v, buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _("%i???"), vs); + strncat (val, buf, maxlen - strlen(val)); } break; case 7: - strncat (v, _(" / Focus mode : "), sizeof (v) - 1 - strlen(v)); + strncat (val, _(" / Focus mode : "), maxlen - strlen(val)); switch (vs) { case 0: - strncat (v, _("One-Shot"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("One-Shot"), maxlen - strlen(val)); break; case 1: - strncat (v, _("AI Servo"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("AI Servo"), maxlen - strlen(val)); break; case 2: - strncat (v, _("AI Focus"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("AI Focus"), maxlen - strlen(val)); break; case 3: - strncat (v, _("MF"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("MF"), maxlen - strlen(val)); break; case 4: - strncat (v, _("Single"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Single"), maxlen - strlen(val)); break; case 5: - strncat (v, _("Continuous"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Continuous"), maxlen - strlen(val)); break; case 6: - strncat (v, _("MF"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("MF"), maxlen - strlen(val)); break; default: - snprintf (buf, sizeof (buf), "%i???", vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _("%i???"), vs); + strncat (val, buf, maxlen - strlen(val)); } break; case 10: - strncat (v, _(" / Image size : "), sizeof (v) - 1 - strlen(v)); + strncat (val, _(" / Image size : "), maxlen - strlen(val)); switch (vs) { case 0: - strncat (v, _("Large"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Large"), maxlen - strlen(val)); break; case 1: - strncat (v, _("Medium"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Medium"), maxlen - strlen(val)); break; case 2: - strncat (v, _("Small"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Small"), maxlen - strlen(val)); break; default: - snprintf (buf, sizeof (buf), "%i???", vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _("%i???"), vs); + strncat (val, buf, maxlen - strlen(val)); } break; case 11: - strncat (v, _(" / Easy shooting mode : "), sizeof (v) - 1 - strlen(v)); + strncat (val, _(" / Easy shooting mode : "), maxlen - strlen(val)); switch (vs) { case 0: - strncat (v, _("Full Auto"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Full Auto"), maxlen - strlen(val)); break; case 1: - strncat (v, _("Manual"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Manual"), maxlen - strlen(val)); break; case 2: - strncat (v, _("Landscape"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Landscape"), maxlen - strlen(val)); break; case 3: - strncat (v, _("Fast Shutter"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Fast Shutter"), maxlen - strlen(val)); break; case 4: - strncat (v, _("Slow Shutter"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Slow Shutter"), maxlen - strlen(val)); break; case 5: - strncat (v, _("Night"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Night"), maxlen - strlen(val)); break; case 6: - strncat (v, _("Black & White"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Black & White"), maxlen - strlen(val)); break; case 7: - strncat (v, _("Sepia"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Sepia"), maxlen - strlen(val)); break; case 8: - strncat (v, _("Portrait"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Portrait"), maxlen - strlen(val)); break; case 9: - strncat (v, _("Sports"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Sports"), maxlen - strlen(val)); break; case 10: - strncat (v, _("Macro / Close-Up"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Macro / Close-Up"), maxlen - strlen(val)); break; case 11: - strncat (v, _("Pan Focus"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Pan Focus"), maxlen - strlen(val)); break; default: - snprintf (buf, sizeof (buf), "%i???", vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _("%i???"), vs); + strncat (val, buf, maxlen - strlen(val)); } break; case 13: - strncat (v, _(" / Contrast : "), sizeof (v) - 1 - strlen(v)); + strncat (val, _(" / Contrast : "), maxlen - strlen(val)); switch (vs) { case 0xffff: - strncat (v, _("Low"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Low"), maxlen - strlen(val)); break; case 0x0000: - strncat (v, _("Normal"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Normal"), maxlen - strlen(val)); break; case 0x0001: - strncat (v, _("High"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("High"), maxlen - strlen(val)); break; default: - snprintf (buf, sizeof (buf), "%i???", vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _("%i???"), vs); + strncat (val, buf, maxlen - strlen(val)); } break; case 14: - strncat (v, _(" / Saturation : "), sizeof (v) - 1 - strlen(v)); + strncat (val, _(" / Saturation : "), maxlen - strlen(val)); switch (vs) { case 0xffff: - strncat (v, _("Low"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Low"), maxlen - strlen(val)); break; case 0x0000: - strncat (v, _("Normal"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Normal"), maxlen - strlen(val)); break; case 0x0001: - strncat (v, _("High"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("High"), maxlen - strlen(val)); break; default: - snprintf (buf, sizeof (buf), "%i???", vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _("%i???"), vs); + strncat (val, buf, maxlen - strlen(val)); } break; case 15: - strncat (v, _(" / Sharpness : "), sizeof (v) - 1 - strlen(v)); + strncat (val, _(" / Sharpness : "), maxlen - strlen(val)); switch (vs) { case 0xffff: - strncat (v, _("Low"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Low"), maxlen - strlen(val)); break; case 0x0000: - strncat (v, _("Normal"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Normal"), maxlen - strlen(val)); break; case 0x0001: - strncat (v, _("High"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("High"), maxlen - strlen(val)); break; default: - snprintf (buf, sizeof (buf), "%i???", vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _("%i???"), vs); + strncat (val, buf, maxlen - strlen(val)); } break; case 16: if (vs) { - strncat (v, _(" / ISO : "), sizeof (v) - 1 - strlen(v)); + strncat (val, _(" / ISO : "), maxlen - strlen(val)); switch (vs) { case 15: - strncat (v, _("auto"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("auto"), maxlen - strlen(val)); break; case 16: - strncat (v, _("50"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("50"), maxlen - strlen(val)); break; case 17: - strncat (v, _("100"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("100"), maxlen - strlen(val)); break; case 18: - strncat (v, _("200"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("200"), maxlen - strlen(val)); break; case 19: - strncat (v, _("400"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("400"), maxlen - strlen(val)); break; default: - snprintf (buf, sizeof (buf), "%i???", vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _("%i???"), vs); + strncat (val, buf, maxlen - strlen(val)); } break; } case 17: - strncat (v, _(" / Metering mode : "), sizeof (v) - 1 - strlen(v)); + strncat (val, _(" / Metering mode : "), maxlen - strlen(val)); switch (vs) { case 3: - strncat (v, _("Evaluative"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Evaluative"), maxlen - strlen(val)); break; case 4: - strncat (v, _("Partial"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Partial"), maxlen - strlen(val)); break; case 5: - strncat (v, _("Center-weighted"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Center-weighted"), maxlen - strlen(val)); break; default: - snprintf (buf, sizeof (buf), "%i???", vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _("%i???"), vs); + strncat (val, buf, maxlen - strlen(val)); } break; case 19: - strncat (v, _(" / AF point selected : "), sizeof (v) - 1 - strlen(v)); + strncat (val, _(" / AF point selected : "), maxlen - strlen(val)); switch (vs) { case 0x3000: - strncat (v, _("none (MF)"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("none (MF)"), maxlen - strlen(val)); break; case 0x3001: - strncat (v, _("auto-selected"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("auto-selected"), maxlen - strlen(val)); break; case 0x3002: - strncat (v, _("right"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("right"), maxlen - strlen(val)); break; case 0x3003: - strncat (v, _("center"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("center"), maxlen - strlen(val)); break; case 0x3004: - strncat (v, _("left"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("left"), maxlen - strlen(val)); break; default: - snprintf (buf, sizeof (buf), "0x%x???", vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _("0x%x???"), vs); + strncat (val, buf, maxlen - strlen(val)); } break; case 20: - strncat (v, _(" / Exposure mode : "), sizeof (v) - 1 - strlen(v)); + strncat (val, _(" / Exposure mode : "), maxlen - strlen(val)); switch (vs) { - case 0: - strncat (v, _("Easy shooting"), sizeof (v) - 1 - strlen(v)); - break; - case 1: - strncat (v, _("Program"), sizeof (v) - 1 - strlen(v)); - break; + case 0: + strncat (val, _("Easy shooting"), maxlen - strlen(val)); + break; + case 1: + strncat (val, _("Program"), maxlen - strlen(val)); + break; case 2: - strncat (v, _("Tv-priority"), sizeof (v) - 1 - strlen(v)); - break; + strncat (val, _("Tv-priority"), maxlen - strlen(val)); + break; case 3: - strncat (v, _("Av-priority"), sizeof (v) - 1 - strlen(v)); - break; + strncat (val, _("Av-priority"), maxlen - strlen(val)); + break; case 4: - strncat (v, _("Manual"), sizeof (v) - 1 - strlen(v)); - break; + strncat (val, _("Manual"), maxlen - strlen(val)); + break; case 5: - strncat (v, _("A-DEP"), sizeof (v) - 1 - strlen(v)); - break; + strncat (val, _("A-DEP"), maxlen - strlen(val)); + break; default: - snprintf (buf, sizeof (buf), "%i???", vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); - } + snprintf (buf, sizeof (buf), _("%i???"), vs); + strncat (val, buf, maxlen - strlen(val)); + } break; case 23: - snprintf (buf, sizeof (buf), " / %s : %u", _("long focal length of lens (in focal units)"), vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _(" / long focal length of lens (in focal units) : %u"), vs); + strncat (val, buf, maxlen - strlen(val)); break; case 24: - snprintf (buf, sizeof (buf), " / %s : %u", _("short focal length of lens (in focal units)"), vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _(" / short focal length of lens (in focal units) : %u"), vs); + strncat (val, buf, maxlen - strlen(val)); break; case 25: - snprintf (buf, sizeof (buf), " / %s : %u", _("focal units per mm"), vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _(" / focal units per mm : %u"), vs); + strncat (val, buf, maxlen - strlen(val)); break; case 29: - strncat (v, _(" / Flash details : "), sizeof (v) - 1 - strlen(v)); + strncat (val, _(" / Flash details : "), maxlen - strlen(val)); if ((vs>>14)&1) - strncat (v, _("External E-TTL"), sizeof (v) - 1 - strlen(v)); - if ((vs>>13)&1) - strncat (v, _("Internal flash"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("External E-TTL"), maxlen - strlen(val)); + if ((vs>>13)&1) + strncat (val, _("Internal flash"), maxlen - strlen(val)); if ((vs>>11)&1) - strncat (v, _("FP sync used"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("FP sync used"), maxlen - strlen(val)); if ((vs>>4)&1) - strncat (v, _("FP sync enabled"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("FP sync enabled"), maxlen - strlen(val)); #ifdef DEBUG - printf ("Value29=0x%08x\n", vs); + printf ("Value29=0x%08x\n", vs); #endif break; case 32: - snprintf (buf, sizeof (buf), " / %s : ", _("Focus mode2")); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + strncat (val, _(" / Focus mode2 : "), maxlen - strlen(val)); switch (vs) { - case 0: - strncat (v, _("Single"), sizeof (v) - 1 - strlen(v)); - break; - case 1: - strncat (v, _("Continuous"), sizeof (v) - 1 - strlen(v)); - break; + case 0: + strncat (val, _("Single"), maxlen - strlen(val)); + break; + case 1: + strncat (val, _("Continuous"), maxlen - strlen(val)); + break; default: - snprintf (buf, sizeof (buf), "%i???", vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); - } + snprintf (buf, sizeof (buf), _("%i???"), vs); + strncat (val, buf, maxlen - strlen(val)); + } break; #ifdef DEBUG default: @@ -439,10 +440,10 @@ break; case MNOTE_CANON_TAG_SETTINGS_2: - CF (entry->format, EXIF_FORMAT_SHORT, v); + CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen); n = exif_get_short (data, entry->order)/2; data += 2; - CC (entry->components, n, v); + CC (entry->components, n, val, maxlen); #ifdef DEBUG printf ("Setting2 size %d %d\n",n,entry->size); #endif @@ -452,68 +453,67 @@ data+=2; switch(i) { case 7: - strncpy (v, _("White balance : "), sizeof (v) - 1 - strlen(v)); + strncpy (val, _("White balance : "), maxlen - strlen(val)); switch (vs) { - case 0: - strncat (v, _("Auto"), sizeof (v) - 1 - strlen(v)); - break; - case 1: - strncat (v, _("Sunny"), sizeof (v) - 1 - strlen(v)); - break; + case 0: + strncat (val, _("Auto"), maxlen - strlen(val)); + break; + case 1: + strncat (val, _("Sunny"), maxlen - strlen(val)); + break; case 2: - strncat (v, _("Cloudy"), sizeof (v) - 1 - strlen(v)); - break; + strncat (val, _("Cloudy"), maxlen - strlen(val)); + break; case 3: - strncat (v, _("Tungsten"), sizeof (v) - 1 - strlen(v)); - break; + strncat (val, _("Tungsten"), maxlen - strlen(val)); + break; case 4: - strncat (v, _("Flourescent"), sizeof (v) - 1 - strlen(v)); - break; + strncat (val, _("Flourescent"), maxlen - strlen(val)); + break; case 5: - strncat (v, _("Flash"), sizeof (v) - 1 - strlen(v)); - break; + strncat (val, _("Flash"), maxlen - strlen(val)); + break; case 6: - strncat (v, _("Custom"), sizeof (v) - 1 - strlen(v)); - break; + strncat (val, _("Custom"), maxlen - strlen(val)); + break; default: - snprintf (buf, sizeof (buf), "%i???", vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); - } + snprintf (buf, sizeof (buf), _("%i???"), vs); + strncat (val, buf, maxlen - strlen(val)); + } break; case 9: - snprintf (buf, sizeof (buf), " / %s : %u", _("Sequence number"), vs); - strncat (v, buf, sizeof (v) - 1 - strlen(v)); - + snprintf (buf, sizeof (buf), _(" / Sequence number : %u"), vs); + strncat (val, buf, maxlen - strlen(val)); break; case 14: if (vs>>12) { - strncat (v, _(" / AF point used : "), sizeof (v) - 1 - strlen(v)); + strncat (val, _(" / AF point used : "), maxlen - strlen(val)); if (vs&1) - strncat (v, _("Right"), sizeof (v) - 1 - strlen(v)); - if ((vs>>1)&1) - strncat (v, _("Center"), sizeof (v) - 1 - strlen(v)); + strncat (val, _("Right"), maxlen - strlen(val)); + if ((vs>>1)&1) + strncat (val, _("Center"), maxlen - strlen(val)); if ((vs>>2)&1) - strncat (v, _("Left"), sizeof (v) - 1 - strlen(v)); - snprintf (buf, sizeof (buf), " (%u %s)", vs>>12, _("available focus point")); - strncat (v, buf, sizeof (v) - 1 - strlen(v)); + strncat (val, _("Left"), maxlen - strlen(val)); + snprintf (buf, sizeof (buf), _(" (%u available focus point)"), vs>>12); + strncat (val, buf, maxlen - strlen(val)); } #ifdef DEBUG - printf ("0x%08x\n", vs); + printf ("0x%08x\n", vs); #endif break; case 15: - snprintf (buf, sizeof (buf), " / %s : %.2f EV", _("Flash bias"), vs/32.0); - strncat (v, buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _(" / Flash bias : %.2f EV"), vs/32.0); + strncat (val, buf, maxlen - strlen(val)); break; case 19: - snprintf (buf, sizeof (buf), " / %s : %u", _("Subject Distance (mm)"), vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof (buf), _(" / Subject Distance (mm) : %u"), vs); + strncat (val, buf, maxlen - strlen(val)); break; #ifdef DEBUG - default: - printf ("Value%d=%d\n", i, vs); + default: + printf ("Value%d=%d\n", i, vs); #endif } } @@ -522,36 +522,36 @@ case MNOTE_CANON_TAG_IMAGE_TYPE: case MNOTE_CANON_TAG_OWNER: - CF (entry->format, EXIF_FORMAT_ASCII, v); - CC (entry->components, 32, v); - strncpy (v,data,MIN (entry->size, sizeof (v) - 1)); + CF (entry->format, EXIF_FORMAT_ASCII, val, maxlen); + CC (entry->components, 32, val, maxlen); + strncpy (val, data, MIN (entry->size, maxlen)); break; case MNOTE_CANON_TAG_FIRMWARE: - CF (entry->format, EXIF_FORMAT_ASCII, v); - CC2 (entry->components, 24, 32, v); - strncpy (v,data,MIN (entry->size, sizeof (v) - 1)); + CF (entry->format, EXIF_FORMAT_ASCII, val, maxlen); + CC2 (entry->components, 24, 32, val, maxlen); + strncpy (val, data, MIN (entry->size, maxlen)); break; case MNOTE_CANON_TAG_IMAGE_NUMBER: - CF (entry->format, EXIF_FORMAT_LONG, v); - CC (entry->components, 1, v); + CF (entry->format, EXIF_FORMAT_LONG, val, maxlen); + CC (entry->components, 1, val, maxlen); vl = exif_get_long (data, entry->order); - snprintf (v, sizeof (v), "%03lu-%04lu", vl/10000,vl%10000); + snprintf (val, maxlen, "%03lu-%04lu", vl/10000,vl%10000); break; case MNOTE_CANON_TAG_SERIAL_NUMBER: - CF (entry->format, EXIF_FORMAT_LONG, v); - CC (entry->components, 1, v); + CF (entry->format, EXIF_FORMAT_LONG, val, maxlen); + CC (entry->components, 1, val, maxlen); vl = exif_get_long (data, entry->order); - snprintf (v, sizeof (v), "%04X-%05d", (int)vl>>16,(int)vl&0xffff); + snprintf (val, maxlen, "%04X-%05d", (int)vl>>16,(int)vl&0xffff); break; case MNOTE_CANON_TAG_CUSTOM_FUNCS: - CF (entry->format, EXIF_FORMAT_SHORT, v); + CF (entry->format, EXIF_FORMAT_SHORT, val, maxlen); n = exif_get_short (data, entry->order)/2; data+=2; - CC (entry->components, n, v); + CC (entry->components, n, val, maxlen); #ifdef DEBUG printf ("Custom Function size %d %d\n",n,entry->size); #endif @@ -559,8 +559,8 @@ { vs = exif_get_short (data, entry->order); data += 2; - snprintf (buf, sizeof(buf), "C.F%d : %u", i, vs); - strncat (v,buf, sizeof (v) - 1 - strlen(v)); + snprintf (buf, sizeof(buf), _("C.F%d : %u"), i, vs); + strncat (val, buf, maxlen - strlen(val)); } break; @@ -579,10 +579,10 @@ printf ("Value%d=%d\n", i, vs); } else if (entry->format == EXIF_FORMAT_ASCII) - strncpy (v,data,MIN (entry->size, sizeof (v) - 1)); + strncpy (val, data, MIN (entry->size, maxlen)); #endif break; } - return strdup (v); + return val; } Index: mnote-canon-entry.h =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/canon/mnote-canon-entry.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- mnote-canon-entry.h 26 Oct 2003 10:06:17 -0000 1.1 +++ mnote-canon-entry.h 7 Jan 2004 14:53:04 -0000 1.2 @@ -38,6 +38,6 @@ ExifByteOrder order; }; -char *mnote_canon_entry_get_value (const MnoteCanonEntry *entry); +char *mnote_canon_entry_get_value (const MnoteCanonEntry *entry, char *val, unsigned int maxlen); #endif /* __MNOTE_CANON_ENTRY_H__ */ Index: exif-mnote-data-canon.c =================================================================== RCS file: /cvsroot/libexif/libexif/libexif/canon/exif-mnote-data-canon.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- exif-mnote-data-canon.c 27 Oct 2003 22:34:30 -0000 1.4 +++ exif-mnote-data-canon.c 7 Jan 2004 14:53:04 -0000 1.5 @@ -60,13 +60,13 @@ } static char * -exif_mnote_data_canon_get_value (ExifMnoteData *note, unsigned int n) +exif_mnote_data_canon_get_value (ExifMnoteData *note, unsigned int n, char *val, unsigned int maxlen) { - ExifMnoteDataCanon *cnote = (ExifMnoteDataCanon *) note; + ExifMnoteDataCanon *cnote = (ExifMnoteDataCanon *) note; if (!note) return NULL; if (cnote->count <= n) return NULL; - return mnote_canon_entry_get_value (&cnote->entries[n]); + return mnote_canon_entry_get_value (&cnote->entries[n], val, maxlen); } static void @@ -164,13 +164,13 @@ memset (*buf, 0, sizeof (char) * *buf_size); /* Save the number of entries */ - exif_set_short (*buf, n->order, n->count); + exif_set_short (*buf, n->order, (ExifShort) n->count); /* Save each entry */ for (i = 0; i < n->count; i++) { o = 2 + i * 12; - exif_set_short (*buf + o + 0, n->order, n->entries[i].tag); - exif_set_short (*buf + o + 2, n->order, n->entries[i].format); + exif_set_short (*buf + o + 0, n->order, (ExifShort) n->entries[i].tag); + exif_set_short (*buf + o + 2, n->order, (ExifShort) n->entries[i].format); exif_set_long (*buf + o + 4, n->order, n->entries[i].components); o += 8; |