Update of /cvsroot/srvx/services/src
In directory usw-pr-cvs1:/tmp/cvs-serv11489/src
Modified Files:
opserv.c
Log Message:
pull out "smart" time parsing logic for channel timestamps
don't skip the first two characters of a non-prefixed timestamp (e.g. "timestamp 0")
Index: opserv.c
===================================================================
RCS file: /cvsroot/srvx/services/src/opserv.c,v
retrieving revision 1.241
retrieving revision 1.242
diff -C2 -r1.241 -r1.242
*** opserv.c 4 Jul 2002 02:45:55 -0000 1.241
--- opserv.c 7 Jul 2002 22:47:32 -0000 1.242
***************
*** 4008,4011 ****
--- 4008,4018 ----
static unsigned int opserv_cdiscrim_search(cdiscrim_t discrim, cdiscrim_search_func dsf, void *data);
+ static time_t
+ smart_parse_time(const unsigned char *str) {
+ /* If an interval-style string is given, treat as time before now.
+ * If it's all digits, treat directly as a Unix timestamp. */
+ return str[strspn(str, "0123456789")] ? (now - ParseInterval(str)) : atoi(str);
+ }
+
static cdiscrim_t
opserv_cdiscrim_create(struct userNode *user, unsigned int argc, unsigned char *argv[])
***************
*** 4051,4068 ****
if (cmp[0] == '<') {
if (cmp[1] == '=') {
! discrim->max_ts = (!cmp[strspn(cmp+2, "0123456789")]) ? atoi(cmp+2) : (now - ParseInterval(cmp+2));
} else {
! discrim->max_ts = ((!cmp[strspn(cmp+1, "0123456789")]) ? atoi(cmp+1) : (now - ParseInterval(cmp+1))) - 1;
}
} else if (cmp[0] == '=') {
! discrim->min_ts = discrim->max_ts = (!cmp[strspn(cmp+1, "0123456789")]) ? atoi(cmp+1) : (now - ParseInterval(cmp+1));
} else if (cmp[0] == '>') {
if (cmp[1] == '=') {
! discrim->min_ts = (!cmp[strspn(cmp+2, "0123456789")]) ? atoi(cmp+2) : (now - ParseInterval(cmp+2));
} else {
! discrim->min_ts = ((!cmp[strspn(cmp+1, "0123456789")]) ? atoi(cmp+1) : (now - ParseInterval(cmp+1))) + 1;
}
} else {
! discrim->min_ts = (!cmp[strspn(cmp+2, "0123456789")]) ? atoi(cmp+2) : (now - ParseInterval(cmp+2));
}
} else if(!strcasecmp(argv[i], "limit")) {
--- 4058,4075 ----
if (cmp[0] == '<') {
if (cmp[1] == '=') {
! discrim->max_ts = smart_parse_time(cmp+2);
} else {
! discrim->max_ts = smart_parse_time(cmp+1)-1;
}
} else if (cmp[0] == '=') {
! discrim->min_ts = discrim->max_ts = smart_parse_time(cmp+1);
} else if (cmp[0] == '>') {
if (cmp[1] == '=') {
! discrim->min_ts = smart_parse_time(cmp+2);
} else {
! discrim->min_ts = smart_parse_time(cmp+1)+1;
}
} else {
! discrim->min_ts = smart_parse_time(cmp);
}
} else if(!strcasecmp(argv[i], "limit")) {
|