]> git.itanic.dy.fi Git - rrdd/commitdiff
Add primitive error detection to digitemp parser
authorTimo Kokkonen <kaapeli@ee.oulu.fi>
Wed, 21 May 2008 17:11:07 +0000 (20:11 +0300)
committerTimo Kokkonen <kaapeli@ee.oulu.fi>
Wed, 21 May 2008 17:11:07 +0000 (20:11 +0300)
parser.c

index 3e54071832ca93438517b54a05ef8565126f62cc..50d70cf811ebcabae98443ac4d2cfa54e907968c 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -112,9 +112,9 @@ int digitemp_parser(char *data)
        const char digitemp_cmd[] = "/usr/bin/digitemp";
        char *const digitemp_args[] = { "", "-o2", "-a", "-q", 0 };
        FILE *readf;
-       int pid;
-       char buf[1024], *bptr = buf;
-       float t1, t2, t3;
+       int pid, ret, error;
+       float t1 = 0, t2 = 0, t3 = 0;
+       char buf[1024];
 
        pid = run_piped_stream(digitemp_cmd, digitemp_args, 0, &readf, 0);
        if (pid < 0) {
@@ -123,24 +123,22 @@ int digitemp_parser(char *data)
                return -1;
        }
 
-       fgets(buf, 1024, readf);
+       ret = fscanf(readf, "%f %f %f", t1, t2, t3);
 
-/*
-       get_word(bptr, &bptr, t1, 16);
-       *bptr++ = 0;
-       get_word(bptr, &bptr, t2, 16);
-       *bptr++ = 0;
-       get_word(bptr, &bptr, t3, 16);
-       *bptr++ = 0;
-*/
-       t1 = dec_to_float(bptr, &bptr);
-       t2 = dec_to_float(bptr, &bptr);
-       t3 = dec_to_float(bptr, &bptr);
+       if (ret != 3) {
+               error = errno;
+               pr_err("Failed to parse digitemp output: %s\n",
+                      strerror(error));
+               sprintf(data, "U:U");
+               return 1;
+       }
 
        t2 += 2.16;
        t3 += -0.44;
 
+       /* Read whatever the process might be still printing out */
        while (fgets(buf, 1024, readf));
+
        harvest_zombies(pid);
        sprintf(data, "%.2f:%.2f", t3, t2);
        return 0;