GCC4 és a pointer-aritmetika

Boobaa küldte be 2006. 01. 28., szombat, 17:46 időpontban

Egyetlen magyarázatként azt tudom felhozni, ha egy program fejlesztője nem csinál szabályos pointer-aritmetikát, hogy valami kövület disztribúciót használ, ahol még mindig 3-as (neadjIsten, 2.95-ös) GCC-t használnak. Pedig ennyire egyszerű a dolog (most a jhead csomag kapcsán futottam bele, s mivel vagy fél napot kerestem a szabályos megoldást, inkább leírom):

diff -Naur jhead-2.5-orig/exif.c jhead-2.5/exif.c
--- jhead-2.5-orig/exif.c 2006-01-08 18:13:16.000000000 +0100
+++ jhead-2.5/exif.c 2006-01-26 12:58:41.000000000 +0100
@@ -22,6 +22,7 @@
 #include <unistd.h>
 #include <errno.h>
 #include <limits.h>
+ #include <stdint.h>
 #endif

 #include "jhead.h"
@@ -329,7 +330,7 @@
 ByteCount -= s;
 if (ByteCount <= 0) break;
 printf(", ");
- ((char *)ValuePtr) += s;
+ ValuePtr = (void *)((uint8_t *)ValuePtr + s);
 }
 if (n >= 16) printf("...");
 }

Szövegesen: a byte-ra átalakított típusú mutató növelése helyett alakítsd szabványos byte-ra, növeld meg, és alakítsd vissza. (Az stdint.h csak az uint8_t miatt szükséges.)