]> git.saurik.com Git - apple/network_cmds.git/blame - unbound/compat/ctime_r.c
network_cmds-596.100.2.tar.gz
[apple/network_cmds.git] / unbound / compat / ctime_r.c
CommitLineData
89c4ed63
A
1/* taken from ldns 1.6.1 */
2#include "config.h"
3#ifdef HAVE_TIME_H
4#include <time.h>
5#endif
6#include "util/locks.h"
7
8/** the lock for ctime buffer */
9static lock_basic_t ctime_lock;
10/** has it been inited */
11static int ctime_r_init = 0;
12
13/** cleanup ctime_r on exit */
14static void
15ctime_r_cleanup(void)
16{
17 if(ctime_r_init) {
18 ctime_r_init = 0;
19 lock_basic_destroy(&ctime_lock);
20 }
21}
22
23char *ctime_r(const time_t *timep, char *buf)
24{
25 char* result;
26 if(!ctime_r_init) {
27 /* still small race where this init can be done twice,
28 * which is mostly harmless */
29 ctime_r_init = 1;
30 lock_basic_init(&ctime_lock);
31 atexit(&ctime_r_cleanup);
32 }
33 lock_basic_lock(&ctime_lock);
34 result = ctime(timep);
35 if(buf && result) {
36 if(strlen(result) > 10 && result[7]==' ' && result[8]=='0')
37 result[8]=' '; /* fix error in windows ctime */
38 strcpy(buf, result);
39 }
40 lock_basic_unlock(&ctime_lock);
41 return result;
42}