--- exif.c- Sun Oct 8 19:32:37 2000 +++ exif.c Thu May 24 19:58:36 2001 @@ -71,7 +71,7 @@ /* _itoa seems to be an os2-ism */ #define _itoa(n, s, slen) snprintf(s, slen, "%d", n) -#define _ultoa(n, s, slen) snprintf(s, slen, "%uld", n) +#define _ultoa(n, s, slen) snprintf(s, slen, "%lu", n) /* johnh changes */ #define _ltoa(n, s, slen) snprintf(s, slen, "%ld", n) @@ -328,15 +328,20 @@ Tlong i; Texif exif; Tifd ifd; - char comment [TOTAL_LENGTH] = ""; - char dummy [TOTAL_LENGTH] = ""; - char newName [FILENAME_MAX+1] = ""; - char longName [FILENAME_MAX+1] = ""; + char comment [TOTAL_LENGTH]; + char dummy [TOTAL_LENGTH]; + char newName [FILENAME_MAX+1]; + char longName [FILENAME_MAX+1]; char extension [10]; char dateTime [ENTRY_LENGTH+1]; int rc; int keepOldName; + strcpy(comment, ""); + strcpy(dummy, ""); + strcpy(newName, ""); + strcpy(longName, ""); + exif.tiffOffset = EXIF_TiffOffset; exif.byteOrder = getOrder( start + exif.tiffOffset ); exif.numIfd = EXIF_NumIfd; @@ -656,10 +661,13 @@ Tlong offset; int headersize; - char dummy [1000] = ""; + char dummy [1000]; - /* Read TIFF data */ + memset(&exif, 0, sizeof(Texif)); /* johnh change */ + strcpy(dummy, ""); + /* Read TIFF data */ + exif.tiffOffset = EXIF_TiffOffset; exif.byteOrder = getOrder( start + exif.tiffOffset ); @@ -698,28 +706,40 @@ /* Read Sub IFD */ - p = start + exif.tiffOffset + exif.subIfdOffset; - ifd.numEntries = getShort( p, exif.byteOrder ); - printf( "SubIFD at offset %Xh = %d has %d entries\n", exif.tiffOffset + exif.subIfdOffset, exif.tiffOffset + exif.subIfdOffset, ifd.numEntries ); - p += SHORT_SIZE; - dumpEntries( start, p, ifd.numEntries, &exif ); + if (exif.subIfdOffset) { + p = start + exif.tiffOffset + exif.subIfdOffset; + ifd.numEntries = getShort( p, exif.byteOrder ); + printf( "SubIFD at offset %Xh = %d has %d entries\n", exif.tiffOffset + exif.subIfdOffset, exif.tiffOffset + exif.subIfdOffset, ifd.numEntries ); + p += SHORT_SIZE; + dumpEntries( start, p, ifd.numEntries, &exif ); + } else { + printf("No SubIFD offset\n"); + }; /* Read EXIF Interoperability IFD */ - p = start + exif.tiffOffset + exif.interoperabilityOffset; - ifd.numEntries = getShort( p, exif.byteOrder ); - printf( "Interoperability IFD at offset %Xh = %d has %d entries\n", exif.tiffOffset + exif.interoperabilityOffset, exif.tiffOffset + exif.interoperabilityOffset, ifd.numEntries ); - p += SHORT_SIZE; - dumpEntries( start, p, ifd.numEntries, &exif ); + if (exif.interoperabilityOffset) { + p = start + exif.tiffOffset + exif.interoperabilityOffset; + ifd.numEntries = getShort( p, exif.byteOrder ); + printf( "Interoperability IFD at offset %Xh = %d has %d entries\n", exif.tiffOffset + exif.interoperabilityOffset, exif.tiffOffset + exif.interoperabilityOffset, ifd.numEntries ); + p += SHORT_SIZE; + dumpEntries( start, p, ifd.numEntries, &exif ); + } else { + printf("No Interoperability IFD offset\n"); + }; /* Read MakerNote IFD */ - p = start + exif.tiffOffset + exif.makerNoteOffset; - printf( "MakerNote IFD at offset %Xh = %d has unknown data structure:\n", exif.tiffOffset + exif.makerNoteOffset, exif.tiffOffset + exif.makerNoteOffset ); - printf( " " ); - for( i = 0, k = 0; i < exif.makerNoteLength; i += 1, k += 3, p += 1 ) - printf( "%02X ", *p ); - printf( "(hex, unknown meaning)\n" ); + if (exif.makerNoteOffset) { + p = start + exif.tiffOffset + exif.makerNoteOffset; + printf( "MakerNote IFD at offset %Xh = %d has unknown data structure:\n", exif.tiffOffset + exif.makerNoteOffset, exif.tiffOffset + exif.makerNoteOffset ); + printf( " " ); + for( i = 0, k = 0; i < exif.makerNoteLength; i += 1, k += 3, p += 1 ) + printf( "%02X ", *p ); + printf( "(hex, unknown meaning)\n" ); + } else { + printf("No MakerNote IFD offset\n"); + }; return RET_OK; @@ -2967,7 +2987,9 @@ Tlong i; Tbyte* p; - char dummy [1000] = ""; + char dummy [1000]; + + strcpy(dummy, ""); p = firstentry;