]> git.sur5r.net Git - tio/blob - src/misc.c
New upstream version 1.34
[tio] / src / misc.c
1 /*
2  * tio - a simple TTY terminal I/O tool
3  *
4  * Copyright (c) 2014-2022  Martin Lund
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19  * 02110-1301, USA.
20  */
21
22 #include "config.h"
23 #include <stdio.h>
24 #include <stdlib.h>
25 #include <string.h>
26 #include <time.h>
27 #include <sys/time.h>
28 #include "error.h"
29 #include "print.h"
30
31 // "YYYY-MM-DD hh:mm:ss.sss" (ISO-8601/RFC3339 format)
32 #define TIME_STRING_SIZE 24
33
34 char * current_time(void)
35 {
36     static char time_string[TIME_STRING_SIZE];
37     struct tm *tmp;
38
39     struct timeval tv;
40     gettimeofday(&tv,NULL);
41
42     tmp = localtime(&tv.tv_sec);
43     if (tmp == NULL)
44     {
45         error_printf("Retrieving local time failed");
46         exit(EXIT_FAILURE);
47     }
48
49     size_t len = strftime(time_string, sizeof(time_string), "%Y-%m-%d %H:%M:%S", tmp);
50     if (len) {
51         len = snprintf(time_string + len, TIME_STRING_SIZE - len, ".%03ld", (long)tv.tv_usec / 1000);
52     }
53
54     return (len < TIME_STRING_SIZE) ? time_string : NULL;
55 }
56
57 void delay(long ms)
58 {
59     struct timespec ts;
60
61     ts.tv_sec = ms / 1000;
62     ts.tv_nsec = (ms % 1000) * 1000000;
63
64     nanosleep(&ts, NULL);
65 }