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.)