diff options
author | mannol <eniz_vukovic@hotmail.com> | 2014-05-20 00:10:40 +0200 |
---|---|---|
committer | mannol <eniz_vukovic@hotmail.com> | 2014-05-20 00:10:40 +0200 |
commit | a1f2a18ae4146ebea11fbd3f83df803b715813da (patch) | |
tree | 63b29cf3770a65e94e3e5d0fcd53b33f2a654585 /toxcore/util.c | |
parent | ea96c1758ae42c59978c450f9e11496a55d49ee5 (diff) |
Merge upstream and other stuff
Diffstat (limited to 'toxcore/util.c')
-rw-r--r-- | toxcore/util.c | 37 |
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 */ |
38 | static uint64_t unix_time_value; | 38 | static uint64_t unix_time_value; |
39 | static uint64_t unix_base_time_value; | ||
39 | 40 | ||
40 | void unix_time_update() | 41 | void 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 | ||
45 | uint64_t unix_time() | 49 | uint64_t unix_time() |
@@ -49,7 +53,7 @@ uint64_t unix_time() | |||
49 | 53 | ||
50 | int is_timeout(uint64_t timestamp, uint64_t timeout) | 54 | int 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 | ||
68 | void host_to_net(uint8_t *num, uint16_t numbytes) | 72 | void 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 | ||