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