From 0b59c0d0dc571fd54d4f02e084ebcdaedcad7dcb Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 27 Sep 2019 10:03:26 +0200 Subject: [PATCH] LibC: Make div() and ldiv() behave according to the C standard --- Libraries/LibC/stdlib.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Libraries/LibC/stdlib.cpp b/Libraries/LibC/stdlib.cpp index dcade0b816..d8828d368f 100644 --- a/Libraries/LibC/stdlib.cpp +++ b/Libraries/LibC/stdlib.cpp @@ -348,6 +348,11 @@ div_t div(int numerator, int denominator) div_t result; result.quot = numerator / denominator; result.rem = numerator % denominator; + + if (numerator >= 0 && result.rem < 0) { + result.quot++; + result.rem -= denominator; + } return result; } @@ -356,6 +361,11 @@ ldiv_t ldiv(long numerator, long denominator) ldiv_t result; result.quot = numerator / denominator; result.rem = numerator % denominator; + + if (numerator >= 0 && result.rem < 0) { + result.quot++; + result.rem -= denominator; + } return result; }