csv-file-writer: Fix implementation of decimal point option. 20121228030502/pspp 20121229030503/pspp 20121230030503/pspp 20121231030505/pspp
authorBen Pfaff <blp@cs.stanford.edu>
Fri, 28 Dec 2012 05:17:43 +0000 (21:17 -0800)
committerBen Pfaff <blp@cs.stanford.edu>
Fri, 28 Dec 2012 05:17:43 +0000 (21:17 -0800)
Now that pspp sets LC_NUMERIC, dtoastr() might yield either '.' or ',' as
the decimal point, so the CSV writer needs to check for either one and
replace it by the decimal point requested by the caller.

Reported by John Darrington.

src/data/csv-file-writer.c

index cbc617b3d2a2634e77fe35ac1d02be2039308591..4ebff0bd001288e28ddf6d085cbc086632b72e88 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2010, 2011 Free Software Foundation, Inc.
+   Copyright (C) 2010, 2011, 2012 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
@@ -281,6 +281,7 @@ csv_write_var__ (struct csv_writer *w, const struct csv_var *cv,
   else
     {
       char s[MAX (DBL_STRLEN_BOUND, 128)];
+      char *cp;
 
       switch (cv->format.type)
         {
@@ -307,12 +308,9 @@ csv_write_var__ (struct csv_writer *w, const struct csv_var *cv,
         case FMT_WKDAY:
         case FMT_MONTH:
           dtoastr (s, sizeof s, 0, 0, value->f);
-          if (w->opts.decimal != '.')
-            {
-              char *cp = strchr (s, '.');
-              if (cp != NULL)
-                *cp = w->opts.decimal;
-            }
+          cp = strpbrk (s, ".,");
+          if (cp != NULL)
+            *cp = w->opts.decimal;
           break;
 
         case FMT_DATE: