summaryrefslogtreecommitdiff
path: root/src/util/time.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/time.c')
-rw-r--r--src/util/time.c398
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 */
52void 52void
53GNUNET_TIME_set_offset(long long offset) 53GNUNET_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 */
64long long 64long long
65GNUNET_TIME_get_offset() 65GNUNET_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 */
79int 79int
80GNUNET_TIME_round_abs(struct GNUNET_TIME_Absolute *at) 80GNUNET_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 */
99int 99int
100GNUNET_TIME_round_rel(struct GNUNET_TIME_Relative *rt) 100GNUNET_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 */
117struct GNUNET_TIME_Absolute 117struct GNUNET_TIME_Absolute
118GNUNET_TIME_absolute_get() 118GNUNET_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 */
134struct GNUNET_TIME_Relative 134struct GNUNET_TIME_Relative
135GNUNET_TIME_relative_get_zero_() 135GNUNET_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 */
146struct GNUNET_TIME_Absolute 146struct GNUNET_TIME_Absolute
147GNUNET_TIME_absolute_get_zero_() 147GNUNET_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 */
158struct GNUNET_TIME_Relative 158struct GNUNET_TIME_Relative
159GNUNET_TIME_relative_get_unit_() 159GNUNET_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 */
170struct GNUNET_TIME_Relative 170struct GNUNET_TIME_Relative
171GNUNET_TIME_relative_get_millisecond_() 171GNUNET_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 */
182struct GNUNET_TIME_Relative 182struct GNUNET_TIME_Relative
183GNUNET_TIME_relative_get_second_() 183GNUNET_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 */
194struct GNUNET_TIME_Relative 194struct GNUNET_TIME_Relative
195GNUNET_TIME_relative_get_minute_() 195GNUNET_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 */
206struct GNUNET_TIME_Relative 206struct GNUNET_TIME_Relative
207GNUNET_TIME_relative_get_hour_() 207GNUNET_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 */
218struct GNUNET_TIME_Relative 218struct GNUNET_TIME_Relative
219GNUNET_TIME_relative_get_forever_() 219GNUNET_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 */
230struct GNUNET_TIME_Absolute 230struct GNUNET_TIME_Absolute
231GNUNET_TIME_absolute_get_forever_() 231GNUNET_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 */
245struct GNUNET_TIME_Absolute 245struct GNUNET_TIME_Absolute
246GNUNET_TIME_relative_to_absolute(struct GNUNET_TIME_Relative rel) 246GNUNET_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 */
271struct GNUNET_TIME_Relative 271struct GNUNET_TIME_Relative
272GNUNET_TIME_relative_min(struct GNUNET_TIME_Relative t1, 272GNUNET_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 */
286struct GNUNET_TIME_Relative 286struct GNUNET_TIME_Relative
287GNUNET_TIME_relative_max(struct GNUNET_TIME_Relative t1, 287GNUNET_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 */
301struct GNUNET_TIME_Absolute 301struct GNUNET_TIME_Absolute
302GNUNET_TIME_absolute_min(struct GNUNET_TIME_Absolute t1, 302GNUNET_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 */
316struct GNUNET_TIME_Absolute 316struct GNUNET_TIME_Absolute
317GNUNET_TIME_absolute_max(struct GNUNET_TIME_Absolute t1, 317GNUNET_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 */
330struct GNUNET_TIME_Relative 330struct GNUNET_TIME_Relative
331GNUNET_TIME_absolute_get_remaining(struct GNUNET_TIME_Absolute future) 331GNUNET_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 */
352struct GNUNET_TIME_Relative 352struct GNUNET_TIME_Relative
353GNUNET_TIME_absolute_get_difference(struct GNUNET_TIME_Absolute start, 353GNUNET_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 */
372struct GNUNET_TIME_Relative 372struct GNUNET_TIME_Relative
373GNUNET_TIME_absolute_get_duration(struct GNUNET_TIME_Absolute whence) 373GNUNET_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 */
392struct GNUNET_TIME_Absolute 392struct GNUNET_TIME_Absolute
393GNUNET_TIME_absolute_add(struct GNUNET_TIME_Absolute start, 393GNUNET_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 */
419struct GNUNET_TIME_Absolute 419struct GNUNET_TIME_Absolute
420GNUNET_TIME_absolute_subtract(struct GNUNET_TIME_Absolute start, 420GNUNET_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 */
439struct GNUNET_TIME_Relative 439struct GNUNET_TIME_Relative
440GNUNET_TIME_relative_multiply(struct GNUNET_TIME_Relative rel, 440GNUNET_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 */
465struct GNUNET_TIME_Relative 465struct GNUNET_TIME_Relative
466relative_multiply_double(struct GNUNET_TIME_Relative rel, double factor) 466relative_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 */
498struct GNUNET_TIME_Relative 498struct GNUNET_TIME_Relative
499GNUNET_TIME_relative_saturating_multiply(struct GNUNET_TIME_Relative rel, 499GNUNET_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 */
524struct GNUNET_TIME_Relative 524struct GNUNET_TIME_Relative
525GNUNET_TIME_relative_divide(struct GNUNET_TIME_Relative rel, 525GNUNET_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 */
548struct GNUNET_TIME_Relative 548struct GNUNET_TIME_Relative
549GNUNET_TIME_calculate_eta(struct GNUNET_TIME_Absolute start, 549GNUNET_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 */
576struct GNUNET_TIME_Relative 576struct GNUNET_TIME_Relative
577GNUNET_TIME_relative_add(struct GNUNET_TIME_Relative a1, 577GNUNET_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 */
601struct GNUNET_TIME_Relative 601struct GNUNET_TIME_Relative
602GNUNET_TIME_relative_subtract(struct GNUNET_TIME_Relative a1, 602GNUNET_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 */
622struct GNUNET_TIME_RelativeNBO 622struct GNUNET_TIME_RelativeNBO
623GNUNET_TIME_relative_hton(struct GNUNET_TIME_Relative a) 623GNUNET_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 */
638struct GNUNET_TIME_Relative 638struct GNUNET_TIME_Relative
639GNUNET_TIME_relative_ntoh(struct GNUNET_TIME_RelativeNBO a) 639GNUNET_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 */
654struct GNUNET_TIME_AbsoluteNBO 654struct GNUNET_TIME_AbsoluteNBO
655GNUNET_TIME_absolute_hton(struct GNUNET_TIME_Absolute a) 655GNUNET_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 */
670struct GNUNET_TIME_Absolute 670struct GNUNET_TIME_Absolute
671GNUNET_TIME_absolute_ntoh(struct GNUNET_TIME_AbsoluteNBO a) 671GNUNET_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 */
683unsigned int 683unsigned int
684GNUNET_TIME_get_current_year() 684GNUNET_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 */
703unsigned int 703unsigned int
704GNUNET_TIME_time_to_year(struct GNUNET_TIME_Absolute at) 704GNUNET_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 */
723struct GNUNET_TIME_Absolute 723struct GNUNET_TIME_Absolute
724GNUNET_TIME_year_to_time(unsigned int year) 724GNUNET_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 */
757struct GNUNET_TIME_Relative 757struct GNUNET_TIME_Relative
758GNUNET_TIME_randomized_backoff(struct GNUNET_TIME_Relative rt, 758GNUNET_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 */
777struct GNUNET_TIME_Relative 777struct GNUNET_TIME_Relative
778GNUNET_TIME_randomize(struct GNUNET_TIME_Relative r) 778GNUNET_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 */
804struct GNUNET_TIME_Absolute 804struct GNUNET_TIME_Absolute
805GNUNET_TIME_absolute_get_monotonic( 805GNUNET_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 */
929void __attribute__ ((destructor)) GNUNET_util_time_fini() 929void __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 */