Improve code to trim leading spaces from numeric output.
authorJohn Darrington <john@darrington.wattle.id.au>
Sat, 18 Jul 2009 10:29:35 +0000 (12:29 +0200)
committerJohn Darrington <john@darrington.wattle.id.au>
Sat, 18 Jul 2009 10:29:35 +0000 (12:29 +0200)
Ben Pfaff pointed out that the code to chomp the results
of formated doubles was no longer correct. This change
fixes that.

src/output/table.c

index 7460fce373186151a1d5e3aaff380426674593b7..04181e44f709b9ca1d2fcb9cab3abcce207b9595 100644 (file)
@@ -599,9 +599,7 @@ void
 tab_double (struct tab_table *table, int c, int r, unsigned char opt,
           double val, const struct fmt_spec *fmt)
 {
-  int w;
-  char *s, *cp;
-
+  struct substring ss;
   union value double_value ;
 
   assert (table != NULL);
@@ -631,16 +629,11 @@ tab_double (struct tab_table *table, int c, int r, unsigned char opt,
 #endif
 
   double_value.f = val;
-  s = data_out_pool (&double_value, LEGACY_NATIVE, fmt, table->container);
+  ss = ss_cstr (data_out_pool (&double_value, LEGACY_NATIVE, fmt, table->container));
 
-  cp = s;
-  while (isspace ((unsigned char) *cp) && cp < s + fmt->w)
-    {
-      cp++;
-    }
-  w = fmt->w - (cp - s);
-  
-  table->cc[c + r * table->cf] = ss_buffer (cp, w);
+  ss_ltrim (&ss, ss_cstr (" "));
+
+  table->cc[c + r * table->cf] = ss;
   table->ct[c + r * table->cf] = opt;
 }