Support arbitrary parameter passing to sensor function
[khatus.git] / x5 / khatus_sensor_time.c
index ad170ef..cc47677 100644 (file)
@@ -10,6 +10,7 @@
 #include <unistd.h>
 
 #include "khatus_lib_log.h"
+#include "khatus_lib_sensor.h"
 #include "khatus_lib_time.h"
 
 #define usage(...) {print_usage(); fprintf(stderr, "Error:\n    " __VA_ARGS__); exit(EXIT_FAILURE);}
@@ -76,54 +77,36 @@ opt_parse(int argc, char **argv)
                usage("No filename was provided\n");
 }
 
+int
+get_time(char *buf, char *fmt)
+{
+       time_t t;
+
+       t = time(NULL);
+       strftime(buf, MAX_LEN, fmt, localtime(&t));
+       return strlen(buf);
+}
+
 int
 main(int argc, char **argv)
 {
        argv0 = argv[0];
 
-       time_t t;
        struct timespec ti;
        char buf[MAX_LEN];
 
-       int fd = -1;
-
-       int n = 0;  /* written */
-       int r = 0;  /* remaining */
-       int i = 0;  /* buffer position */
-
        opt_parse(argc, argv);
 
-       signal(SIGPIPE, SIG_IGN);  /* Handling manually */
+       signal(SIGPIPE, SIG_IGN);  /* Handled in loop */
 
        memset(buf, '\0', MAX_LEN);
        ti = timespec_of_float(opt_interval);
-       for (;;) {
-               debug("openning \"%s\"\n", fifo_name);
-               fd = open(fifo_name, O_WRONLY);
-               if (fd < 0)
-                       fatal("Failed to open FIFO file: \"%s\". Error: %s\n",
-                           fifo_name,
-                           strerror(errno));
-               debug("openned. fd: %d\n", fd);
-               t = time(NULL);
-               strftime(buf, MAX_LEN, opt_fmt, localtime(&t));
-               r = strlen(buf);
-               buf[r] = END_OF_MESSAGE;
-               for (i = 0; (n = write(fd, buf + i++, 1)) && r; r--)
-                       ;
-               if (n < 0)
-                       fatal("Failed to write to %s. Err num: %d, Err msg: %s\n",
-                           fifo_name,
-                           errno,
-                           strerror(errno));
-               if (close(fd) < 0)
-                       fatal("Failed to close %s. Err num: %d, Err msg: %s\n",
-                           fifo_name,
-                           errno,
-                           strerror(errno));
-               fd = -1;
-               debug("closed. fd: %d\n", fd);
-               snooze(&ti);
-       }
+       loop(
+           &ti,
+           fifo_name,
+           buf,
+           (SENSOR_FUN_T)    get_time,
+           (SENSOR_PARAMS_T) opt_fmt
+       );
        return EXIT_SUCCESS;
 }
This page took 0.029844 seconds and 4 git commands to generate.