Avoid unfounded warnings from GCC 7.2.
[pspp] / src / language / stats / autorecode.c
index 7c1b766750fb4319218c34a7ff8a30f47e9cc6fe..f6ea46241634e3d9b0d8e14db119e7bdadd532fe 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 1997-9, 2000, 2009, 2010, 2012, 2013 Free Software Foundation, Inc.
+   Copyright (C) 1997-9, 2000, 2009, 2010, 2012, 2013, 2014 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -16,6 +16,7 @@
 
 #include <config.h>
 
+#include <float.h>
 #include <stdlib.h>
 
 #include "data/case.h"
@@ -152,6 +153,7 @@ cmd_autorecode (struct lexer *lexer, struct dataset *ds)
   if (!parse_variables_const (lexer, dict, &src_vars, &n_srcs,
                               PV_NO_DUPLICATE | PV_NO_SCRATCH))
     goto error;
+  lex_match (lexer, T_SLASH);
   if (!lex_force_match_id (lexer, "INTO"))
     goto error;
   lex_match (lexer, T_EQUALS);
@@ -255,7 +257,7 @@ cmd_autorecode (struct lexer *lexer, struct dataset *ds)
 
         item = find_arc_item (spec, value, hash);
         if ( (item == NULL)
-            &&  
+            &&
             ( arc->blank_valid
                || val_type_from_width (spec->width) == VAL_NUMERIC
                || ! value_is_blank (value, width, dict))
@@ -310,7 +312,7 @@ cmd_autorecode (struct lexer *lexer, struct dataset *ds)
          value_init (&to_val, 0);
 
          items[j]->to = direction == ASCENDING ? j + 1 : n_items - j;
-         
+
          to_val.f = items[j]->to;
 
          /* Add value labels to the destination variable which indicate
@@ -323,8 +325,8 @@ cmd_autorecode (struct lexer *lexer, struct dataset *ds)
                                              str, src_width);
            }
          else
-           recoded_value = c_xasprintf ("%g", from->f);
-         
+           recoded_value = c_xasprintf ("%.*g", DBL_DIG + 1, from->f);
+
          /* Remove trailing whitespace */
           len = strlen (recoded_value);
           while (len > 0 && recoded_value[len - 1] == ' ')
@@ -380,7 +382,7 @@ arc_free (struct autorecode_pgm *arc)
       for (i = 0; i < arc->n_specs; i++)
        {
          struct arc_spec *spec = &arc->specs[i];
-         
+
          if (--spec->items->refcnt == 0)
            {
              hmap_destroy (&spec->items->ht);
@@ -393,7 +395,7 @@ arc_free (struct autorecode_pgm *arc)
          hmap_destroy (&arc->global_items->ht);
          free (arc->global_items);
        }
-      
+
       free (arc->specs);
       free (arc);
     }