diff --git a/sys/include/sat.h b/sys/include/sat.h index 6251b43ae..416241f59 100644 --- a/sys/include/sat.h +++ b/sys/include/sat.h @@ -106,3 +106,4 @@ int satval(SATSolve *, int); void satfree(SATSolve *); void satreset(SATSolve *); int satget(SATSolve *, int, int *, int); +void satvafix(va_list); diff --git a/sys/src/cmd/forp/logic.c b/sys/src/cmd/forp/logic.c index b266e3bca..542065074 100644 --- a/sys/src/cmd/forp/logic.c +++ b/sys/src/cmd/forp/logic.c @@ -46,6 +46,7 @@ satandv(SATSolve *sat, ...) va_list va; va_start(va, sat); + satvafix(va); r = satand1(sat, (int*)va, -1); va_end(va); return r; @@ -90,6 +91,7 @@ satorv(SATSolve *sat, ...) int r; va_start(va, sat); + satvafix(va); r = sator1(sat, (int*)va, -1); va_end(va); return r; @@ -267,6 +269,7 @@ satlogicv(SATSolve *sat, u64int op, ...) int r; va_start(va, op); + satvafix(va); r = satlogic1(sat, op, (int*)va, -1); va_end(va); return r; diff --git a/sys/src/libsat/satadd.c b/sys/src/libsat/satadd.c index 3a0cf0c3a..e10dd8346 100644 --- a/sys/src/libsat/satadd.c +++ b/sys/src/libsat/satadd.c @@ -217,6 +217,21 @@ satadd1(SATSolve *s, int *a, int n) return s; } +void +satvafix(va_list va) +{ + int *d; + uintptr *s; + + if(sizeof(int)==sizeof(uintptr)) return; + d = (int *) va; + s = (uintptr *) va; + do + *d++ = *s; + while((int)*s++ != 0); + +} + SATSolve * sataddv(SATSolve *s, ...) { @@ -224,6 +239,7 @@ sataddv(SATSolve *s, ...) va_start(va, s); /* horrible hack */ + satvafix(va); s = satadd1(s, (int*)va, -1); va_end(va); return s; diff --git a/sys/src/libsat/satrange.c b/sys/src/libsat/satrange.c index 76caa5713..c202a8fc1 100644 --- a/sys/src/libsat/satrange.c +++ b/sys/src/libsat/satrange.c @@ -62,6 +62,7 @@ satrangev(SATSolve *s, int min, int max, ...) va_start(va, max); /* horrible hack */ + satvafix(va); s = satrange1(s, (int*)va, -1, min, max); va_end(va); return s;