* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+/* NOTE: nothing in here is thread-safe!!!! Not even the localtime
+ calls ... */
+
/*
* The BNF-like specification of the time syntax parsed is below:
*
/*
- * expect() gets a token and complins if it's not the token we want
+ * expect2() gets a token and complins if it's not the token we want
*/
static char *
-expect(int desired, char *complain_fmt, ...)
+expect2(int desired, char *complain_fmt, ...)
{
va_list ap;
va_start( ap, complain_fmt );
va_end( ap );
return TIME_OK;
-} /* expect */
+} /* expect2 */
/*
* It allso applies those m-guessing euristics.
*/
static char *
-plus_minus(struct time_value *ptv, int doop)
+plus_minus(struct rrd_time_value *ptv, int doop)
{
static int op = PLUS;
static int prev_multiplier = -1;
if( doop >= 0 )
{
op = doop;
- try(expect(NUMBER,"There should be number after '%c'", op == PLUS ? '+' : '-'));
+ try(expect2(NUMBER,"There should be number after '%c'", op == PLUS ? '+' : '-'));
prev_multiplier = -1; /* reset months-minutes guessing mechanics */
}
/* if doop is < 0 then we repeat the previous op
* tod() computes the time of day (TIME-OF-DAY-SPEC)
*/
static char *
-tod(struct time_value *ptv)
+tod(struct rrd_time_value *ptv)
{
int hour, minute = 0;
int tlen;
return TIME_OK;
}
if (sc_tokid == COLON ) {
- try(expect(NUMBER,
+ try(expect2(NUMBER,
"Parsing HH:MM syntax, expecting MM as number, got none"));
minute = atoi(sc_token);
if (minute > 59) {
* assign_date() assigns a date, adjusting year as appropriate
*/
static char *
-assign_date(struct time_value *ptv, long mday, long mon, long year)
+assign_date(struct rrd_time_value *ptv, long mday, long mon, long year)
{
if (year > 138) {
if (year > 1970)
* day() picks apart DAY-SPEC-[12]
*/
static char *
-day(struct time_value *ptv)
+day(struct rrd_time_value *ptv)
{
long mday=0, wday, mon, year = ptv->tm.tm_year;
int tlen;
/* do month mday [year]
*/
mon = (sc_tokid-JAN);
- try(expect(NUMBER,
+ try(expect2(NUMBER,
"the day of the month should follow month name"));
mday = atol(sc_token);
if (token() == NUMBER) {
*/
wday = (sc_tokid-SUN);
ptv->tm.tm_mday += (wday - ptv->tm.tm_wday);
+ token();
break;
/*
mday = ptv->tm.tm_mday;
if (mon <= 31 && (sc_tokid == SLASH || sc_tokid == DOT)) {
int sep;
sep = sc_tokid;
- try(expect(NUMBER,"there should be %s number after '%c'",
+ try(expect2(NUMBER,"there should be %s number after '%c'",
sep == DOT ? "month" : "day", sep == DOT ? '.' : '/'));
mday = atol(sc_token);
if (token() == sep) {
- try(expect(NUMBER,"there should be year number after '%c'",
+ try(expect2(NUMBER,"there should be year number after '%c'",
sep == DOT ? '.' : '/'));
year = atol(sc_token);
token();
/*
* parsetime() is the external interface that takes tspec, parses
- * it and puts the result in the time_value structure *ptv.
+ * it and puts the result in the rrd_time_value structure *ptv.
* It can return either absolute times (these are ensured to be
* correct) or relative time references that are expected to be
* added to some absolute time value and then normalized by
* the pointer to the error message in the case of problems
*/
char *
-parsetime(char *tspec, struct time_value *ptv)
+parsetime(char *tspec, struct rrd_time_value *ptv)
{
time_t now = time(NULL);
int hr = 0;
/* Only absolute time specifications below */
case NUMBER:
try(tod(ptv))
- if (sc_tokid != NUMBER) break;
+ try(day(ptv))
+ break;
/* fix month parsing */
case JAN: case FEB: case MAR: case APR: case MAY: case JUN:
case JUL: case AUG: case SEP: case OCT: case NOV: case DEC:
} /* parsetime */
-int proc_start_end (struct time_value *start_tv,
- struct time_value *end_tv,
+int proc_start_end (struct rrd_time_value *start_tv,
+ struct rrd_time_value *end_tv,
time_t *start,
time_t *end){
if (start_tv->type == RELATIVE_TO_END_TIME && /* same as the line above */