merged from plib
[psensor.git] / src / lib / slog.c
index e35898c..99eb536 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2010-2013 jeanfi@gmail.com
+ * Copyright (C) 2010-2014 jeanfi@gmail.com
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
 
 #include "bool.h"
 #include "config.h"
-#include "log.h"
+#include <plog.h>
+#include "ptime.h"
 #include "slog.h"
 
 static FILE *file;
-static struct timeval stv;
 static double *last_values;
 static int period;
 static struct psensor **sensors;
 static pthread_mutex_t *sensors_mutex;
 static pthread_t thread;
+static time_t st;
 
 static const char *DEFAULT_FILENAME = "sensors.log";
 
+static char *time_to_str(time_t *t)
+{
+       struct tm lt;
+       char *str;
+
+       if (!localtime_r(t, &lt))
+               return NULL;
+
+       str = malloc(64);
+
+       if (strftime(str, 64, "%s", &lt)) {
+               return str;
+       } else {
+               free(str);
+               return NULL;
+       }
+}
+
 static char *get_default_path()
 {
        char *home, *path, *dir;
@@ -71,7 +90,7 @@ static char *get_default_path()
 
 static bool slog_open(const char *path, struct psensor **sensors)
 {
-       char *lpath;
+       char *lpath, *t;
 
        if (file) {
                log_err(_("Sensor log file already open."));
@@ -91,12 +110,10 @@ static bool slog_open(const char *path, struct psensor **sensors)
        if (!file)
                return 0;
 
-       if (gettimeofday(&stv, NULL)) {
-               log_err(_("gettimeofday failed."));
-               return 0;
-       }
+       st = time(NULL);
+       t = time_to_str(&st);
 
-       fprintf(file, "I,%ld,%s\n", stv.tv_sec, VERSION);
+       fprintf(file, "I,%s,%s\n", t, VERSION);
 
        while (*sensors) {
                fprintf(file, "S,%s,%x\n", (*sensors)->id,  (*sensors)->type);
@@ -131,7 +148,7 @@ static void slog_write_sensors(struct psensor **sensors)
                last_values = malloc(count * sizeof(double));
        }
 
-       fprintf(file, "%ld", tv.tv_sec - stv.tv_sec);
+       fprintf(file, "%ld", (long int)(tv.tv_sec - st));
        for (i = 0; i < count; i++) {
                v = psensor_get_current_value(sensors[i]);