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 <[EMAIL PROTECTED]> --- On Thu, Dec 20, 2007 at 10:04:28PM +0800, Herbert Xu wrote: > Thanks for the patch. I'd prefer a version that provides an > implementation of imaxdiv if it doesn't exist. It's how we > deal with other functions that might be missing, e.g. due to > us using uclibc. Ok, this patch checks for imaxdiv() and uses /, % if it isn't available. configure.ac | 5 +++-- src/arith_yacc.c | 6 ++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index ccc4ac1..4d739c2 100644 --- a/configure.ac +++ b/configure.ac @@ -33,8 +33,9 @@ dnl Checks for libraries. dnl Checks for header files. dnl Checks for library functions. -AC_CHECK_FUNCS(bsearch getpwnam getrlimit isalpha killpg mempcpy sigsetmask \ - stpcpy strchrnul strsignal strtod strtoimax strtoumax sysconf) +AC_CHECK_FUNCS(bsearch getpwnam getrlimit imaxdiv isalpha killpg mempcpy \ + sigsetmask stpcpy strchrnul strsignal strtod strtoimax \ + strtoumax sysconf) if test "$enable_fnmatch" = yes; then use_fnmatch= 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: -- 1.5.3.7 -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]