Explorar o código

LibC: Make div() and ldiv() behave according to the C standard

Andreas Kling %!s(int64=5) %!d(string=hai) anos
pai
achega
0b59c0d0dc
Modificáronse 1 ficheiros con 10 adicións e 0 borrados
  1. 10 0
      Libraries/LibC/stdlib.cpp

+ 10 - 0
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;
 }