diff options
author | aiju <devnull@localhost> | 2018-04-24 12:20:07 +0100 |
---|---|---|
committer | aiju <devnull@localhost> | 2018-04-24 12:20:07 +0100 |
commit | 29f03ba4e74ec58b87e3e6470aadfb58ee804f48 (patch) | |
tree | df596c512fd8add63ae327c5fd12b1f4f766eb36 | |
parent | 8666ec6b555ec21e8c81089148527913febc7e53 (diff) |
libsat, forp: fix va_list hack on amd64
-rw-r--r-- | sys/include/sat.h | 1 | ||||
-rw-r--r-- | sys/src/cmd/forp/logic.c | 3 | ||||
-rw-r--r-- | sys/src/libsat/satadd.c | 16 | ||||
-rw-r--r-- | sys/src/libsat/satrange.c | 1 |
4 files changed, 21 insertions, 0 deletions
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; |