]> git.itanic.dy.fi Git - rrdd/blob - onewire_parser.c
Add missing headers
[rrdd] / onewire_parser.c
1 #include <stdio.h>
2 #include <ownetapi.h>
3
4 #include "parser.h"
5 #include "debug.h"
6 #include "string.h"
7
8 int onewire_parser(char *rrd_data, const char **parser_data)
9 {
10         OWNET_HANDLE h;
11         const char *server_addr;
12         char buf[24], *tmp;
13         int i = 1, ret;
14         int max_str = RRD_DATA_MAX_LEN;
15
16         if (!parser_data) {
17                 pr_err("No parser data available\n");
18                 return -1;
19         }
20
21         server_addr = parser_data[0];
22
23         if (!server_addr) {
24                 pr_err("Server address not specified\n");
25                 return -1;
26         }
27
28         h = OWNET_init(server_addr);
29         if (h < 0) {
30                 pr_err("Failed to connect to server %s\n", server_addr);
31                 return -1;
32         }
33
34         while (parser_data[i]) {
35                 if (!strcmp("U", parser_data[i])) {
36 undefined:
37                         ret = snprintf(rrd_data, max_str, "U");
38                         max_str -= ret;
39                         rrd_data += ret;
40                         goto next;
41                 }
42
43                 pr_info("Reading data for entry %s\n", parser_data[i]);
44                 ret = OWNET_read(h, parser_data[i], &tmp);
45                 if (ret < 0) {
46                         pr_err("Failed to read entry %s\n", parser_data[i]);
47                         goto undefined;
48                 }
49
50                 /* The data from OWNET_read appears to not be NULL terminated */
51                 memcpy(buf, tmp, MIN(ret, sizeof(buf) -1));
52                 free(tmp);
53                 buf[ret] = 0;
54
55                 ret = snprintf(rrd_data, max_str, "%s", buf);
56                 max_str -= ret;
57                 rrd_data += ret;
58
59 next:
60                 i++;
61                 if (!parser_data[i])
62                         break;
63
64                 ret = snprintf(rrd_data, max_str, ":");
65                 max_str -= ret;
66                 rrd_data += ret;
67         }
68         rrd_data = 0;
69
70         OWNET_finish();
71         return 0;
72 }