mescc: Fix itoa for negative numbers, using workaround.
authorJan Nieuwenhuizen <janneke@gnu.org>
Wed, 3 May 2017 21:01:49 +0000 (23:01 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Wed, 3 May 2017 21:01:49 +0000 (23:01 +0200)
* module/mes/libc.mes (itoa): Avoid `sign = x < 0;' FIXME, todo.
* scaffold/t.c (test): Test it.

module/mes/libc.mes
scaffold/t.c

index a7b302ed047404add50a390052f4e46d0199fe7c..abba827b488bcc70f4d4b18584d37b4d0d6c399a 100644 (file)
@@ -229,19 +229,19 @@ itoa (int x)
   p += 9;
   *p-- = 0;
 
-  //int sign = x < 0;
-  int sign;
-  sign = x < 0;
+  //int sign = x < 0; // FIXME
+  int sign = 0;
+  if (x < 0) sign = 1;
   if (sign)
     x = -x;
-  
+
   do
      {
        *p-- = '0' + (x % 10);
        x = x / 10;
      } while (x);
 
-  if (sign)
+  if (sign && *(p + 1) != '0')
     *p-- = '-';
 
   return p+1;
index 363ab8f3a1d717ab51c3056f8d73034aa9fc6803..80917998b19109231556e8d9ef3a6171620a534d 100644 (file)
@@ -895,6 +895,18 @@ test (char *p)
   puts ("t: itoa (33) == \"33\"\n");
   if (strcmp (itoa (33), "33")) return 1;
 
+  puts ("strcmp (itoa (-1), \"-1\")\n");
+  if (strcmp (itoa (-1), "-1")) return 1;
+
+  char *fixme_globals;
+  fixme_globals = "0";
+  fixme_globals = "1";
+  puts ("strcmp (itoa (0), \"0\")\n");
+  if (strcmp (itoa (0), "0")) return 1;
+
+  puts ("strcmp (itoa (1), \"1\")\n");
+  if (strcmp (itoa (1), "1")) return 1;
+
   return struct_test ();
 }
 #endif