diff --git a/i3status.c b/i3status.c index e4a3e4c..d219b3c 100644 --- a/i3status.c +++ b/i3status.c @@ -322,6 +322,10 @@ int main(int argc, char *argv[]) { int interval = cfg_getint(cfg_general, "interval"); while (1) { + time_t current_time = time(NULL); + struct tm *current_tm = NULL; + if (current_time != (time_t) -1) + current_tm = localtime(¤t_time); for (j = 0; j < cfg_size(cfg, "order"); j++) { if (j > 0) print_seperator(); @@ -350,7 +354,7 @@ int main(int argc, char *argv[]) { print_load(cfg_getstr(sec, "format")); CASE_SEC("time") - print_time(cfg_getstr(sec, "format")); + print_time(cfg_getstr(sec, "format"), current_tm); CASE_SEC("ddate") print_ddate(cfg_getstr(sec, "format")); @@ -371,9 +375,9 @@ int main(int argc, char *argv[]) { * we don’t use sleep(interval) but we sleep until the next * second (with microsecond precision) plus (interval-1) * seconds. */ - struct timeval current_time; - gettimeofday(¤t_time, NULL); - struct timespec ts = {interval - 1, (10e5 - current_time.tv_usec) * 1000}; + struct timeval current_timeval; + gettimeofday(¤t_timeval, NULL); + struct timespec ts = {interval - 1, (10e5 - current_timeval.tv_usec) * 1000}; nanosleep(&ts, NULL); } } diff --git a/include/i3status.h b/include/i3status.h index 1bcf86a..501340a 100644 --- a/include/i3status.h +++ b/include/i3status.h @@ -5,6 +5,7 @@ enum { O_DZEN2, O_XMOBAR, O_NONE } output_format; #include #include +#include #define BEGINS_WITH(haystack, needle) (strncmp(haystack, needle, strlen(needle)) == 0) #define max(a, b) ((a) > (b) ? (a) : (b)) @@ -61,7 +62,7 @@ char *endcolor() __attribute__ ((pure)); void print_ipv6_info(const char *format_up, const char *format_down); void print_disk_info(const char *path, const char *format); void print_battery_info(int number, const char *format, bool last_full_capacity); -void print_time(const char *format); +void print_time(const char *format, struct tm *current_tm); void print_ddate(const char *format); const char *get_ip_addr(); void print_wireless_info(const char *interface, const char *format_up, const char *format_down); diff --git a/src/print_time.c b/src/print_time.c index 2cf2ab3..9c9df90 100644 --- a/src/print_time.c +++ b/src/print_time.c @@ -3,14 +3,9 @@ #include #include -void print_time(const char *format) { +void print_time(const char *format, struct tm *current_tm) { static char part[512]; /* Get date & time */ - time_t current_time = time(NULL); - if (current_time == (time_t) -1) { - return; - } - struct tm *current_tm = localtime(¤t_time); if (current_tm == NULL) { return; }