index 95cdda3fb3ac83bd617e156ef195110923645b2e..c5cbcd2dffae485242236e9bd7793dd45054a604 100644 (file)
end_ptr = NULL;
temp = strtol(str_ptr, &end_ptr, 0);
- xmlFree(str_ptr);
if (str_ptr == end_ptr) {
rrd_set_error("get_long_from_node: Cannot parse buffer as long: %s",
str_ptr);
+ xmlFree(str_ptr);
return (-1);
}
-
+ xmlFree(str_ptr);
*value = temp;
return (0);
end_ptr = NULL;
temp = strtoul(str_ptr, &end_ptr, 0);
- xmlFree(str_ptr);
if (str_ptr == end_ptr) {
rrd_set_error("get_ulong_from_node: Cannot parse buffer as unsigned long: %s",
str_ptr);
+ xmlFree(str_ptr);
return (-1);
}
-
+
+ xmlFree(str_ptr);
*value = temp;
return (0);
} /* int get_ulong_from_node */
+
+#ifdef WIN32
+/* Gross Hack Alert */
+#if _MSC_VER < 1300
+#define strtoll(p, e, b) ((*(e) = (char*)(p) + (((b) == 10) ? strspn((p), "0123456789") : 0)), _atoi64(p))
+#else
+#define strtoll(p, e, b) _strtoi64(p, e, b)
+#endif
+#endif
+
+static int get_llong_from_node(
+ xmlDoc * doc,
+ xmlNode * node,
+ long long *value)
+{
+ long long temp;
+ char *str_ptr;
+ char *end_ptr;
+
+ str_ptr = (char *) xmlNodeListGetString(doc, node->xmlChildrenNode, 1);
+ if (str_ptr == NULL) {
+ rrd_set_error("get_llong_from_node: xmlNodeListGetString failed.");
+ return (-1);
+ }
+
+ end_ptr = NULL;
+ temp = strtoll(str_ptr, &end_ptr, 10);
+
+ if (str_ptr == end_ptr) {
+ rrd_set_error("get_llong_from_node: Cannot parse buffer as unsigned long long: %s",
+ str_ptr);
+ xmlFree(str_ptr);
+ return (-1);
+ }
+ xmlFree(str_ptr);
+ *value = temp;
+
+ return (0);
+} /* int get_llong_from_node */
+
static int get_double_from_node(
xmlDoc * doc,
xmlNode * node,
end_ptr = NULL;
temp = strtod(str_ptr, &end_ptr);
- xmlFree(str_ptr);
if (str_ptr == end_ptr) {
rrd_set_error
("get_double_from_node: Cannot parse buffer as double: %s",
str_ptr);
+ xmlFree(str_ptr);
return (-1);
}
-
+ xmlFree(str_ptr);
*value = temp;
return (0);
else if (xmlStrcmp(child->name, (const xmlChar *) "step") == 0)
status = get_ulong_from_node(doc, child,
&rrd->stat_head->pdp_step);
- else if (xmlStrcmp(child->name, (const xmlChar *) "lastupdate") == 0)
- status = get_long_from_node(doc, child,
- &rrd->live_head->last_up);
+ else if (xmlStrcmp(child->name, (const xmlChar *) "lastupdate") == 0) {
+ if (sizeof(time_t) == sizeof(long)) {
+ status = get_long_from_node(doc, child, (long *)&rrd->live_head->last_up);
+ }
+ else { if (sizeof(time_t) == sizeof(long long)) {
+ status = get_llong_from_node(doc, child, (long long *)&rrd->live_head->last_up);
+ }
+ else {
+ rrd_set_error("can't convert to time_t ...", child->name);
+ status = -1;
+ }
+ }
+ }
else if (xmlStrcmp(child->name, (const xmlChar *) "ds") == 0)
status = parse_tag_ds(doc, child, rrd);
else if (xmlStrcmp(child->name, (const xmlChar *) "rra") == 0)