projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
sys-file-reader: Refactor to clean up character encoding support.
[pspp]
/
src
/
language
/
expressions
/
helpers.c
diff --git
a/src/language/expressions/helpers.c
b/src/language/expressions/helpers.c
index 17fc3182253369ef9177a29f186b04355cc15639..7c3371f5db97eb9daf3455c943014a035d178408 100644
(file)
--- a/
src/language/expressions/helpers.c
+++ b/
src/language/expressions/helpers.c
@@
-1,5
+1,5
@@
/* PSPP - a program for statistical analysis.
/* PSPP - a program for statistical analysis.
- Copyright (C) 2008 Free Software Foundation, Inc.
+ Copyright (C) 2008
, 2010, 2011
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
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
@@
-15,29
+15,17
@@
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include <config.h>
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include <config.h>
-#include "helpers.h"
-#include <gsl/gsl_roots.h>
-#include <gsl/gsl_sf.h>
-#include <libpspp/assertion.h>
-#include <libpspp/pool.h>
-#include "private.h"
-const struct substring empty_string = {NULL, 0};
+#include "language/expressions/helpers.h"
-static void
-expr_error (void *aux UNUSED, const char *format, ...)
-{
- struct msg m;
- va_list args;
+#include <gsl/gsl_roots.h>
+#include <gsl/gsl_sf.h>
- m.category = MSG_C_SYNTAX;
- m.severity = MSG_S_ERROR;
- va_start (args, format);
- m.text = xvasprintf (format, args);
- va_end (args);
+#include "language/expressions/private.h"
+#include "libpspp/assertion.h"
+#include "libpspp/pool.h"
- msg_emit (&m);
-}
+const struct substring empty_string = {NULL, 0};
double
expr_ymd_to_ofs (double year, double month, double day)
double
expr_ymd_to_ofs (double year, double month, double day)
@@
-45,6
+33,8
@@
expr_ymd_to_ofs (double year, double month, double day)
int y = year;
int m = month;
int d = day;
int y = year;
int m = month;
int d = day;
+ char *error;
+ double ofs;
if (y != year || m != month || d != day)
{
if (y != year || m != month || d != day)
{
@@
-53,7
+43,13
@@
expr_ymd_to_ofs (double year, double month, double day)
return SYSMIS;
}
return SYSMIS;
}
- return calendar_gregorian_to_offset (y, m, d, expr_error, NULL);
+ ofs = calendar_gregorian_to_offset (y, m, d, &error);
+ if (error != NULL)
+ {
+ msg (SE, "%s", error);
+ free (error);
+ }
+ return ofs;
}
double
}
double
@@
-344,6
+340,7
@@
add_months (double date, int months, enum date_sum_method method)
{
int y, m, d, yd;
double output;
{
int y, m, d, yd;
double output;
+ char *error;
calendar_offset_to_gregorian (date / DAY_S, &y, &m, &d, &yd);
y += months / 12;
calendar_offset_to_gregorian (date / DAY_S, &y, &m, &d, &yd);
y += months / 12;
@@
-363,9
+360,14
@@
add_months (double date, int months, enum date_sum_method method)
if (method == SUM_CLOSEST && d > calendar_days_in_month (y, m))
d = calendar_days_in_month (y, m);
if (method == SUM_CLOSEST && d > calendar_days_in_month (y, m))
d = calendar_days_in_month (y, m);
- output = calendar_gregorian_to_offset (y, m, d,
expr_error, NULL
);
+ output = calendar_gregorian_to_offset (y, m, d,
&error
);
if (output != SYSMIS)
output = (output * DAY_S) + fmod (date, DAY_S);
if (output != SYSMIS)
output = (output * DAY_S) + fmod (date, DAY_S);
+ else
+ {
+ msg (SE, "%s", error);
+ free (error);
+ }
return output;
}
return output;
}