9 int parse_opts(const char *str, char *ow_path, size_t pathlen, double *offset)
12 const char *start_str = str;
13 const char offset_str[] = "offset=";
19 * Skip the onewire path entry. Options begin after the first
26 /* Copy the onewire path without options */
27 strncpy(ow_path, start_str, pathlen);
28 ow_path[str - start_str] = '\0';
30 /* Get the next non-space, which is where the argument begins */
35 if (strncmp(str, offset_str, sizeof(offset_str) - 1))
37 str += sizeof(offset_str) - 1;
39 *offset = strtod(str, &endptr);
47 int onewire_parser(char *rrd_data, const char **parser_data)
50 const char *server_addr;
53 int max_str = RRD_DATA_MAX_LEN;
56 pr_err("No parser data available\n");
60 server_addr = parser_data[0];
63 pr_err("Server address not specified\n");
67 h = OWNET_init(server_addr);
69 pr_err("Failed to connect to server %s\n", server_addr);
73 while (parser_data[i]) {
74 double offset = 0, data;
78 if (!strcmp("U", parser_data[i])) {
80 ret = snprintf(rrd_data, max_str, "U");
86 parse_opts(parser_data[i], ow_path, sizeof(ow_path), &offset);
88 pr_info("Reading data for entry %s with offset of %.2f\n",
90 ret = OWNET_read(h, ow_path, &tmp);
92 pr_err("Failed to read entry %s\n", parser_data[i]);
96 /* The data from OWNET_read appears to not be NULL terminated */
97 memcpy(buf, tmp, MIN(ret, sizeof(buf) -1));
101 data = strtod(buf, &endptr);
104 pr_err("Failed to parse data %s\n", buf);
110 ret = snprintf(rrd_data, max_str, "%f", data);
119 ret = snprintf(rrd_data, max_str, ":");