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]

Reply via email to