Sophie

Sophie

distrib > Mageia > cauldron > x86_64 > media > core-release-src > by-pkgid > 3f322305d1e461ca028d87420119cdb7 > files > 23

dcraw-9.28.0-12.mga10.src.rpm

--- dcraw/parse.c	2022-04-12 13:09:25.758417413 +0200
+++ dcraw/parse.c	2022-04-12 13:09:37.490489361 +0200
@@ -39,6 +39,36 @@
 char *fname, make[128], model[128], model2[128];
 int is_dng;
 
+void tseek(FILE *stream, long offset, int whence)
+{
+  char line[81];
+  if( fseek(stream,offset,whence) != 0 ) {
+    snprintf(line,80,"fseek(%p,%ld,%d)",stream,offset,whence);
+    perror(line);
+    exit(1);
+  }
+}
+
+void tread(void *ptr, size_t size, size_t nmemb, FILE *stream)
+{
+  char line[81];
+  if( fread (ptr, size, nmemb, stream) != nmemb ) {
+    snprintf(line,80,"fread(%p,%ld,%ld,%p)",ptr,(long)size,(long)nmemb,stream);
+    perror(line);
+    exit(1);
+  }
+}
+
+void twrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
+{
+  char line[81];
+  if( fwrite (ptr, size, nmemb, stream) != nmemb ) {
+    snprintf(line,80,"fwrite(%p,%ld,%ld,%p)",ptr,(long)size,(long)nmemb,stream);
+    perror(line);
+    exit(1);
+  }
+}
+
 ushort sget2 (uchar *s)
 {
   if (order == 0x4949)		/* "II" means little-endian */
@@ -51,7 +81,7 @@
 ushort get2()
 {
   uchar str[2] = { 0xff,0xff };
-  fread (str, 1, 2, ifp);
+  tread (str, 1, 2, ifp);
   return sget2(str);
 }
 
@@ -67,7 +97,7 @@
 int get4()
 {
   uchar str[4] = { 0xff,0xff,0xff,0xff };
-  fread (str, 1, 4, ifp);
+  tread (str, 1, 4, ifp);
   return sget4(str);
 }
 
@@ -132,7 +162,7 @@
   int size[] = { 1,1,1,2,4,8,1,1,2,4,8,4,8 };
 
   if (count * size[type < 13 ? type:0] > 4)
-    fseek (ifp, get4()+base, SEEK_SET);
+    tseek (ifp, get4()+base, SEEK_SET);
   save = ftell(ifp);
   printf("%*stag=0x%x %d, type=%d, count=%d, offset=%06x, data=",
 	level*2, "", tag, tag, type, count, save);
@@ -163,7 +193,7 @@
   if (type==2) putchar('\"');
 quit:
   putchar('\n');
-  fseek (ifp, save, SEEK_SET);
+  tseek (ifp, save, SEEK_SET);
 }
 
 void parse_nikon_capture_note (int length)
@@ -173,10 +203,10 @@
   puts ("    Nikon Capture Note:");
   sorder = order;
   order = 0x4949;
-  fseek (ifp, 22, SEEK_CUR);
+  tseek (ifp, 22, SEEK_CUR);
   for (offset=22; offset+22 < length; offset += 22+size) {
     tag = get4();
-    fseek (ifp, 14, SEEK_CUR);
+    tseek (ifp, 14, SEEK_CUR);
     size = get4()-4;
     printf("      tag=0x%08x, size=%d", tag, size);
     for (j=0; j < size; j++)
@@ -247,17 +277,17 @@
    its own byte-order!), or it might just be a table.
  */
   sorder = order;
-  fread (buf, 1, 10, ifp);
+  tread (buf, 1, 10, ifp);
   if (!strcmp (buf,"Nikon")) {	/* starts with "Nikon\0\2\0\0\0" ? */
     base = ftell(ifp);
     order = get2();		/* might differ from file-wide byteorder */
     val = get2();		/* should be 42 decimal */
     offset = get4();
-    fseek (ifp, offset-8, SEEK_CUR);
+    tseek (ifp, offset-8, SEEK_CUR);
   } else if (!strcmp (buf,"OLYMPUS") ||
 	     !strcmp (buf,"PENTAX ")) {
     base = ftell(ifp)-10;
-    fseek (ifp, -2, SEEK_CUR);
+    tseek (ifp, -2, SEEK_CUR);
     order = get2();
     if (buf[0] == 'O') get2();
   } else if (!strncmp (buf,"SONY",4) ||
@@ -266,17 +296,17 @@
   } else if (!strncmp (buf,"FUJIFILM",8)) {
     base = ftell(ifp)-10;
 nf: order = 0x4949;
-    fseek (ifp,  2, SEEK_CUR);
+    tseek (ifp,  2, SEEK_CUR);
   } else if (!strcmp (buf,"OLYMP") ||
 	     !strcmp (buf,"LEICA") ||
 	     !strcmp (buf,"Ricoh") ||
 	     !strcmp (buf,"EPSON"))
-    fseek (ifp, -2, SEEK_CUR);
+    tseek (ifp, -2, SEEK_CUR);
   else if (!strcmp (buf,"AOC") ||
 	   !strcmp (buf,"QVC"))
-    fseek (ifp, -4, SEEK_CUR);
+    tseek (ifp, -4, SEEK_CUR);
   else {
-    fseek (ifp, -10, SEEK_CUR);
+    tseek (ifp, -10, SEEK_CUR);
     if (!strncmp(make,"SAMSUNG",7))
       base = ftell(ifp);
     if (!strncmp (buf,"ev=",3)) {
@@ -297,27 +327,27 @@
     if ((tag      == 0x11 && !strncmp(make,"NIKON",5)) ||
 	(tag >> 8 == 0x20 && !strncmp(buf ,"OLYMP",5)) || type == 13) {
       if (count == 1)
-	fseek (ifp, get4()+base, SEEK_SET);
+	tseek (ifp, get4()+base, SEEK_SET);
       parse_tiff_ifd (base, level+1);
     }
     if (tag == 0x1d)
       while ((val = fgetc(ifp)) && val != EOF)
 	serial = serial*10 + (isdigit(val) ? val - '0' : val % 10);
     if (tag == 0x91)
-      fread (buf91, sizeof buf91, 1, ifp);
+      tread (buf91, sizeof buf91, 1, ifp);
     if (tag == 0x97)
-      fread (buf97, sizeof buf97, 1, ifp);
+      tread (buf97, sizeof buf97, 1, ifp);
     if (tag == 0x98)
-      fread (buf98, sizeof buf98, 1, ifp);
+      tread (buf98, sizeof buf98, 1, ifp);
     if (tag == 0xa7)
       key = fgetc(ifp)^fgetc(ifp)^fgetc(ifp)^fgetc(ifp);
     if (tag == 0xe01)
       parse_nikon_capture_note (count);
     if (tag == 0xb028) {
-      fseek (ifp, get4(), SEEK_SET);
+      tseek (ifp, get4(), SEEK_SET);
       parse_tiff_ifd (base, level+1);
     }
-    fseek (ifp, save+12, SEEK_SET);
+    tseek (ifp, save+12, SEEK_SET);
   }
   nikon_decrypt (serial, key, 0x91, 4, sizeof buf91, buf91);
   if (!strncmp ((char *)buf97, "0205", 4))
@@ -342,7 +372,7 @@
     tiff_dump (base, tag, type, count, level);
     if (tag == 0x927c)
       parse_makernote (base, count, level+1);
-    fseek (ifp, save+12, SEEK_SET);
+    tseek (ifp, save+12, SEEK_SET);
   }
 }
 
@@ -354,7 +384,7 @@
 {
   int i=order;
   order = 0x4d4d;
-  fseek (ifp, base, SEEK_SET);
+  tseek (ifp, base, SEEK_SET);
   if (get4()==0xffd8ffe1 && get2() && get4()==0x45786966 && !get2()) {
     printf ("%*sEmbedded JPEG:\n", level*2, "");
     parse_tiff (ftell(ifp), level+1);
@@ -410,15 +440,15 @@
 	save2 = ftell(ifp);
 	for (i=0; i < count; i++) {
 	  printf ("SubIFD #%d:\n", i+1);
-	  fseek (ifp, save2 + i*4, SEEK_SET);
-	  fseek (ifp, get4()+base, SEEK_SET);
+	  tseek (ifp, save2 + i*4, SEEK_SET);
+	  tseek (ifp, get4()+base, SEEK_SET);
 	  parse_tiff_ifd (base, level+1);
 	}
 	break;
       case 273:				/* StripOffset */
       case 513:				/* JpegIFOffset */
       case 61447:
-	fseek (ifp, get4()+base, SEEK_SET);
+	tseek (ifp, get4()+base, SEEK_SET);
       case 46:
 	parse_thumb (ftell(ifp), level);
 	break;
@@ -431,26 +461,26 @@
       case 33424:
       case 65024:
 	puts("Kodak private data:");
-	fseek (ifp, get4()+base, SEEK_SET);
+	tseek (ifp, get4()+base, SEEK_SET);
 	parse_tiff_ifd (base, level+1);
 	break;
       case 34310:
 	parse_mos(0);
 	break;
       case 34665:
-	fseek (ifp, get4()+base, SEEK_SET);
+	tseek (ifp, get4()+base, SEEK_SET);
 	parse_exif (base, level+1);
 	break;
       case 34853:
 	puts("GPS data:");
-	fseek (ifp, get4()+base, SEEK_SET);
+	tseek (ifp, get4()+base, SEEK_SET);
 	parse_tiff_ifd (base, level+1);
 	break;
       case 50459:
 	i = order;
 	save2 = ftell(ifp);
 	order = get2();
-	fseek (ifp, save2 + (get2(),get4()), SEEK_SET);
+	tseek (ifp, save2 + (get2(),get4()), SEEK_SET);
 	parse_tiff_ifd (save2, level+1);
 	order = i;
 	break;
@@ -460,19 +490,19 @@
       case 50740:
 	if (is_dng) break;
 	parse_minolta (i = get4()+base);
-	fseek (ifp, i, SEEK_SET);
+	tseek (ifp, i, SEEK_SET);
 	parse_tiff_ifd (base, level+1);
     }
-    fseek (ifp, save+12, SEEK_SET);
+    tseek (ifp, save+12, SEEK_SET);
   }
   if (sony_length && (buf = malloc(sony_length))) {
-    fseek (ifp, sony_offset, SEEK_SET);
-    fread (buf, sony_length, 1, ifp);
+    tseek (ifp, sony_offset, SEEK_SET);
+    tread (buf, sony_length, 1, ifp);
     sony_decrypt (buf, sony_length/4, 1, sony_key);
     sfp = ifp;
     if ((ifp = tmpfile())) {
-      fwrite (buf, sony_length, 1, ifp);
-      fseek (ifp, 0, SEEK_SET);
+      twrite (buf, sony_length, 1, ifp);
+      tseek (ifp, 0, SEEK_SET);
       puts ("Sony SR2 encrypted IFD:");
       parse_tiff_ifd (-sony_offset, level);
       fclose (ifp);
@@ -490,12 +520,12 @@
 {
   int doff, ifd=0, sorder=order;
 
-  fseek (ifp, base, SEEK_SET);
+  tseek (ifp, base, SEEK_SET);
   order = get2();
   if (order != 0x4949 && order != 0x4d4d) return;
   get2();
   while ((doff = get4())) {
-    fseek (ifp, doff+base, SEEK_SET);
+    tseek (ifp, doff+base, SEEK_SET);
     printf ("%*sIFD #%d:\n", level*2, "", ifd++);
     if (parse_tiff_ifd (base, level)) break;
   }
@@ -507,12 +537,12 @@
   unsigned offset, save, len, j;
   char tag[4];
 
-  fseek (ifp, base, SEEK_SET);
+  tseek (ifp, base, SEEK_SET);
   if (fgetc(ifp) || fgetc(ifp)-'M' || fgetc(ifp)-'R') return;
   order = fgetc(ifp) * 0x101;
   offset = base + get4() + 8;
   while ((save=ftell(ifp)) < offset) {
-    fread (tag, 1, 4, ifp);
+    tread (tag, 1, 4, ifp);
     len = get4();
     printf ("Minolta tag %3.3s offset %06x length %06x", tag+1, save, len);
     if (!strncmp (tag+1,"TTW",3)) {
@@ -523,7 +553,7 @@
         printf ("%c%04x",(j & 15) || len < 9 ? ' ':'\n', get2());
       putchar ('\n');
     }
-    fseek (ifp, save+len+8, SEEK_SET);
+    tseek (ifp, save+len+8, SEEK_SET);
   }
 }
 
@@ -536,9 +566,9 @@
   char c, name[256];
   ushort key[2];
 
-  fseek (ifp, offset+length-4, SEEK_SET);
+  tseek (ifp, offset+length-4, SEEK_SET);
   tboff = get4() + offset;
-  fseek (ifp, tboff, SEEK_SET);
+  tseek (ifp, tboff, SEEK_SET);
   nrecs = get2();
   if (nrecs > 100) return;
   printf ("%*s%d records:\n", level*2, "", nrecs);
@@ -555,7 +585,7 @@
       aoff = offset + roff;
       printf (", length=%d, reloff=%d, absoff=%d",
 		len, roff, aoff);
-      fseek (ifp, aoff, SEEK_SET);
+      tseek (ifp, aoff, SEEK_SET);
     }
     if ((type & 0xe700) == 0)
       printf (", data=");
@@ -567,7 +597,7 @@
       case 0x30:
 	putchar('\n');
 	parse_ciff (aoff, len, level+1);
-	fseek (ifp, save+10, SEEK_SET);
+	tseek (ifp, save+10, SEEK_SET);
 	continue;
       case 0x00:			/* byte values */
 	for (j = 0; j < dlen; j++)
@@ -583,7 +613,7 @@
 	break;
       case 0x10:			/* word values */
 	key[0] = get2();
-	fseek (ifp, -2, SEEK_CUR);
+	tseek (ifp, -2, SEEK_CUR);
 	if (type == 0x1032 && key[0] == 1040)
 	  key[1] = 17907;
 	else key[0] = key[1] = 0;
@@ -596,10 +626,10 @@
 	  printf ("%c%08x",(j & 31) || dlen < 16 ? ' ':'\n', get4());
     }
     putchar('\n');
-    fseek (ifp, save+10, SEEK_SET);
+    tseek (ifp, save+10, SEEK_SET);
     if (type == 0x080a) {		/* Get the camera name */
-      fseek (ifp, aoff, SEEK_SET);
-      fread (name, 256, 1, ifp);
+      tseek (ifp, aoff, SEEK_SET);
+      tread (name, 256, 1, ifp);
       strcpy (make, name);
       strcpy (model, name + strlen(make)+1);
     }
@@ -610,7 +640,7 @@
 {
   int len, save, hlen;
 
-  fseek (ifp, offset, SEEK_SET);
+  tseek (ifp, offset, SEEK_SET);
   if (fgetc(ifp) != 0xff || fgetc(ifp) != 0xd8) return 0;
 
   while (fgetc(ifp) == 0xff && fgetc(ifp) >> 4 != 0xd) {
@@ -622,7 +652,7 @@
     if (get4() == 0x48454150)		/* "HEAP" */
       parse_ciff (save+hlen, len-hlen, 0);
     parse_tiff (save+6,0);
-    fseek (ifp, save+len, SEEK_SET);
+    tseek (ifp, save+len, SEEK_SET);
   }
   return 1;
 }
@@ -633,27 +663,27 @@
   char tag[4], type[4], buf[64];
 
   order = 0x4949;
-  fread (tag, 4, 1, ifp);
+  tread (tag, 4, 1, ifp);
   size = get4();
   if (isdigit(tag[0])) {
-    fseek (ifp, size, SEEK_CUR);
+    tseek (ifp, size, SEEK_CUR);
     return;
   }
   printf ("%*.4s size %d", level*4+4, tag, size);
   if (!memcmp(tag,"RIFF",4) || !memcmp(tag,"LIST",4)) {
     end = ftell(ifp) + size;
-    fread (type, 4, 1, ifp);
+    tread (type, 4, 1, ifp);
     printf (" type %.4s:\n", type);
     while (ftell(ifp)+7 < end)
       parse_riff (level+1);
   } else {
     save = ftell(ifp);
-    fread (buf, 1, 40, ifp);
+    tread (buf, 1, 40, ifp);
     printf (": ");
     for (i=0; i < 40 && isprint(buf[i]); i++)
       putchar (buf[i]);
     putchar ('\n');
-    fseek (ifp, save+size, SEEK_SET);
+    tseek (ifp, save+size, SEEK_SET);
   }
 }
 
@@ -668,7 +698,7 @@
     if (get4() != 0x504b5453) break;
     get4();
     printf ("%*sPKTS ", level, "");
-    fread (data, 1, 40, ifp);
+    tread (data, 1, 40, ifp);
     skip = get4();
     printf ("%s %d bytes: ", data, skip);
     if (!strcmp(data,"pattern_ratation_angle")) {
@@ -681,23 +711,23 @@
       putchar('\n');
       continue;
     }
-    fread (data, 1, sizeof data, ifp);
-    fseek (ifp, -sizeof data, SEEK_CUR);
+    tread (data, 1, sizeof data, ifp);
+    tseek (ifp, -sizeof data, SEEK_CUR);
     data[sizeof data - 1] = 0;
     while ((cp=strchr(data,'\n')))
       *cp = ' ';
     printf ("%s\n",data);
     parse_mos(level+2);
-    fseek (ifp, skip, SEEK_CUR);
+    tseek (ifp, skip, SEEK_CUR);
   }
-  fseek (ifp, save, SEEK_SET);
+  tseek (ifp, save, SEEK_SET);
 }
 
 void parse_rollei()
 {
   char line[128], *val;
 
-  fseek (ifp, 0, SEEK_SET);
+  tseek (ifp, 0, SEEK_SET);
   do {
     fgets (line, 128, ifp);
     fputs (line, stdout);
@@ -715,7 +745,7 @@
   ushort c;
   char *cp;
 
-  fseek (ifp, offset, SEEK_SET);
+  tseek (ifp, offset, SEEK_SET);
   for (cp=buf; (c = get2()) && cp+3 < buf+len; ) {
     if (c < 0x80)
       *cp++ = c;
@@ -739,8 +769,8 @@
   ushort huff[258], vpred[2][2], hpred[2];
 
   order = 0x4949;			/* Little-endian */
-  fseek (ifp, -4, SEEK_END);
-  fseek (ifp, get4(), SEEK_SET);
+  tseek (ifp, -4, SEEK_END);
+  tseek (ifp, get4(), SEEK_SET);
   if (get4() != 0x64434553) {	/* SECd */
     printf ("Bad Section identifier at %6x\n", (int)ftell(ifp)-4);
     return;
@@ -752,7 +782,7 @@
     len = get4();
     tag = get4();
     save = ftell(ifp);
-    fseek (ifp, off, SEEK_SET);
+    tseek (ifp, off, SEEK_SET);
     printf ("%c%c%c%c at offset %06x, length %06x, ",
 	tag, tag >> 8, tag >> 16, tag >> 24, off, len);
     if (get4() != (0x20434553 | (tag << 24))) {
@@ -780,7 +810,7 @@
 	high = get4();
 	if (type == 2) {
 	  camf = malloc (len -= 28);
-	  fread (camf, 1, len, ifp);
+	  tread (camf, 1, len, ifp);
 	  for (i=0; i < len; i++) {
 	    high = (high * 1597 + 51749) % 244944;
 	    val = high * (INT64) 301593171 >> 24;
@@ -796,7 +826,7 @@
 	    for (j=0; j < 256 >> tag; )
 	      huff[val+ ++j] = tag << 8 | i;
 	  }
-	  fseek (ifp, 6, SEEK_CUR);
+	  tseek (ifp, 6, SEEK_CUR);
 	  getbits(-1);
 	  vpred[0][0] = vpred[0][1] =
 	  vpred[1][0] = vpred[1][1] = 512;
@@ -901,7 +931,7 @@
 	    strcpy (model, value);
 	}
     }
-    fseek (ifp, save, SEEK_SET);
+    tseek (ifp, save, SEEK_SET);
   }
 }
 
@@ -909,10 +939,10 @@
 {
   int entries, tag, len;
 
-  fseek (ifp, offset, SEEK_SET);
+  tseek (ifp, offset, SEEK_SET);
   if (!(len = get4())) return;
   printf ("Fuji Image %c:\n", offset < 100 ? 'S':'R');
-  fseek (ifp, len, SEEK_SET);
+  tseek (ifp, len, SEEK_SET);
   entries = get4();
   if (entries > 255) return;
   while (entries--) {
@@ -931,10 +961,10 @@
   unsigned meta=0, wide=0, high=0, i, j;
   char str[256];
 
-  fseek (ifp, base, SEEK_SET);
+  tseek (ifp, base, SEEK_SET);
   order = get4() & 0xffff;
   if (get4() >> 8 != 0x526177) return;
-  fseek (ifp, base+get4(), SEEK_SET);
+  tseek (ifp, base+get4(), SEEK_SET);
   entries = get4();
   get4();
   while (entries--) {
@@ -950,9 +980,9 @@
     putchar ('\n');
     if (tag == 0x110) meta = base+data;
     if (len > 4)
-      fseek (ifp, base+data, SEEK_SET);
+      tseek (ifp, base+data, SEEK_SET);
     if (type == 1 && len < 256) {
-      fread (str, 256, 1, ifp);
+      tread (str, 256, 1, ifp);
       puts (str);
     }
     if (tag != 0x21c && type == 4 && len > 4) {
@@ -960,15 +990,15 @@
 	printf ("%f ", int_to_float(get4()));
       puts ("");
     }
-    fseek (ifp, save, SEEK_SET);
+    tseek (ifp, save, SEEK_SET);
   }
   strcpy (make, "Phase One");
   strcpy (model, "unknown");
   if (!meta) return;
-  fseek (ifp, meta, SEEK_SET);
+  tseek (ifp, meta, SEEK_SET);
   order = get2();
-  fseek (ifp, 6, SEEK_CUR);
-  fseek (ifp, meta+get4(), SEEK_SET);
+  tseek (ifp, 6, SEEK_CUR);
+  tseek (ifp, meta+get4(), SEEK_SET);
   entries = get4();
   get4();
   while (entries--) {
@@ -979,7 +1009,7 @@
     printf ("Phase One meta tag=0x%x, len=%2d, offset = 0x%x, data = ",
 		tag, len, data);
     if (!((0x000801f4 >> (tag-0x400)) & 1)) putchar ('\n');
-    fseek (ifp, meta+data, SEEK_SET);
+    tseek (ifp, meta+data, SEEK_SET);
     switch (tag) {
       case 0x400:
 	for (i=0; i < len; i+=2)
@@ -996,7 +1026,7 @@
 	printf ("%f\n", int_to_float (data));
 	break;
       case 0x404: case 0x405: case 0x406: case 0x407:
-	fread (str, 256, 1, ifp);
+	tread (str, 256, 1, ifp);
 	puts (str);
 	break;
       case 0x408: case 0x413:
@@ -1030,7 +1060,7 @@
 	  printf ("%02X%c", fgetc(ifp),
 		(i & 15) == 15 || i == len-1 ? '\n':' ');
     }
-    fseek (ifp, save, SEEK_SET);
+    tseek (ifp, save, SEEK_SET);
   }
 }
 
@@ -1047,7 +1077,7 @@
     switch (tag >> 12) {
       case 1:
 	if (len-4 < sizeof buf) {
-	  fread (buf, 1,len-4, ifp);
+	  tread (buf, 1,len-4, ifp);
 	  printf ("\"%.*s\"", len-4, buf);
 	}
 	break;
@@ -1081,21 +1111,21 @@
       level*2, "", (INT64) base, len, tag, ctag);
     switch (tag) {
       case 0x52454431:			/* RED1 */
-	fseek (ifp, 59, SEEK_CUR);
-	fread (buf, 1, 256, ifp);
+	tseek (ifp, 59, SEEK_CUR);
+	tread (buf, 1, 256, ifp);
 	printf ("  Original name: %s\n", buf);
 	break;
       case 0x52454432:			/* RED2 */
-	fseek (ifp, 18, SEEK_CUR);
+	tseek (ifp, 18, SEEK_CUR);
       case 0x52444901:			/* RDI */
-	fseek (ifp, 88, SEEK_CUR);
+	tseek (ifp, 88, SEEK_CUR);
 	parse_uuid (level+1);
 	base = -(-(base+len) & -4096);
 	continue;
 #if 0
       case 0x52454441:			/* REDA */
-	fread (buf, 1, sizeof buf, ifp);
-	fwrite (buf+24, 1, len-32, stdout);
+	tread (buf, 1, sizeof buf, ifp);
+	twrite (buf+24, 1, len-32, stdout);
 	break;
 #endif
       case 0x52454456:			/* REDV */
@@ -1103,7 +1133,7 @@
 	parse_redcine (base+20, level+1);
 	break;
       case 0x75756964:			/* uuid */
-	fseek (ifp, 16, SEEK_CUR);
+	tseek (ifp, 16, SEEK_CUR);
 	parse_uuid (level+1);
     }
     base += len;
@@ -1119,31 +1149,31 @@
     order = 0x4d4d;
     size = get4();
     if (size < 8 || save+size > end) {
-      fseek (ifp, -4, SEEK_CUR);
-      fread (buf, 1, 400, ifp);
+      tseek (ifp, -4, SEEK_CUR);
+      tread (buf, 1, 400, ifp);
       printf (" =");
       for (i=0; i < 400 && i < end-save; i++)
         printf ("%s%02x",i & 3 ? "":" ",buf[i] & 255);
-      fseek (ifp, end, SEEK_SET);
+      tseek (ifp, end, SEEK_SET);
       return;
     }
-    fread (tag, 4, 1, ifp);
+    tread (tag, 4, 1, ifp);
     printf ("\n%*.4s size %d", level*2+4, tag, size);
     memset (uuid, 0, 16);
     if (!memcmp(tag,"uuid",4)) {
       for (i=0; i < 4; i++) uuid[i] = get4();
-      fseek (ifp, -16, SEEK_CUR);
+      tseek (ifp, -16, SEEK_CUR);
       printf(" = ");
       for (i=0; i < 16; i++)
 	printf ("%s%02x",(0x550 >> i) & 1 ? "-":"", fgetc(ifp));
     }
     if (!memcmp(tag,"stsd",4))
-      fseek (ifp, 8, SEEK_CUR);
+      tseek (ifp, 8, SEEK_CUR);
     if (!memcmp(tag,"CMT",3)) {
       putchar ('\n');
       parse_tiff (ftell(ifp),level+1);
     } else parse_crx (level+1, save+size);
-    fseek (ifp, save+size, SEEK_SET);
+    tseek (ifp, save+size, SEEK_SET);
   }
   if (!level) {
     printf ("Finished parsing at offset 0x%lx, ",ftell(ifp));
@@ -1160,7 +1190,7 @@
   while (ftell(ifp)+7 < end) {
     save = ftell(ifp);
     if ((size = get4()) < 8) return;
-    fread (tag, 4, 1, ifp);
+    tread (tag, 4, 1, ifp);
     printf ("%*.4s size %d", level*4+4, tag, size);
     for (lcase=1, i=0; i < 4; i++)
       if (!islower(tag[i])) lcase = 0;
@@ -1173,13 +1203,13 @@
       puts (" *** parsing JPEG thumbnail ...");
       parse_jpeg (ftell(ifp));
     } else {
-      fread (buf, 1, 40, ifp);
+      tread (buf, 1, 40, ifp);
       printf (" : ");
       for (i=0; i < 40 && i < size-8; i++)
 	putchar (isprint(buf[i]) ? buf[i] : '.');
       putchar ('\n');
     }
-    fseek (ifp, save+size, SEEK_SET);
+    tseek (ifp, save+size, SEEK_SET);
   }
 }
 
@@ -1205,9 +1235,9 @@
   make[0] = model[0] = model2[0] = is_dng = 0;
   order = get2();
   hlen = get4();
-  fseek (ifp, 0, SEEK_SET);
-  fread (head, 1, 32, ifp);
-  fseek (ifp, 0, SEEK_END);
+  tseek (ifp, 0, SEEK_SET);
+  tread (head, 1, 32, ifp);
+  tseek (ifp, 0, SEEK_END);
   fsize = ftell(ifp);
   if ((cp = memmem (head, 32, "MMMM", 4)) ||
       (cp = memmem (head, 32, "IIII", 4))) {
@@ -1216,7 +1246,7 @@
   } else if (order == 0x4949 || order == 0x4d4d) {
     if (!memcmp(head+6,"HEAPCCDR",8)) {
       parse_ciff (hlen, fsize - hlen, 0);
-      fseek (ifp, hlen, SEEK_SET);
+      tseek (ifp, hlen, SEEK_SET);
     } else
       parse_tiff (0,0);
   } else if (!memcmp (head,"NDF0",4)) {
@@ -1224,26 +1254,26 @@
   } else if (!memcmp (head,"\0MRM",4)) {
     parse_minolta (0);
   } else if (!memcmp (head,"FUJIFILM",8)) {
-    fseek (ifp, 84, SEEK_SET);
+    tseek (ifp, 84, SEEK_SET);
     toff = get4();
     tlen = get4();
     parse_fuji (92);
-    fseek (ifp, 100, SEEK_SET);
+    tseek (ifp, 100, SEEK_SET);
     parse_tiff (get4(),0);
     if (toff > 120) {
       parse_fuji (120);
-      fseek (ifp, 128, SEEK_SET);
+      tseek (ifp, 128, SEEK_SET);
       parse_tiff (get4(),0);
     }
     parse_thumb (toff,0);
   } else if (!memcmp (head,"RIFF",4)) {
-    fseek (ifp, 0, SEEK_SET);
+    tseek (ifp, 0, SEEK_SET);
     parse_riff(0);
   } else if (!memcmp (head+4,"ftypcrx ",8)) {
-    fseek (ifp, 0, SEEK_SET);
+    tseek (ifp, 0, SEEK_SET);
     parse_crx (0, fsize);
   } else if (!memcmp (head+4,"ftypqt   ",9)) {
-    fseek (ifp, 0, SEEK_SET);
+    tseek (ifp, 0, SEEK_SET);
     parse_qt (0, fsize);
   } else if (!memcmp (head+4,"RED",3))
     parse_redcine(0,0);