diff options
author | Gerrit Pape <pape@smarden.org> | 2007-12-23 21:24:37 +0800 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2007-12-23 21:24:37 +0800 |
commit | 469fad86703e8dc8177dc9f1a768571105292344 (patch) | |
tree | b1a9ba02237d1d960b22ef7e2b24e0a7c1f67687 /src | |
parent | [BUILTIN] Add set +o support (diff) | |
download | dash-469fad86703e8dc8177dc9f1a768571105292344.tar.gz dash-469fad86703e8dc8177dc9f1a768571105292344.zip |
[ARITH] If imaxdiv() isn't available, use / and % operators
Although in posix, imaxdiv() isn't implemented on Debian/alpha, causing dash to fail to build. So use / and % operators if imaxdiv() isn't available. http://bugs.debian.org/456398 Signed-off-by: Gerrit Pape <pape@smarden.org> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to '')
-rw-r--r-- | src/arith_yacc.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/arith_yacc.c b/src/arith_yacc.c index e473594..f4857fe 100644 --- a/src/arith_yacc.c +++ b/src/arith_yacc.c @@ -88,7 +88,9 @@ static inline int higher_prec(int op1, int op2) static intmax_t do_binop(int op, intmax_t a, intmax_t b) { +#ifdef HAVE_IMAXDIV imaxdiv_t div; +#endif switch (op) { default: @@ -96,8 +98,12 @@ static intmax_t do_binop(int op, intmax_t a, intmax_t b) case ARITH_DIV: if (!b) yyerror("division by zero"); +#ifdef HAVE_IMAXDIV div = imaxdiv(a, b); return op == ARITH_REM ? div.rem : div.quot; +#else + return op == ARITH_REM ? a % b : a / b; +#endif case ARITH_MUL: return a * b; case ARITH_ADD: |