summaryrefslogtreecommitdiff
path: root/toxcore/util.c
diff options
context:
space:
mode:
authormannol <eniz_vukovic@hotmail.com>2014-05-20 00:10:40 +0200
committermannol <eniz_vukovic@hotmail.com>2014-05-20 00:10:40 +0200
commita1f2a18ae4146ebea11fbd3f83df803b715813da (patch)
tree63b29cf3770a65e94e3e5d0fcd53b33f2a654585 /toxcore/util.c
parentea96c1758ae42c59978c450f9e11496a55d49ee5 (diff)
Merge upstream and other stuff
Diffstat (limited to 'toxcore/util.c')
-rw-r--r--toxcore/util.c37
1 files changed, 18 insertions, 19 deletions
diff --git a/toxcore/util.c b/toxcore/util.c
index edc611ec..7a2db450 100644
--- a/toxcore/util.c
+++ b/toxcore/util.c
@@ -36,10 +36,14 @@
36 36
37/* don't call into system billions of times for no reason */ 37/* don't call into system billions of times for no reason */
38static uint64_t unix_time_value; 38static uint64_t unix_time_value;
39static uint64_t unix_base_time_value;
39 40
40void unix_time_update() 41void unix_time_update()
41{ 42{
42 unix_time_value = (uint64_t)time(NULL); 43 if (unix_base_time_value == 0)
44 unix_base_time_value = ((uint64_t)time(NULL) - (current_time_monotonic() / 1000ULL));
45
46 unix_time_value = (current_time_monotonic() / 1000ULL) + unix_base_time_value;
43} 47}
44 48
45uint64_t unix_time() 49uint64_t unix_time()
@@ -49,7 +53,7 @@ uint64_t unix_time()
49 53
50int is_timeout(uint64_t timestamp, uint64_t timeout) 54int is_timeout(uint64_t timestamp, uint64_t timeout)
51{ 55{
52 return timestamp + timeout <= unix_time_value; 56 return timestamp + timeout <= unix_time();
53} 57}
54 58
55 59
@@ -67,22 +71,17 @@ uint32_t id_copy(uint8_t *dest, uint8_t *src)
67 71
68void host_to_net(uint8_t *num, uint16_t numbytes) 72void host_to_net(uint8_t *num, uint16_t numbytes)
69{ 73{
70 union { 74#ifndef WORDS_BIGENDIAN
71 uint32_t i; 75 uint32_t i;
72 uint8_t c[4]; 76 uint8_t buff[numbytes];
73 } a;
74 a.i = 1;
75
76 if (a.c[0] == 1) {
77 uint32_t i;
78 uint8_t buff[numbytes];
79
80 for (i = 0; i < numbytes; ++i) {
81 buff[i] = num[numbytes - i - 1];
82 }
83 77
84 memcpy(num, buff, numbytes); 78 for (i = 0; i < numbytes; ++i) {
79 buff[i] = num[numbytes - i - 1];
85 } 80 }
81
82 memcpy(num, buff, numbytes);
83#endif
84 return;
86} 85}
87 86
88/* state load/save */ 87/* state load/save */
@@ -99,11 +98,11 @@ int load_state(load_state_callback_func load_state_callback, void *outer,
99 98
100 uint16_t type; 99 uint16_t type;
101 uint32_t length_sub, cookie_type; 100 uint32_t length_sub, cookie_type;
102 uint32_t size32 = sizeof(uint32_t), size_head = size32 * 2; 101 uint32_t size_head = sizeof(uint32_t) * 2;
103 102
104 while (length >= size_head) { 103 while (length >= size_head) {
105 length_sub = *(uint32_t *)data; 104 memcpy(&length_sub, data, sizeof(length_sub));
106 cookie_type = *(uint32_t *)(data + size32); 105 memcpy(&cookie_type, data + sizeof(length_sub), sizeof(cookie_type));
107 data += size_head; 106 data += size_head;
108 length -= size_head; 107 length -= size_head;
109 108