diff options
Diffstat (limited to 'src/util/time.c')
-rw-r--r-- | src/util/time.c | 398 |
1 files changed, 199 insertions, 199 deletions
diff --git a/src/util/time.c b/src/util/time.c index 3df7b469e..5b4833511 100644 --- a/src/util/time.c +++ b/src/util/time.c | |||
@@ -37,7 +37,7 @@ | |||
37 | #endif | 37 | #endif |
38 | #endif | 38 | #endif |
39 | 39 | ||
40 | #define LOG(kind, ...) GNUNET_log_from(kind, "util-time", __VA_ARGS__) | 40 | #define LOG(kind, ...) GNUNET_log_from (kind, "util-time", __VA_ARGS__) |
41 | 41 | ||
42 | /** | 42 | /** |
43 | * Variable used to simulate clock skew. Used for testing, never in production. | 43 | * Variable used to simulate clock skew. Used for testing, never in production. |
@@ -50,7 +50,7 @@ static long long timestamp_offset; | |||
50 | * @param offset the offset to skew the locale time by | 50 | * @param offset the offset to skew the locale time by |
51 | */ | 51 | */ |
52 | void | 52 | void |
53 | GNUNET_TIME_set_offset(long long offset) | 53 | GNUNET_TIME_set_offset (long long offset) |
54 | { | 54 | { |
55 | timestamp_offset = offset; | 55 | timestamp_offset = offset; |
56 | } | 56 | } |
@@ -62,7 +62,7 @@ GNUNET_TIME_set_offset(long long offset) | |||
62 | * @return the offset we currently skew the locale time by | 62 | * @return the offset we currently skew the locale time by |
63 | */ | 63 | */ |
64 | long long | 64 | long long |
65 | GNUNET_TIME_get_offset() | 65 | GNUNET_TIME_get_offset () |
66 | { | 66 | { |
67 | return timestamp_offset; | 67 | return timestamp_offset; |
68 | } | 68 | } |
@@ -77,7 +77,7 @@ GNUNET_TIME_get_offset() | |||
77 | * it was just now rounded | 77 | * it was just now rounded |
78 | */ | 78 | */ |
79 | int | 79 | int |
80 | GNUNET_TIME_round_abs(struct GNUNET_TIME_Absolute *at) | 80 | GNUNET_TIME_round_abs (struct GNUNET_TIME_Absolute *at) |
81 | { | 81 | { |
82 | if (at->abs_value_us == GNUNET_TIME_UNIT_FOREVER_ABS.abs_value_us) | 82 | if (at->abs_value_us == GNUNET_TIME_UNIT_FOREVER_ABS.abs_value_us) |
83 | return GNUNET_OK; | 83 | return GNUNET_OK; |
@@ -97,7 +97,7 @@ GNUNET_TIME_round_abs(struct GNUNET_TIME_Absolute *at) | |||
97 | * it was just now rounded | 97 | * it was just now rounded |
98 | */ | 98 | */ |
99 | int | 99 | int |
100 | GNUNET_TIME_round_rel(struct GNUNET_TIME_Relative *rt) | 100 | GNUNET_TIME_round_rel (struct GNUNET_TIME_Relative *rt) |
101 | { | 101 | { |
102 | if (rt->rel_value_us == GNUNET_TIME_UNIT_FOREVER_REL.rel_value_us) | 102 | if (rt->rel_value_us == GNUNET_TIME_UNIT_FOREVER_REL.rel_value_us) |
103 | return GNUNET_OK; | 103 | return GNUNET_OK; |
@@ -115,15 +115,15 @@ GNUNET_TIME_round_rel(struct GNUNET_TIME_Relative *rt) | |||
115 | * @return the current time | 115 | * @return the current time |
116 | */ | 116 | */ |
117 | struct GNUNET_TIME_Absolute | 117 | struct GNUNET_TIME_Absolute |
118 | GNUNET_TIME_absolute_get() | 118 | GNUNET_TIME_absolute_get () |
119 | { | 119 | { |
120 | struct GNUNET_TIME_Absolute ret; | 120 | struct GNUNET_TIME_Absolute ret; |
121 | struct timeval tv; | 121 | struct timeval tv; |
122 | 122 | ||
123 | gettimeofday(&tv, NULL); | 123 | gettimeofday (&tv, NULL); |
124 | ret.abs_value_us = (uint64_t)(((uint64_t)tv.tv_sec * 1000LL * 1000LL) + | 124 | ret.abs_value_us = (uint64_t) (((uint64_t) tv.tv_sec * 1000LL * 1000LL) |
125 | ((uint64_t)tv.tv_usec)) + | 125 | + ((uint64_t) tv.tv_usec)) |
126 | timestamp_offset; | 126 | + timestamp_offset; |
127 | return ret; | 127 | return ret; |
128 | } | 128 | } |
129 | 129 | ||
@@ -132,7 +132,7 @@ GNUNET_TIME_absolute_get() | |||
132 | * Return relative time of 0ms. | 132 | * Return relative time of 0ms. |
133 | */ | 133 | */ |
134 | struct GNUNET_TIME_Relative | 134 | struct GNUNET_TIME_Relative |
135 | GNUNET_TIME_relative_get_zero_() | 135 | GNUNET_TIME_relative_get_zero_ () |
136 | { | 136 | { |
137 | static struct GNUNET_TIME_Relative zero; | 137 | static struct GNUNET_TIME_Relative zero; |
138 | 138 | ||
@@ -144,7 +144,7 @@ GNUNET_TIME_relative_get_zero_() | |||
144 | * Return absolute time of 0ms. | 144 | * Return absolute time of 0ms. |
145 | */ | 145 | */ |
146 | struct GNUNET_TIME_Absolute | 146 | struct GNUNET_TIME_Absolute |
147 | GNUNET_TIME_absolute_get_zero_() | 147 | GNUNET_TIME_absolute_get_zero_ () |
148 | { | 148 | { |
149 | static struct GNUNET_TIME_Absolute zero; | 149 | static struct GNUNET_TIME_Absolute zero; |
150 | 150 | ||
@@ -156,7 +156,7 @@ GNUNET_TIME_absolute_get_zero_() | |||
156 | * Return relative time of 1us. | 156 | * Return relative time of 1us. |
157 | */ | 157 | */ |
158 | struct GNUNET_TIME_Relative | 158 | struct GNUNET_TIME_Relative |
159 | GNUNET_TIME_relative_get_unit_() | 159 | GNUNET_TIME_relative_get_unit_ () |
160 | { | 160 | { |
161 | static struct GNUNET_TIME_Relative one = { 1 }; | 161 | static struct GNUNET_TIME_Relative one = { 1 }; |
162 | 162 | ||
@@ -168,7 +168,7 @@ GNUNET_TIME_relative_get_unit_() | |||
168 | * Return relative time of 1ms. | 168 | * Return relative time of 1ms. |
169 | */ | 169 | */ |
170 | struct GNUNET_TIME_Relative | 170 | struct GNUNET_TIME_Relative |
171 | GNUNET_TIME_relative_get_millisecond_() | 171 | GNUNET_TIME_relative_get_millisecond_ () |
172 | { | 172 | { |
173 | static struct GNUNET_TIME_Relative one = { 1000 }; | 173 | static struct GNUNET_TIME_Relative one = { 1000 }; |
174 | 174 | ||
@@ -180,7 +180,7 @@ GNUNET_TIME_relative_get_millisecond_() | |||
180 | * Return relative time of 1s. | 180 | * Return relative time of 1s. |
181 | */ | 181 | */ |
182 | struct GNUNET_TIME_Relative | 182 | struct GNUNET_TIME_Relative |
183 | GNUNET_TIME_relative_get_second_() | 183 | GNUNET_TIME_relative_get_second_ () |
184 | { | 184 | { |
185 | static struct GNUNET_TIME_Relative one = { 1000 * 1000LL }; | 185 | static struct GNUNET_TIME_Relative one = { 1000 * 1000LL }; |
186 | 186 | ||
@@ -192,7 +192,7 @@ GNUNET_TIME_relative_get_second_() | |||
192 | * Return relative time of 1 minute. | 192 | * Return relative time of 1 minute. |
193 | */ | 193 | */ |
194 | struct GNUNET_TIME_Relative | 194 | struct GNUNET_TIME_Relative |
195 | GNUNET_TIME_relative_get_minute_() | 195 | GNUNET_TIME_relative_get_minute_ () |
196 | { | 196 | { |
197 | static struct GNUNET_TIME_Relative one = { 60 * 1000 * 1000LL }; | 197 | static struct GNUNET_TIME_Relative one = { 60 * 1000 * 1000LL }; |
198 | 198 | ||
@@ -204,7 +204,7 @@ GNUNET_TIME_relative_get_minute_() | |||
204 | * Return relative time of 1 hour. | 204 | * Return relative time of 1 hour. |
205 | */ | 205 | */ |
206 | struct GNUNET_TIME_Relative | 206 | struct GNUNET_TIME_Relative |
207 | GNUNET_TIME_relative_get_hour_() | 207 | GNUNET_TIME_relative_get_hour_ () |
208 | { | 208 | { |
209 | static struct GNUNET_TIME_Relative one = { 60 * 60 * 1000 * 1000LL }; | 209 | static struct GNUNET_TIME_Relative one = { 60 * 60 * 1000 * 1000LL }; |
210 | 210 | ||
@@ -216,7 +216,7 @@ GNUNET_TIME_relative_get_hour_() | |||
216 | * Return "forever". | 216 | * Return "forever". |
217 | */ | 217 | */ |
218 | struct GNUNET_TIME_Relative | 218 | struct GNUNET_TIME_Relative |
219 | GNUNET_TIME_relative_get_forever_() | 219 | GNUNET_TIME_relative_get_forever_ () |
220 | { | 220 | { |
221 | static struct GNUNET_TIME_Relative forever = { UINT64_MAX }; | 221 | static struct GNUNET_TIME_Relative forever = { UINT64_MAX }; |
222 | 222 | ||
@@ -228,7 +228,7 @@ GNUNET_TIME_relative_get_forever_() | |||
228 | * Return "forever". | 228 | * Return "forever". |
229 | */ | 229 | */ |
230 | struct GNUNET_TIME_Absolute | 230 | struct GNUNET_TIME_Absolute |
231 | GNUNET_TIME_absolute_get_forever_() | 231 | GNUNET_TIME_absolute_get_forever_ () |
232 | { | 232 | { |
233 | static struct GNUNET_TIME_Absolute forever = { UINT64_MAX }; | 233 | static struct GNUNET_TIME_Absolute forever = { UINT64_MAX }; |
234 | 234 | ||
@@ -243,19 +243,19 @@ GNUNET_TIME_absolute_get_forever_() | |||
243 | * @return timestamp that is "rel" in the future, or FOREVER if rel==FOREVER (or if we would overflow) | 243 | * @return timestamp that is "rel" in the future, or FOREVER if rel==FOREVER (or if we would overflow) |
244 | */ | 244 | */ |
245 | struct GNUNET_TIME_Absolute | 245 | struct GNUNET_TIME_Absolute |
246 | GNUNET_TIME_relative_to_absolute(struct GNUNET_TIME_Relative rel) | 246 | GNUNET_TIME_relative_to_absolute (struct GNUNET_TIME_Relative rel) |
247 | { | 247 | { |
248 | struct GNUNET_TIME_Absolute ret; | 248 | struct GNUNET_TIME_Absolute ret; |
249 | 249 | ||
250 | if (rel.rel_value_us == UINT64_MAX) | 250 | if (rel.rel_value_us == UINT64_MAX) |
251 | return GNUNET_TIME_UNIT_FOREVER_ABS; | 251 | return GNUNET_TIME_UNIT_FOREVER_ABS; |
252 | struct GNUNET_TIME_Absolute now = GNUNET_TIME_absolute_get(); | 252 | struct GNUNET_TIME_Absolute now = GNUNET_TIME_absolute_get (); |
253 | 253 | ||
254 | if (rel.rel_value_us + now.abs_value_us < rel.rel_value_us) | 254 | if (rel.rel_value_us + now.abs_value_us < rel.rel_value_us) |
255 | { | 255 | { |
256 | GNUNET_break(0); /* overflow... */ | 256 | GNUNET_break (0); /* overflow... */ |
257 | return GNUNET_TIME_UNIT_FOREVER_ABS; | 257 | return GNUNET_TIME_UNIT_FOREVER_ABS; |
258 | } | 258 | } |
259 | ret.abs_value_us = rel.rel_value_us + now.abs_value_us; | 259 | ret.abs_value_us = rel.rel_value_us + now.abs_value_us; |
260 | return ret; | 260 | return ret; |
261 | } | 261 | } |
@@ -269,8 +269,8 @@ GNUNET_TIME_relative_to_absolute(struct GNUNET_TIME_Relative rel) | |||
269 | * @return timestamp that is smaller | 269 | * @return timestamp that is smaller |
270 | */ | 270 | */ |
271 | struct GNUNET_TIME_Relative | 271 | struct GNUNET_TIME_Relative |
272 | GNUNET_TIME_relative_min(struct GNUNET_TIME_Relative t1, | 272 | GNUNET_TIME_relative_min (struct GNUNET_TIME_Relative t1, |
273 | struct GNUNET_TIME_Relative t2) | 273 | struct GNUNET_TIME_Relative t2) |
274 | { | 274 | { |
275 | return (t1.rel_value_us < t2.rel_value_us) ? t1 : t2; | 275 | return (t1.rel_value_us < t2.rel_value_us) ? t1 : t2; |
276 | } | 276 | } |
@@ -284,8 +284,8 @@ GNUNET_TIME_relative_min(struct GNUNET_TIME_Relative t1, | |||
284 | * @return timestamp that is larger | 284 | * @return timestamp that is larger |
285 | */ | 285 | */ |
286 | struct GNUNET_TIME_Relative | 286 | struct GNUNET_TIME_Relative |
287 | GNUNET_TIME_relative_max(struct GNUNET_TIME_Relative t1, | 287 | GNUNET_TIME_relative_max (struct GNUNET_TIME_Relative t1, |
288 | struct GNUNET_TIME_Relative t2) | 288 | struct GNUNET_TIME_Relative t2) |
289 | { | 289 | { |
290 | return (t1.rel_value_us > t2.rel_value_us) ? t1 : t2; | 290 | return (t1.rel_value_us > t2.rel_value_us) ? t1 : t2; |
291 | } | 291 | } |
@@ -299,8 +299,8 @@ GNUNET_TIME_relative_max(struct GNUNET_TIME_Relative t1, | |||
299 | * @return timestamp that is smaller | 299 | * @return timestamp that is smaller |
300 | */ | 300 | */ |
301 | struct GNUNET_TIME_Absolute | 301 | struct GNUNET_TIME_Absolute |
302 | GNUNET_TIME_absolute_min(struct GNUNET_TIME_Absolute t1, | 302 | GNUNET_TIME_absolute_min (struct GNUNET_TIME_Absolute t1, |
303 | struct GNUNET_TIME_Absolute t2) | 303 | struct GNUNET_TIME_Absolute t2) |
304 | { | 304 | { |
305 | return (t1.abs_value_us < t2.abs_value_us) ? t1 : t2; | 305 | return (t1.abs_value_us < t2.abs_value_us) ? t1 : t2; |
306 | } | 306 | } |
@@ -314,8 +314,8 @@ GNUNET_TIME_absolute_min(struct GNUNET_TIME_Absolute t1, | |||
314 | * @return timestamp that is bigger | 314 | * @return timestamp that is bigger |
315 | */ | 315 | */ |
316 | struct GNUNET_TIME_Absolute | 316 | struct GNUNET_TIME_Absolute |
317 | GNUNET_TIME_absolute_max(struct GNUNET_TIME_Absolute t1, | 317 | GNUNET_TIME_absolute_max (struct GNUNET_TIME_Absolute t1, |
318 | struct GNUNET_TIME_Absolute t2) | 318 | struct GNUNET_TIME_Absolute t2) |
319 | { | 319 | { |
320 | return (t1.abs_value_us > t2.abs_value_us) ? t1 : t2; | 320 | return (t1.abs_value_us > t2.abs_value_us) ? t1 : t2; |
321 | } | 321 | } |
@@ -328,13 +328,13 @@ GNUNET_TIME_absolute_max(struct GNUNET_TIME_Absolute t1, | |||
328 | * @return future - now, or 0 if now >= future, or FOREVER if future==FOREVER. | 328 | * @return future - now, or 0 if now >= future, or FOREVER if future==FOREVER. |
329 | */ | 329 | */ |
330 | struct GNUNET_TIME_Relative | 330 | struct GNUNET_TIME_Relative |
331 | GNUNET_TIME_absolute_get_remaining(struct GNUNET_TIME_Absolute future) | 331 | GNUNET_TIME_absolute_get_remaining (struct GNUNET_TIME_Absolute future) |
332 | { | 332 | { |
333 | struct GNUNET_TIME_Relative ret; | 333 | struct GNUNET_TIME_Relative ret; |
334 | 334 | ||
335 | if (future.abs_value_us == UINT64_MAX) | 335 | if (future.abs_value_us == UINT64_MAX) |
336 | return GNUNET_TIME_UNIT_FOREVER_REL; | 336 | return GNUNET_TIME_UNIT_FOREVER_REL; |
337 | struct GNUNET_TIME_Absolute now = GNUNET_TIME_absolute_get(); | 337 | struct GNUNET_TIME_Absolute now = GNUNET_TIME_absolute_get (); |
338 | 338 | ||
339 | if (now.abs_value_us > future.abs_value_us) | 339 | if (now.abs_value_us > future.abs_value_us) |
340 | return GNUNET_TIME_UNIT_ZERO; | 340 | return GNUNET_TIME_UNIT_ZERO; |
@@ -350,8 +350,8 @@ GNUNET_TIME_absolute_get_remaining(struct GNUNET_TIME_Absolute future) | |||
350 | * @return 0 if start >= end; FOREVER if end==FOREVER; otherwise end - start | 350 | * @return 0 if start >= end; FOREVER if end==FOREVER; otherwise end - start |
351 | */ | 351 | */ |
352 | struct GNUNET_TIME_Relative | 352 | struct GNUNET_TIME_Relative |
353 | GNUNET_TIME_absolute_get_difference(struct GNUNET_TIME_Absolute start, | 353 | GNUNET_TIME_absolute_get_difference (struct GNUNET_TIME_Absolute start, |
354 | struct GNUNET_TIME_Absolute end) | 354 | struct GNUNET_TIME_Absolute end) |
355 | { | 355 | { |
356 | struct GNUNET_TIME_Relative ret; | 356 | struct GNUNET_TIME_Relative ret; |
357 | 357 | ||
@@ -370,12 +370,12 @@ GNUNET_TIME_absolute_get_difference(struct GNUNET_TIME_Absolute start, | |||
370 | * @return 0 if whence > now, otherwise now-whence. | 370 | * @return 0 if whence > now, otherwise now-whence. |
371 | */ | 371 | */ |
372 | struct GNUNET_TIME_Relative | 372 | struct GNUNET_TIME_Relative |
373 | GNUNET_TIME_absolute_get_duration(struct GNUNET_TIME_Absolute whence) | 373 | GNUNET_TIME_absolute_get_duration (struct GNUNET_TIME_Absolute whence) |
374 | { | 374 | { |
375 | struct GNUNET_TIME_Absolute now; | 375 | struct GNUNET_TIME_Absolute now; |
376 | struct GNUNET_TIME_Relative ret; | 376 | struct GNUNET_TIME_Relative ret; |
377 | 377 | ||
378 | now = GNUNET_TIME_absolute_get(); | 378 | now = GNUNET_TIME_absolute_get (); |
379 | if (whence.abs_value_us > now.abs_value_us) | 379 | if (whence.abs_value_us > now.abs_value_us) |
380 | return GNUNET_TIME_UNIT_ZERO; | 380 | return GNUNET_TIME_UNIT_ZERO; |
381 | ret.rel_value_us = now.abs_value_us - whence.abs_value_us; | 381 | ret.rel_value_us = now.abs_value_us - whence.abs_value_us; |
@@ -390,8 +390,8 @@ GNUNET_TIME_absolute_get_duration(struct GNUNET_TIME_Absolute whence) | |||
390 | * @return FOREVER if either argument is FOREVER or on overflow; start+duration otherwise | 390 | * @return FOREVER if either argument is FOREVER or on overflow; start+duration otherwise |
391 | */ | 391 | */ |
392 | struct GNUNET_TIME_Absolute | 392 | struct GNUNET_TIME_Absolute |
393 | GNUNET_TIME_absolute_add(struct GNUNET_TIME_Absolute start, | 393 | GNUNET_TIME_absolute_add (struct GNUNET_TIME_Absolute start, |
394 | struct GNUNET_TIME_Relative duration) | 394 | struct GNUNET_TIME_Relative duration) |
395 | { | 395 | { |
396 | struct GNUNET_TIME_Absolute ret; | 396 | struct GNUNET_TIME_Absolute ret; |
397 | 397 | ||
@@ -399,10 +399,10 @@ GNUNET_TIME_absolute_add(struct GNUNET_TIME_Absolute start, | |||
399 | (duration.rel_value_us == UINT64_MAX)) | 399 | (duration.rel_value_us == UINT64_MAX)) |
400 | return GNUNET_TIME_UNIT_FOREVER_ABS; | 400 | return GNUNET_TIME_UNIT_FOREVER_ABS; |
401 | if (start.abs_value_us + duration.rel_value_us < start.abs_value_us) | 401 | if (start.abs_value_us + duration.rel_value_us < start.abs_value_us) |
402 | { | 402 | { |
403 | GNUNET_break(0); | 403 | GNUNET_break (0); |
404 | return GNUNET_TIME_UNIT_FOREVER_ABS; | 404 | return GNUNET_TIME_UNIT_FOREVER_ABS; |
405 | } | 405 | } |
406 | ret.abs_value_us = start.abs_value_us + duration.rel_value_us; | 406 | ret.abs_value_us = start.abs_value_us + duration.rel_value_us; |
407 | return ret; | 407 | return ret; |
408 | } | 408 | } |
@@ -417,8 +417,8 @@ GNUNET_TIME_absolute_add(struct GNUNET_TIME_Absolute start, | |||
417 | * @return ZERO if start <= duration, or FOREVER if start time is FOREVER; start-duration otherwise | 417 | * @return ZERO if start <= duration, or FOREVER if start time is FOREVER; start-duration otherwise |
418 | */ | 418 | */ |
419 | struct GNUNET_TIME_Absolute | 419 | struct GNUNET_TIME_Absolute |
420 | GNUNET_TIME_absolute_subtract(struct GNUNET_TIME_Absolute start, | 420 | GNUNET_TIME_absolute_subtract (struct GNUNET_TIME_Absolute start, |
421 | struct GNUNET_TIME_Relative duration) | 421 | struct GNUNET_TIME_Relative duration) |
422 | { | 422 | { |
423 | struct GNUNET_TIME_Absolute ret; | 423 | struct GNUNET_TIME_Absolute ret; |
424 | 424 | ||
@@ -437,8 +437,8 @@ GNUNET_TIME_absolute_subtract(struct GNUNET_TIME_Absolute start, | |||
437 | * @return FOREVER if rel=FOREVER or on overflow; otherwise rel*factor | 437 | * @return FOREVER if rel=FOREVER or on overflow; otherwise rel*factor |
438 | */ | 438 | */ |
439 | struct GNUNET_TIME_Relative | 439 | struct GNUNET_TIME_Relative |
440 | GNUNET_TIME_relative_multiply(struct GNUNET_TIME_Relative rel, | 440 | GNUNET_TIME_relative_multiply (struct GNUNET_TIME_Relative rel, |
441 | unsigned long long factor) | 441 | unsigned long long factor) |
442 | { | 442 | { |
443 | struct GNUNET_TIME_Relative ret; | 443 | struct GNUNET_TIME_Relative ret; |
444 | 444 | ||
@@ -448,10 +448,10 @@ GNUNET_TIME_relative_multiply(struct GNUNET_TIME_Relative rel, | |||
448 | return GNUNET_TIME_UNIT_FOREVER_REL; | 448 | return GNUNET_TIME_UNIT_FOREVER_REL; |
449 | ret.rel_value_us = rel.rel_value_us * factor; | 449 | ret.rel_value_us = rel.rel_value_us * factor; |
450 | if (ret.rel_value_us / factor != rel.rel_value_us) | 450 | if (ret.rel_value_us / factor != rel.rel_value_us) |
451 | { | 451 | { |
452 | GNUNET_break(0); | 452 | GNUNET_break (0); |
453 | return GNUNET_TIME_UNIT_FOREVER_REL; | 453 | return GNUNET_TIME_UNIT_FOREVER_REL; |
454 | } | 454 | } |
455 | return ret; | 455 | return ret; |
456 | } | 456 | } |
457 | 457 | ||
@@ -463,27 +463,27 @@ GNUNET_TIME_relative_multiply(struct GNUNET_TIME_Relative rel, | |||
463 | * @return FOREVER if rel=FOREVER or on overflow; otherwise rel*factor | 463 | * @return FOREVER if rel=FOREVER or on overflow; otherwise rel*factor |
464 | */ | 464 | */ |
465 | struct GNUNET_TIME_Relative | 465 | struct GNUNET_TIME_Relative |
466 | relative_multiply_double(struct GNUNET_TIME_Relative rel, double factor) | 466 | relative_multiply_double (struct GNUNET_TIME_Relative rel, double factor) |
467 | { | 467 | { |
468 | struct GNUNET_TIME_Relative out; | 468 | struct GNUNET_TIME_Relative out; |
469 | double m; | 469 | double m; |
470 | 470 | ||
471 | GNUNET_assert(0 <= factor); | 471 | GNUNET_assert (0 <= factor); |
472 | 472 | ||
473 | if (0 == factor) | 473 | if (0 == factor) |
474 | return GNUNET_TIME_UNIT_ZERO; | 474 | return GNUNET_TIME_UNIT_ZERO; |
475 | if (rel.rel_value_us == GNUNET_TIME_UNIT_FOREVER_REL.rel_value_us) | 475 | if (rel.rel_value_us == GNUNET_TIME_UNIT_FOREVER_REL.rel_value_us) |
476 | return GNUNET_TIME_UNIT_FOREVER_REL; | 476 | return GNUNET_TIME_UNIT_FOREVER_REL; |
477 | 477 | ||
478 | m = ((double)rel.rel_value_us) * factor; | 478 | m = ((double) rel.rel_value_us) * factor; |
479 | 479 | ||
480 | if (m >= (double)(GNUNET_TIME_UNIT_FOREVER_REL).rel_value_us) | 480 | if (m >= (double) (GNUNET_TIME_UNIT_FOREVER_REL).rel_value_us) |
481 | { | 481 | { |
482 | GNUNET_break(0); | 482 | GNUNET_break (0); |
483 | return GNUNET_TIME_UNIT_FOREVER_REL; | 483 | return GNUNET_TIME_UNIT_FOREVER_REL; |
484 | } | 484 | } |
485 | 485 | ||
486 | out.rel_value_us = (uint64_t)m; | 486 | out.rel_value_us = (uint64_t) m; |
487 | return out; | 487 | return out; |
488 | } | 488 | } |
489 | 489 | ||
@@ -496,8 +496,8 @@ relative_multiply_double(struct GNUNET_TIME_Relative rel, double factor) | |||
496 | * @return FOREVER if rel=FOREVER or on overflow; otherwise rel*factor | 496 | * @return FOREVER if rel=FOREVER or on overflow; otherwise rel*factor |
497 | */ | 497 | */ |
498 | struct GNUNET_TIME_Relative | 498 | struct GNUNET_TIME_Relative |
499 | GNUNET_TIME_relative_saturating_multiply(struct GNUNET_TIME_Relative rel, | 499 | GNUNET_TIME_relative_saturating_multiply (struct GNUNET_TIME_Relative rel, |
500 | unsigned long long factor) | 500 | unsigned long long factor) |
501 | { | 501 | { |
502 | struct GNUNET_TIME_Relative ret; | 502 | struct GNUNET_TIME_Relative ret; |
503 | 503 | ||
@@ -507,9 +507,9 @@ GNUNET_TIME_relative_saturating_multiply(struct GNUNET_TIME_Relative rel, | |||
507 | return GNUNET_TIME_UNIT_FOREVER_REL; | 507 | return GNUNET_TIME_UNIT_FOREVER_REL; |
508 | ret.rel_value_us = rel.rel_value_us * factor; | 508 | ret.rel_value_us = rel.rel_value_us * factor; |
509 | if (ret.rel_value_us / factor != rel.rel_value_us) | 509 | if (ret.rel_value_us / factor != rel.rel_value_us) |
510 | { | 510 | { |
511 | return GNUNET_TIME_UNIT_FOREVER_REL; | 511 | return GNUNET_TIME_UNIT_FOREVER_REL; |
512 | } | 512 | } |
513 | return ret; | 513 | return ret; |
514 | } | 514 | } |
515 | 515 | ||
@@ -522,8 +522,8 @@ GNUNET_TIME_relative_saturating_multiply(struct GNUNET_TIME_Relative rel, | |||
522 | * @return FOREVER if rel=FOREVER or factor==0; otherwise rel/factor | 522 | * @return FOREVER if rel=FOREVER or factor==0; otherwise rel/factor |
523 | */ | 523 | */ |
524 | struct GNUNET_TIME_Relative | 524 | struct GNUNET_TIME_Relative |
525 | GNUNET_TIME_relative_divide(struct GNUNET_TIME_Relative rel, | 525 | GNUNET_TIME_relative_divide (struct GNUNET_TIME_Relative rel, |
526 | unsigned long long factor) | 526 | unsigned long long factor) |
527 | { | 527 | { |
528 | struct GNUNET_TIME_Relative ret; | 528 | struct GNUNET_TIME_Relative ret; |
529 | 529 | ||
@@ -546,22 +546,22 @@ GNUNET_TIME_relative_divide(struct GNUNET_TIME_Relative rel, | |||
546 | * assuming it continues at the same speed | 546 | * assuming it continues at the same speed |
547 | */ | 547 | */ |
548 | struct GNUNET_TIME_Relative | 548 | struct GNUNET_TIME_Relative |
549 | GNUNET_TIME_calculate_eta(struct GNUNET_TIME_Absolute start, | 549 | GNUNET_TIME_calculate_eta (struct GNUNET_TIME_Absolute start, |
550 | uint64_t finished, | 550 | uint64_t finished, |
551 | uint64_t total) | 551 | uint64_t total) |
552 | { | 552 | { |
553 | struct GNUNET_TIME_Relative dur; | 553 | struct GNUNET_TIME_Relative dur; |
554 | double exp; | 554 | double exp; |
555 | struct GNUNET_TIME_Relative ret; | 555 | struct GNUNET_TIME_Relative ret; |
556 | 556 | ||
557 | GNUNET_break(finished <= total); | 557 | GNUNET_break (finished <= total); |
558 | if (finished >= total) | 558 | if (finished >= total) |
559 | return GNUNET_TIME_UNIT_ZERO; | 559 | return GNUNET_TIME_UNIT_ZERO; |
560 | if (0 == finished) | 560 | if (0 == finished) |
561 | return GNUNET_TIME_UNIT_FOREVER_REL; | 561 | return GNUNET_TIME_UNIT_FOREVER_REL; |
562 | dur = GNUNET_TIME_absolute_get_duration(start); | 562 | dur = GNUNET_TIME_absolute_get_duration (start); |
563 | exp = ((double)dur.rel_value_us) * ((double)total) / ((double)finished); | 563 | exp = ((double) dur.rel_value_us) * ((double) total) / ((double) finished); |
564 | ret.rel_value_us = ((uint64_t)exp) - dur.rel_value_us; | 564 | ret.rel_value_us = ((uint64_t) exp) - dur.rel_value_us; |
565 | return ret; | 565 | return ret; |
566 | } | 566 | } |
567 | 567 | ||
@@ -574,18 +574,18 @@ GNUNET_TIME_calculate_eta(struct GNUNET_TIME_Absolute start, | |||
574 | * @return FOREVER if either argument is FOREVER or on overflow; a1+a2 otherwise | 574 | * @return FOREVER if either argument is FOREVER or on overflow; a1+a2 otherwise |
575 | */ | 575 | */ |
576 | struct GNUNET_TIME_Relative | 576 | struct GNUNET_TIME_Relative |
577 | GNUNET_TIME_relative_add(struct GNUNET_TIME_Relative a1, | 577 | GNUNET_TIME_relative_add (struct GNUNET_TIME_Relative a1, |
578 | struct GNUNET_TIME_Relative a2) | 578 | struct GNUNET_TIME_Relative a2) |
579 | { | 579 | { |
580 | struct GNUNET_TIME_Relative ret; | 580 | struct GNUNET_TIME_Relative ret; |
581 | 581 | ||
582 | if ((a1.rel_value_us == UINT64_MAX) || (a2.rel_value_us == UINT64_MAX)) | 582 | if ((a1.rel_value_us == UINT64_MAX) || (a2.rel_value_us == UINT64_MAX)) |
583 | return GNUNET_TIME_UNIT_FOREVER_REL; | 583 | return GNUNET_TIME_UNIT_FOREVER_REL; |
584 | if (a1.rel_value_us + a2.rel_value_us < a1.rel_value_us) | 584 | if (a1.rel_value_us + a2.rel_value_us < a1.rel_value_us) |
585 | { | 585 | { |
586 | GNUNET_break(0); | 586 | GNUNET_break (0); |
587 | return GNUNET_TIME_UNIT_FOREVER_REL; | 587 | return GNUNET_TIME_UNIT_FOREVER_REL; |
588 | } | 588 | } |
589 | ret.rel_value_us = a1.rel_value_us + a2.rel_value_us; | 589 | ret.rel_value_us = a1.rel_value_us + a2.rel_value_us; |
590 | return ret; | 590 | return ret; |
591 | } | 591 | } |
@@ -599,8 +599,8 @@ GNUNET_TIME_relative_add(struct GNUNET_TIME_Relative a1, | |||
599 | * @return ZERO if a2>=a1 (including both FOREVER), FOREVER if a1 is FOREVER, a1-a2 otherwise | 599 | * @return ZERO if a2>=a1 (including both FOREVER), FOREVER if a1 is FOREVER, a1-a2 otherwise |
600 | */ | 600 | */ |
601 | struct GNUNET_TIME_Relative | 601 | struct GNUNET_TIME_Relative |
602 | GNUNET_TIME_relative_subtract(struct GNUNET_TIME_Relative a1, | 602 | GNUNET_TIME_relative_subtract (struct GNUNET_TIME_Relative a1, |
603 | struct GNUNET_TIME_Relative a2) | 603 | struct GNUNET_TIME_Relative a2) |
604 | { | 604 | { |
605 | struct GNUNET_TIME_Relative ret; | 605 | struct GNUNET_TIME_Relative ret; |
606 | 606 | ||
@@ -620,11 +620,11 @@ GNUNET_TIME_relative_subtract(struct GNUNET_TIME_Relative a1, | |||
620 | * @return time in network byte order | 620 | * @return time in network byte order |
621 | */ | 621 | */ |
622 | struct GNUNET_TIME_RelativeNBO | 622 | struct GNUNET_TIME_RelativeNBO |
623 | GNUNET_TIME_relative_hton(struct GNUNET_TIME_Relative a) | 623 | GNUNET_TIME_relative_hton (struct GNUNET_TIME_Relative a) |
624 | { | 624 | { |
625 | struct GNUNET_TIME_RelativeNBO ret; | 625 | struct GNUNET_TIME_RelativeNBO ret; |
626 | 626 | ||
627 | ret.rel_value_us__ = GNUNET_htonll(a.rel_value_us); | 627 | ret.rel_value_us__ = GNUNET_htonll (a.rel_value_us); |
628 | return ret; | 628 | return ret; |
629 | } | 629 | } |
630 | 630 | ||
@@ -636,11 +636,11 @@ GNUNET_TIME_relative_hton(struct GNUNET_TIME_Relative a) | |||
636 | * @return time in host byte order | 636 | * @return time in host byte order |
637 | */ | 637 | */ |
638 | struct GNUNET_TIME_Relative | 638 | struct GNUNET_TIME_Relative |
639 | GNUNET_TIME_relative_ntoh(struct GNUNET_TIME_RelativeNBO a) | 639 | GNUNET_TIME_relative_ntoh (struct GNUNET_TIME_RelativeNBO a) |
640 | { | 640 | { |
641 | struct GNUNET_TIME_Relative ret; | 641 | struct GNUNET_TIME_Relative ret; |
642 | 642 | ||
643 | ret.rel_value_us = GNUNET_ntohll(a.rel_value_us__); | 643 | ret.rel_value_us = GNUNET_ntohll (a.rel_value_us__); |
644 | return ret; | 644 | return ret; |
645 | } | 645 | } |
646 | 646 | ||
@@ -652,11 +652,11 @@ GNUNET_TIME_relative_ntoh(struct GNUNET_TIME_RelativeNBO a) | |||
652 | * @return time in network byte order | 652 | * @return time in network byte order |
653 | */ | 653 | */ |
654 | struct GNUNET_TIME_AbsoluteNBO | 654 | struct GNUNET_TIME_AbsoluteNBO |
655 | GNUNET_TIME_absolute_hton(struct GNUNET_TIME_Absolute a) | 655 | GNUNET_TIME_absolute_hton (struct GNUNET_TIME_Absolute a) |
656 | { | 656 | { |
657 | struct GNUNET_TIME_AbsoluteNBO ret; | 657 | struct GNUNET_TIME_AbsoluteNBO ret; |
658 | 658 | ||
659 | ret.abs_value_us__ = GNUNET_htonll(a.abs_value_us); | 659 | ret.abs_value_us__ = GNUNET_htonll (a.abs_value_us); |
660 | return ret; | 660 | return ret; |
661 | } | 661 | } |
662 | 662 | ||
@@ -668,11 +668,11 @@ GNUNET_TIME_absolute_hton(struct GNUNET_TIME_Absolute a) | |||
668 | * @return time in host byte order | 668 | * @return time in host byte order |
669 | */ | 669 | */ |
670 | struct GNUNET_TIME_Absolute | 670 | struct GNUNET_TIME_Absolute |
671 | GNUNET_TIME_absolute_ntoh(struct GNUNET_TIME_AbsoluteNBO a) | 671 | GNUNET_TIME_absolute_ntoh (struct GNUNET_TIME_AbsoluteNBO a) |
672 | { | 672 | { |
673 | struct GNUNET_TIME_Absolute ret; | 673 | struct GNUNET_TIME_Absolute ret; |
674 | 674 | ||
675 | ret.abs_value_us = GNUNET_ntohll(a.abs_value_us__); | 675 | ret.abs_value_us = GNUNET_ntohll (a.abs_value_us__); |
676 | return ret; | 676 | return ret; |
677 | } | 677 | } |
678 | 678 | ||
@@ -681,13 +681,13 @@ GNUNET_TIME_absolute_ntoh(struct GNUNET_TIME_AbsoluteNBO a) | |||
681 | * Return the current year (i.e. '2011'). | 681 | * Return the current year (i.e. '2011'). |
682 | */ | 682 | */ |
683 | unsigned int | 683 | unsigned int |
684 | GNUNET_TIME_get_current_year() | 684 | GNUNET_TIME_get_current_year () |
685 | { | 685 | { |
686 | time_t tp; | 686 | time_t tp; |
687 | struct tm *t; | 687 | struct tm *t; |
688 | 688 | ||
689 | tp = time(NULL); | 689 | tp = time (NULL); |
690 | t = gmtime(&tp); | 690 | t = gmtime (&tp); |
691 | if (t == NULL) | 691 | if (t == NULL) |
692 | return 0; | 692 | return 0; |
693 | return t->tm_year + 1900; | 693 | return t->tm_year + 1900; |
@@ -701,13 +701,13 @@ GNUNET_TIME_get_current_year() | |||
701 | * @return year a year (after 1970), 0 on error | 701 | * @return year a year (after 1970), 0 on error |
702 | */ | 702 | */ |
703 | unsigned int | 703 | unsigned int |
704 | GNUNET_TIME_time_to_year(struct GNUNET_TIME_Absolute at) | 704 | GNUNET_TIME_time_to_year (struct GNUNET_TIME_Absolute at) |
705 | { | 705 | { |
706 | struct tm *t; | 706 | struct tm *t; |
707 | time_t tp; | 707 | time_t tp; |
708 | 708 | ||
709 | tp = at.abs_value_us / 1000LL / 1000LL; /* microseconds to seconds */ | 709 | tp = at.abs_value_us / 1000LL / 1000LL; /* microseconds to seconds */ |
710 | t = gmtime(&tp); | 710 | t = gmtime (&tp); |
711 | if (t == NULL) | 711 | if (t == NULL) |
712 | return 0; | 712 | return 0; |
713 | return t->tm_year + 1900; | 713 | return t->tm_year + 1900; |
@@ -721,25 +721,25 @@ GNUNET_TIME_time_to_year(struct GNUNET_TIME_Absolute at) | |||
721 | * @return absolute time for January 1st of that year. | 721 | * @return absolute time for January 1st of that year. |
722 | */ | 722 | */ |
723 | struct GNUNET_TIME_Absolute | 723 | struct GNUNET_TIME_Absolute |
724 | GNUNET_TIME_year_to_time(unsigned int year) | 724 | GNUNET_TIME_year_to_time (unsigned int year) |
725 | { | 725 | { |
726 | struct GNUNET_TIME_Absolute ret; | 726 | struct GNUNET_TIME_Absolute ret; |
727 | time_t tp; | 727 | time_t tp; |
728 | struct tm t; | 728 | struct tm t; |
729 | 729 | ||
730 | memset(&t, 0, sizeof(t)); | 730 | memset (&t, 0, sizeof(t)); |
731 | if (year < 1900) | 731 | if (year < 1900) |
732 | { | 732 | { |
733 | GNUNET_break(0); | 733 | GNUNET_break (0); |
734 | return GNUNET_TIME_absolute_get(); /* now */ | 734 | return GNUNET_TIME_absolute_get (); /* now */ |
735 | } | 735 | } |
736 | t.tm_year = year - 1900; | 736 | t.tm_year = year - 1900; |
737 | t.tm_mday = 1; | 737 | t.tm_mday = 1; |
738 | t.tm_mon = 0; | 738 | t.tm_mon = 0; |
739 | t.tm_wday = 1; | 739 | t.tm_wday = 1; |
740 | t.tm_yday = 1; | 740 | t.tm_yday = 1; |
741 | tp = mktime(&t); | 741 | tp = mktime (&t); |
742 | GNUNET_break(tp != (time_t)-1); | 742 | GNUNET_break (tp != (time_t) -1); |
743 | ret.abs_value_us = tp * 1000LL * 1000LL; /* seconds to microseconds */ | 743 | ret.abs_value_us = tp * 1000LL * 1000LL; /* seconds to microseconds */ |
744 | return ret; | 744 | return ret; |
745 | } | 745 | } |
@@ -755,16 +755,16 @@ GNUNET_TIME_year_to_time(unsigned int year) | |||
755 | * @return the next backoff time | 755 | * @return the next backoff time |
756 | */ | 756 | */ |
757 | struct GNUNET_TIME_Relative | 757 | struct GNUNET_TIME_Relative |
758 | GNUNET_TIME_randomized_backoff(struct GNUNET_TIME_Relative rt, | 758 | GNUNET_TIME_randomized_backoff (struct GNUNET_TIME_Relative rt, |
759 | struct GNUNET_TIME_Relative threshold) | 759 | struct GNUNET_TIME_Relative threshold) |
760 | { | 760 | { |
761 | double r = (rand() % 500) / 1000.0; | 761 | double r = (rand () % 500) / 1000.0; |
762 | struct GNUNET_TIME_Relative t; | 762 | struct GNUNET_TIME_Relative t; |
763 | 763 | ||
764 | t = relative_multiply_double( | 764 | t = relative_multiply_double ( |
765 | GNUNET_TIME_relative_max(GNUNET_TIME_UNIT_MILLISECONDS, rt), | 765 | GNUNET_TIME_relative_max (GNUNET_TIME_UNIT_MILLISECONDS, rt), |
766 | 2 + r); | 766 | 2 + r); |
767 | return GNUNET_TIME_relative_min(threshold, t); | 767 | return GNUNET_TIME_relative_min (threshold, t); |
768 | } | 768 | } |
769 | 769 | ||
770 | 770 | ||
@@ -775,11 +775,11 @@ GNUNET_TIME_randomized_backoff(struct GNUNET_TIME_Relative rt, | |||
775 | * @return randomized time | 775 | * @return randomized time |
776 | */ | 776 | */ |
777 | struct GNUNET_TIME_Relative | 777 | struct GNUNET_TIME_Relative |
778 | GNUNET_TIME_randomize(struct GNUNET_TIME_Relative r) | 778 | GNUNET_TIME_randomize (struct GNUNET_TIME_Relative r) |
779 | { | 779 | { |
780 | double d = ((rand() % 1001) - 500) / 1000.0; | 780 | double d = ((rand () % 1001) - 500) / 1000.0; |
781 | 781 | ||
782 | return relative_multiply_double(r, d); | 782 | return relative_multiply_double (r, d); |
783 | } | 783 | } |
784 | 784 | ||
785 | 785 | ||
@@ -802,7 +802,7 @@ GNUNET_TIME_randomize(struct GNUNET_TIME_Relative r) | |||
802 | * @return monotonically increasing time | 802 | * @return monotonically increasing time |
803 | */ | 803 | */ |
804 | struct GNUNET_TIME_Absolute | 804 | struct GNUNET_TIME_Absolute |
805 | GNUNET_TIME_absolute_get_monotonic( | 805 | GNUNET_TIME_absolute_get_monotonic ( |
806 | const struct GNUNET_CONFIGURATION_Handle *cfg) | 806 | const struct GNUNET_CONFIGURATION_Handle *cfg) |
807 | { | 807 | { |
808 | static const struct GNUNET_CONFIGURATION_Handle *last_cfg; | 808 | static const struct GNUNET_CONFIGURATION_Handle *last_cfg; |
@@ -811,114 +811,114 @@ GNUNET_TIME_absolute_get_monotonic( | |||
811 | static ATOMIC volatile uint64_t *map; | 811 | static ATOMIC volatile uint64_t *map; |
812 | struct GNUNET_TIME_Absolute now; | 812 | struct GNUNET_TIME_Absolute now; |
813 | 813 | ||
814 | now = GNUNET_TIME_absolute_get(); | 814 | now = GNUNET_TIME_absolute_get (); |
815 | if (last_cfg != cfg) | 815 | if (last_cfg != cfg) |
816 | { | ||
817 | char *filename; | ||
818 | |||
819 | if (NULL != map_handle) | ||
816 | { | 820 | { |
817 | char *filename; | 821 | GNUNET_DISK_file_unmap (map_handle); |
822 | map_handle = NULL; | ||
823 | } | ||
824 | map = NULL; | ||
825 | |||
826 | last_cfg = cfg; | ||
827 | if ((NULL != cfg) && | ||
828 | (GNUNET_OK == | ||
829 | GNUNET_CONFIGURATION_get_value_filename (cfg, | ||
830 | "util", | ||
831 | "MONOTONIC_TIME_FILENAME", | ||
832 | &filename))) | ||
833 | { | ||
834 | struct GNUNET_DISK_FileHandle *fh; | ||
835 | |||
836 | fh = GNUNET_DISK_file_open (filename, | ||
837 | GNUNET_DISK_OPEN_READWRITE | ||
838 | | GNUNET_DISK_OPEN_CREATE, | ||
839 | GNUNET_DISK_PERM_USER_WRITE | ||
840 | | GNUNET_DISK_PERM_GROUP_WRITE | ||
841 | | GNUNET_DISK_PERM_USER_READ | ||
842 | | GNUNET_DISK_PERM_GROUP_READ); | ||
843 | if (NULL == fh) | ||
844 | { | ||
845 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, | ||
846 | _ ("Failed to map `%s', cannot assure monotonic time!\n"), | ||
847 | filename); | ||
848 | } | ||
849 | else | ||
850 | { | ||
851 | off_t size; | ||
852 | |||
853 | size = 0; | ||
854 | GNUNET_break (GNUNET_OK == GNUNET_DISK_file_handle_size (fh, &size)); | ||
855 | if (size < (off_t) sizeof(*map)) | ||
856 | { | ||
857 | struct GNUNET_TIME_AbsoluteNBO o; | ||
818 | 858 | ||
819 | if (NULL != map_handle) | 859 | o = GNUNET_TIME_absolute_hton (now); |
860 | if (sizeof(o) != GNUNET_DISK_file_write (fh, &o, sizeof(o))) | ||
861 | size = 0; | ||
862 | else | ||
863 | size = sizeof(o); | ||
864 | } | ||
865 | if (size == sizeof(*map)) | ||
820 | { | 866 | { |
821 | GNUNET_DISK_file_unmap(map_handle); | 867 | map = GNUNET_DISK_file_map (fh, |
822 | map_handle = NULL; | 868 | &map_handle, |
869 | GNUNET_DISK_MAP_TYPE_READWRITE, | ||
870 | sizeof(*map)); | ||
871 | if (NULL == map) | ||
872 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, | ||
873 | _ ( | ||
874 | "Failed to map `%s', cannot assure monotonic time!\n"), | ||
875 | filename); | ||
823 | } | 876 | } |
824 | map = NULL; | 877 | else |
825 | |||
826 | last_cfg = cfg; | ||
827 | if ((NULL != cfg) && | ||
828 | (GNUNET_OK == | ||
829 | GNUNET_CONFIGURATION_get_value_filename(cfg, | ||
830 | "util", | ||
831 | "MONOTONIC_TIME_FILENAME", | ||
832 | &filename))) | ||
833 | { | 878 | { |
834 | struct GNUNET_DISK_FileHandle *fh; | 879 | GNUNET_log ( |
835 | 880 | GNUNET_ERROR_TYPE_WARNING, | |
836 | fh = GNUNET_DISK_file_open(filename, | 881 | _ ( |
837 | GNUNET_DISK_OPEN_READWRITE | | 882 | "Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"), |
838 | GNUNET_DISK_OPEN_CREATE, | 883 | filename); |
839 | GNUNET_DISK_PERM_USER_WRITE | | ||
840 | GNUNET_DISK_PERM_GROUP_WRITE | | ||
841 | GNUNET_DISK_PERM_USER_READ | | ||
842 | GNUNET_DISK_PERM_GROUP_READ); | ||
843 | if (NULL == fh) | ||
844 | { | ||
845 | GNUNET_log(GNUNET_ERROR_TYPE_WARNING, | ||
846 | _("Failed to map `%s', cannot assure monotonic time!\n"), | ||
847 | filename); | ||
848 | } | ||
849 | else | ||
850 | { | ||
851 | off_t size; | ||
852 | |||
853 | size = 0; | ||
854 | GNUNET_break(GNUNET_OK == GNUNET_DISK_file_handle_size(fh, &size)); | ||
855 | if (size < (off_t)sizeof(*map)) | ||
856 | { | ||
857 | struct GNUNET_TIME_AbsoluteNBO o; | ||
858 | |||
859 | o = GNUNET_TIME_absolute_hton(now); | ||
860 | if (sizeof(o) != GNUNET_DISK_file_write(fh, &o, sizeof(o))) | ||
861 | size = 0; | ||
862 | else | ||
863 | size = sizeof(o); | ||
864 | } | ||
865 | if (size == sizeof(*map)) | ||
866 | { | ||
867 | map = GNUNET_DISK_file_map(fh, | ||
868 | &map_handle, | ||
869 | GNUNET_DISK_MAP_TYPE_READWRITE, | ||
870 | sizeof(*map)); | ||
871 | if (NULL == map) | ||
872 | GNUNET_log(GNUNET_ERROR_TYPE_WARNING, | ||
873 | _( | ||
874 | "Failed to map `%s', cannot assure monotonic time!\n"), | ||
875 | filename); | ||
876 | } | ||
877 | else | ||
878 | { | ||
879 | GNUNET_log( | ||
880 | GNUNET_ERROR_TYPE_WARNING, | ||
881 | _( | ||
882 | "Failed to setup monotonic time file `%s', cannot assure monotonic time!\n"), | ||
883 | filename); | ||
884 | } | ||
885 | } | ||
886 | GNUNET_DISK_file_close(fh); | ||
887 | GNUNET_free(filename); | ||
888 | } | 884 | } |
885 | } | ||
886 | GNUNET_DISK_file_close (fh); | ||
887 | GNUNET_free (filename); | ||
889 | } | 888 | } |
889 | } | ||
890 | if (NULL != map) | 890 | if (NULL != map) |
891 | { | 891 | { |
892 | struct GNUNET_TIME_AbsoluteNBO mt; | 892 | struct GNUNET_TIME_AbsoluteNBO mt; |
893 | 893 | ||
894 | #if __STDC_NO_ATOMICS__ | 894 | #if __STDC_NO_ATOMICS__ |
895 | #if __GNUC__ | 895 | #if __GNUC__ |
896 | mt.abs_value_us__ = __sync_fetch_and_or(map, 0); | 896 | mt.abs_value_us__ = __sync_fetch_and_or (map, 0); |
897 | #else | 897 | #else |
898 | mt.abs_value_us__ = *map; /* godspeed, pray this is atomic */ | 898 | mt.abs_value_us__ = *map; /* godspeed, pray this is atomic */ |
899 | #endif | 899 | #endif |
900 | #else | 900 | #else |
901 | mt.abs_value_us__ = atomic_load(map); | 901 | mt.abs_value_us__ = atomic_load (map); |
902 | #endif | 902 | #endif |
903 | last_time = | 903 | last_time = |
904 | GNUNET_TIME_absolute_max(GNUNET_TIME_absolute_ntoh(mt), last_time); | 904 | GNUNET_TIME_absolute_max (GNUNET_TIME_absolute_ntoh (mt), last_time); |
905 | } | 905 | } |
906 | if (now.abs_value_us <= last_time.abs_value_us) | 906 | if (now.abs_value_us <= last_time.abs_value_us) |
907 | now.abs_value_us = last_time.abs_value_us + 1; | 907 | now.abs_value_us = last_time.abs_value_us + 1; |
908 | last_time = now; | 908 | last_time = now; |
909 | if (NULL != map) | 909 | if (NULL != map) |
910 | { | 910 | { |
911 | uint64_t val = GNUNET_TIME_absolute_hton(now).abs_value_us__; | 911 | uint64_t val = GNUNET_TIME_absolute_hton (now).abs_value_us__; |
912 | #if __STDC_NO_ATOMICS__ | 912 | #if __STDC_NO_ATOMICS__ |
913 | #if __GNUC__ | 913 | #if __GNUC__ |
914 | (void)__sync_lock_test_and_set(map, val); | 914 | (void) __sync_lock_test_and_set (map, val); |
915 | #else | 915 | #else |
916 | *map = val; /* godspeed, pray this is atomic */ | 916 | *map = val; /* godspeed, pray this is atomic */ |
917 | #endif | 917 | #endif |
918 | #else | 918 | #else |
919 | atomic_store(map, val); | 919 | atomic_store (map, val); |
920 | #endif | 920 | #endif |
921 | } | 921 | } |
922 | return now; | 922 | return now; |
923 | } | 923 | } |
924 | 924 | ||
@@ -926,9 +926,9 @@ GNUNET_TIME_absolute_get_monotonic( | |||
926 | /** | 926 | /** |
927 | * Destructor | 927 | * Destructor |
928 | */ | 928 | */ |
929 | void __attribute__ ((destructor)) GNUNET_util_time_fini() | 929 | void __attribute__ ((destructor)) GNUNET_util_time_fini () |
930 | { | 930 | { |
931 | (void)GNUNET_TIME_absolute_get_monotonic(NULL); | 931 | (void) GNUNET_TIME_absolute_get_monotonic (NULL); |
932 | } | 932 | } |
933 | 933 | ||
934 | /* end of time.c */ | 934 | /* end of time.c */ |