Commit 3acb1725319250b434d45aecfc4f224485e5c7c0

Ryan C. Gordon 2021-11-07T12:26:39

stdlib: SDL_snprintf now adds decimal places for ("%f", 0.0). This patch was from @Markvy (thanks!). Fixes #4795.

diff --git a/src/stdlib/SDL_string.c b/src/stdlib/SDL_string.c
index 67b376e..8a49af5 100644
--- a/src/stdlib/SDL_string.c
+++ b/src/stdlib/SDL_string.c
@@ -1636,51 +1636,38 @@ SDL_PrintFloat(char *text, size_t maxlen, SDL_FormatInfo *info, double arg)
 {
     size_t length = 0;
 
-    if (arg) {
-        /* This isn't especially accurate, but hey, it's easy. :) */
-        unsigned long value;
+    /* This isn't especially accurate, but hey, it's easy. :) */
+    unsigned long value;
 
-        if (arg < 0) {
-            if (length < maxlen) {
-                text[length] = '-';
-            }
-            ++length;
-            arg = -arg;
-        } else if (info->force_sign) {
-            if (length < maxlen) {
-                text[length] = '+';
-            }
-            ++length;
-        }
-        value = (unsigned long) arg;
-        length += SDL_PrintUnsignedLong(TEXT_AND_LEN_ARGS, NULL, value);
-        arg -= value;
-        if (info->precision < 0) {
-            info->precision = 6;
+    if (arg < 0) {
+        if (length < maxlen) {
+            text[length] = '-';
         }
-        if (info->force_type || info->precision > 0) {
-            int mult = 10;
-            if (length < maxlen) {
-                text[length] = '.';
-            }
-            ++length;
-            while (info->precision-- > 0) {
-                value = (unsigned long) (arg * mult);
-                length += SDL_PrintUnsignedLong(TEXT_AND_LEN_ARGS, NULL, value);
-                arg -= (double) value / mult;
-                mult *= 10;
-            }
+        ++length;
+        arg = -arg;
+    } else if (info->force_sign) {
+        if (length < maxlen) {
+            text[length] = '+';
         }
-    } else {
+        ++length;
+    }
+    value = (unsigned long) arg;
+    length += SDL_PrintUnsignedLong(TEXT_AND_LEN_ARGS, NULL, value);
+    arg -= value;
+    if (info->precision < 0) {
+        info->precision = 6;
+    }
+    if (info->force_type || info->precision > 0) {
+        int mult = 10;
         if (length < maxlen) {
-            text[length] = '0';
+            text[length] = '.';
         }
         ++length;
-        if (info->force_type) {
-            if (length < maxlen) {
-                text[length] = '.';
-            }
-            ++length;
+        while (info->precision-- > 0) {
+            value = (unsigned long) (arg * mult);
+            length += SDL_PrintUnsignedLong(TEXT_AND_LEN_ARGS, NULL, value);
+            arg -= (double) value / mult;
+            mult *= 10;
         }
     }