aboutsummaryrefslogtreecommitdiff
path: root/src/util/time.c
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2010-10-27 09:21:14 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2010-10-27 09:21:14 +0000
commit71f77f1be3d6e2da1b88fe4a4fdd44c3c69b5325 (patch)
tree5570130fdab90ad02f4b5bfda414d13161f0f3d1 /src/util/time.c
parent1d7368a52af332af35ec6de22affef4f5f0c1da4 (diff)
downloadgnunet-71f77f1be3d6e2da1b88fe4a4fdd44c3c69b5325.tar.gz
gnunet-71f77f1be3d6e2da1b88fe4a4fdd44c3c69b5325.zip
Changed GNUNET_TIME_Absolute and GNUNET_TIME_Relative to allow safe comparisons between time values
Diffstat (limited to 'src/util/time.c')
-rw-r--r--src/util/time.c80
1 files changed, 40 insertions, 40 deletions
diff --git a/src/util/time.c b/src/util/time.c
index 6a5a314da..d2e25d059 100644
--- a/src/util/time.c
+++ b/src/util/time.c
@@ -40,7 +40,7 @@ GNUNET_TIME_absolute_get ()
40 struct timeval tv; 40 struct timeval tv;
41 41
42 GETTIMEOFDAY (&tv, NULL); 42 GETTIMEOFDAY (&tv, NULL);
43 ret.value = 43 ret.abs_value =
44 (uint64_t) (((uint64_t) tv.tv_sec * 1000LL) + 44 (uint64_t) (((uint64_t) tv.tv_sec * 1000LL) +
45 ((uint64_t) tv.tv_usec / 1000LL)); 45 ((uint64_t) tv.tv_usec / 1000LL));
46 return ret; 46 return ret;
@@ -108,15 +108,15 @@ struct GNUNET_TIME_Absolute
108GNUNET_TIME_relative_to_absolute (struct GNUNET_TIME_Relative rel) 108GNUNET_TIME_relative_to_absolute (struct GNUNET_TIME_Relative rel)
109{ 109{
110 struct GNUNET_TIME_Absolute ret; 110 struct GNUNET_TIME_Absolute ret;
111 if (rel.value == UINT64_MAX) 111 if (rel.rel_value == UINT64_MAX)
112 return GNUNET_TIME_absolute_get_forever (); 112 return GNUNET_TIME_absolute_get_forever ();
113 struct GNUNET_TIME_Absolute now = GNUNET_TIME_absolute_get (); 113 struct GNUNET_TIME_Absolute now = GNUNET_TIME_absolute_get ();
114 if (rel.value + now.value < rel.value) 114 if (rel.rel_value + now.abs_value < rel.rel_value)
115 { 115 {
116 GNUNET_break (0); /* overflow... */ 116 GNUNET_break (0); /* overflow... */
117 return GNUNET_TIME_absolute_get_forever (); 117 return GNUNET_TIME_absolute_get_forever ();
118 } 118 }
119 ret.value = rel.value + now.value; 119 ret.abs_value = rel.rel_value + now.abs_value;
120 return ret; 120 return ret;
121} 121}
122 122
@@ -133,7 +133,7 @@ GNUNET_TIME_relative_min (struct
133 GNUNET_TIME_Relative 133 GNUNET_TIME_Relative
134 t1, struct GNUNET_TIME_Relative t2) 134 t1, struct GNUNET_TIME_Relative t2)
135{ 135{
136 return (t1.value < t2.value) ? t1 : t2; 136 return (t1.rel_value < t2.rel_value) ? t1 : t2;
137} 137}
138 138
139 139
@@ -149,7 +149,7 @@ GNUNET_TIME_relative_max (struct
149 GNUNET_TIME_Relative 149 GNUNET_TIME_Relative
150 t1, struct GNUNET_TIME_Relative t2) 150 t1, struct GNUNET_TIME_Relative t2)
151{ 151{
152 return (t1.value > t2.value) ? t1 : t2; 152 return (t1.rel_value > t2.rel_value) ? t1 : t2;
153} 153}
154 154
155 155
@@ -166,7 +166,7 @@ GNUNET_TIME_absolute_min (struct
166 GNUNET_TIME_Absolute 166 GNUNET_TIME_Absolute
167 t1, struct GNUNET_TIME_Absolute t2) 167 t1, struct GNUNET_TIME_Absolute t2)
168{ 168{
169 return (t1.value < t2.value) ? t1 : t2; 169 return (t1.abs_value < t2.abs_value) ? t1 : t2;
170} 170}
171 171
172 172
@@ -182,7 +182,7 @@ GNUNET_TIME_absolute_max (struct
182 GNUNET_TIME_Absolute 182 GNUNET_TIME_Absolute
183 t1, struct GNUNET_TIME_Absolute t2) 183 t1, struct GNUNET_TIME_Absolute t2)
184{ 184{
185 return (t1.value > t2.value) ? t1 : t2; 185 return (t1.abs_value > t2.abs_value) ? t1 : t2;
186} 186}
187 187
188 188
@@ -196,12 +196,12 @@ struct GNUNET_TIME_Relative
196GNUNET_TIME_absolute_get_remaining (struct GNUNET_TIME_Absolute future) 196GNUNET_TIME_absolute_get_remaining (struct GNUNET_TIME_Absolute future)
197{ 197{
198 struct GNUNET_TIME_Relative ret; 198 struct GNUNET_TIME_Relative ret;
199 if (future.value == UINT64_MAX) 199 if (future.abs_value == UINT64_MAX)
200 return GNUNET_TIME_relative_get_forever (); 200 return GNUNET_TIME_relative_get_forever ();
201 struct GNUNET_TIME_Absolute now = GNUNET_TIME_absolute_get (); 201 struct GNUNET_TIME_Absolute now = GNUNET_TIME_absolute_get ();
202 if (now.value > future.value) 202 if (now.abs_value > future.abs_value)
203 return GNUNET_TIME_relative_get_zero (); 203 return GNUNET_TIME_relative_get_zero ();
204 ret.value = future.value - now.value; 204 ret.rel_value = future.abs_value - now.abs_value;
205 return ret; 205 return ret;
206} 206}
207 207
@@ -217,11 +217,11 @@ GNUNET_TIME_absolute_get_difference (struct GNUNET_TIME_Absolute start,
217 struct GNUNET_TIME_Absolute end) 217 struct GNUNET_TIME_Absolute end)
218{ 218{
219 struct GNUNET_TIME_Relative ret; 219 struct GNUNET_TIME_Relative ret;
220 if (end.value == UINT64_MAX) 220 if (end.abs_value == UINT64_MAX)
221 return GNUNET_TIME_relative_get_forever (); 221 return GNUNET_TIME_relative_get_forever ();
222 if (end.value < start.value) 222 if (end.abs_value < start.abs_value)
223 return GNUNET_TIME_relative_get_zero (); 223 return GNUNET_TIME_relative_get_zero ();
224 ret.value = end.value - start.value; 224 ret.rel_value = end.abs_value - start.abs_value;
225 return ret; 225 return ret;
226} 226}
227 227
@@ -238,10 +238,10 @@ GNUNET_TIME_absolute_get_duration (struct GNUNET_TIME_Absolute hence)
238 struct GNUNET_TIME_Relative ret; 238 struct GNUNET_TIME_Relative ret;
239 239
240 now = GNUNET_TIME_absolute_get (); 240 now = GNUNET_TIME_absolute_get ();
241 GNUNET_assert (hence.value != UINT64_MAX); 241 GNUNET_assert (hence.abs_value != UINT64_MAX);
242 if (hence.value > now.value) 242 if (hence.abs_value > now.abs_value)
243 return GNUNET_TIME_relative_get_zero (); 243 return GNUNET_TIME_relative_get_zero ();
244 ret.value = now.value - hence.value; 244 ret.rel_value = now.abs_value - hence.abs_value;
245 return ret; 245 return ret;
246} 246}
247 247
@@ -258,15 +258,15 @@ GNUNET_TIME_absolute_add (struct GNUNET_TIME_Absolute start,
258{ 258{
259 struct GNUNET_TIME_Absolute ret; 259 struct GNUNET_TIME_Absolute ret;
260 260
261 if ((start.value == UINT64_MAX) || 261 if ((start.abs_value == UINT64_MAX) ||
262 (duration.value == UINT64_MAX)) 262 (duration.rel_value == UINT64_MAX))
263 return GNUNET_TIME_absolute_get_forever (); 263 return GNUNET_TIME_absolute_get_forever ();
264 if (start.value + duration.value < start.value) 264 if (start.abs_value + duration.rel_value < start.abs_value)
265 { 265 {
266 GNUNET_break (0); 266 GNUNET_break (0);
267 return GNUNET_TIME_absolute_get_forever (); 267 return GNUNET_TIME_absolute_get_forever ();
268 } 268 }
269 ret.value = start.value + duration.value; 269 ret.abs_value = start.abs_value + duration.rel_value;
270 return ret; 270 return ret;
271} 271}
272 272
@@ -288,11 +288,11 @@ GNUNET_TIME_absolute_subtract (struct
288 duration) 288 duration)
289{ 289{
290 struct GNUNET_TIME_Absolute ret; 290 struct GNUNET_TIME_Absolute ret;
291 if (start.value <= duration.value) 291 if (start.abs_value <= duration.rel_value)
292 return GNUNET_TIME_UNIT_ZERO_ABS; 292 return GNUNET_TIME_UNIT_ZERO_ABS;
293 if (start.value == GNUNET_TIME_UNIT_FOREVER_ABS.value) 293 if (start.abs_value == GNUNET_TIME_UNIT_FOREVER_ABS.abs_value)
294 return GNUNET_TIME_UNIT_FOREVER_ABS; 294 return GNUNET_TIME_UNIT_FOREVER_ABS;
295 ret.value = start.value - duration.value; 295 ret.abs_value = start.abs_value - duration.rel_value;
296 return ret; 296 return ret;
297} 297}
298 298
@@ -309,8 +309,8 @@ GNUNET_TIME_relative_multiply (struct GNUNET_TIME_Relative rel,
309 struct GNUNET_TIME_Relative ret; 309 struct GNUNET_TIME_Relative ret;
310 if (factor == 0) 310 if (factor == 0)
311 return GNUNET_TIME_relative_get_zero (); 311 return GNUNET_TIME_relative_get_zero ();
312 ret.value = rel.value * (unsigned long long) factor; 312 ret.rel_value = rel.rel_value * (unsigned long long) factor;
313 if (ret.value / factor != rel.value) 313 if (ret.rel_value / factor != rel.rel_value)
314 { 314 {
315 GNUNET_break (0); 315 GNUNET_break (0);
316 return GNUNET_TIME_relative_get_forever (); 316 return GNUNET_TIME_relative_get_forever ();
@@ -332,9 +332,9 @@ GNUNET_TIME_relative_divide (struct GNUNET_TIME_Relative rel,
332{ 332{
333 struct GNUNET_TIME_Relative ret; 333 struct GNUNET_TIME_Relative ret;
334 if ( (factor == 0) || 334 if ( (factor == 0) ||
335 (rel.value == GNUNET_TIME_UNIT_FOREVER_REL.value) ) 335 (rel.rel_value == GNUNET_TIME_UNIT_FOREVER_REL.rel_value) )
336 return GNUNET_TIME_UNIT_FOREVER_REL; 336 return GNUNET_TIME_UNIT_FOREVER_REL;
337 ret.value = rel.value / (unsigned long long) factor; 337 ret.rel_value = rel.rel_value / (unsigned long long) factor;
338 return ret; 338 return ret;
339} 339}
340 340
@@ -363,8 +363,8 @@ GNUNET_TIME_calculate_eta (struct GNUNET_TIME_Absolute start,
363 if (finished == 0) 363 if (finished == 0)
364 return GNUNET_TIME_UNIT_FOREVER_REL; 364 return GNUNET_TIME_UNIT_FOREVER_REL;
365 dur = GNUNET_TIME_absolute_get_duration (start); 365 dur = GNUNET_TIME_absolute_get_duration (start);
366 exp = ((double) dur.value) * ((double) total) / ((double) finished); 366 exp = ((double) dur.rel_value) * ((double) total) / ((double) finished);
367 ret.value = ((uint64_t) exp) - dur.value; 367 ret.rel_value = ((uint64_t) exp) - dur.rel_value;
368 return ret; 368 return ret;
369} 369}
370 370
@@ -382,14 +382,14 @@ GNUNET_TIME_relative_add (struct GNUNET_TIME_Relative a1,
382{ 382{
383 struct GNUNET_TIME_Relative ret; 383 struct GNUNET_TIME_Relative ret;
384 384
385 if ((a1.value == UINT64_MAX) || (a2.value == UINT64_MAX)) 385 if ((a1.rel_value == UINT64_MAX) || (a2.rel_value == UINT64_MAX))
386 return GNUNET_TIME_relative_get_forever (); 386 return GNUNET_TIME_relative_get_forever ();
387 if (a1.value + a2.value < a1.value) 387 if (a1.rel_value + a2.rel_value < a1.rel_value)
388 { 388 {
389 GNUNET_break (0); 389 GNUNET_break (0);
390 return GNUNET_TIME_relative_get_forever (); 390 return GNUNET_TIME_relative_get_forever ();
391 } 391 }
392 ret.value = a1.value + a2.value; 392 ret.rel_value = a1.rel_value + a2.rel_value;
393 return ret; 393 return ret;
394} 394}
395 395
@@ -407,11 +407,11 @@ GNUNET_TIME_relative_subtract (struct GNUNET_TIME_Relative a1,
407{ 407{
408 struct GNUNET_TIME_Relative ret; 408 struct GNUNET_TIME_Relative ret;
409 409
410 if (a2.value >= a1.value) 410 if (a2.rel_value >= a1.rel_value)
411 return GNUNET_TIME_relative_get_zero (); 411 return GNUNET_TIME_relative_get_zero ();
412 if (a1.value == UINT64_MAX) 412 if (a1.rel_value == UINT64_MAX)
413 return GNUNET_TIME_relative_get_forever (); 413 return GNUNET_TIME_relative_get_forever ();
414 ret.value = a1.value - a2.value; 414 ret.rel_value = a1.rel_value - a2.rel_value;
415 return ret; 415 return ret;
416} 416}
417 417
@@ -426,7 +426,7 @@ struct GNUNET_TIME_RelativeNBO
426GNUNET_TIME_relative_hton (struct GNUNET_TIME_Relative a) 426GNUNET_TIME_relative_hton (struct GNUNET_TIME_Relative a)
427{ 427{
428 struct GNUNET_TIME_RelativeNBO ret; 428 struct GNUNET_TIME_RelativeNBO ret;
429 ret.value__ = GNUNET_htonll (a.value); 429 ret.value__ = GNUNET_htonll (a.rel_value);
430 return ret; 430 return ret;
431} 431}
432 432
@@ -440,7 +440,7 @@ struct GNUNET_TIME_Relative
440GNUNET_TIME_relative_ntoh (struct GNUNET_TIME_RelativeNBO a) 440GNUNET_TIME_relative_ntoh (struct GNUNET_TIME_RelativeNBO a)
441{ 441{
442 struct GNUNET_TIME_Relative ret; 442 struct GNUNET_TIME_Relative ret;
443 ret.value = GNUNET_ntohll (a.value__); 443 ret.rel_value = GNUNET_ntohll (a.value__);
444 return ret; 444 return ret;
445 445
446} 446}
@@ -455,7 +455,7 @@ struct GNUNET_TIME_AbsoluteNBO
455GNUNET_TIME_absolute_hton (struct GNUNET_TIME_Absolute a) 455GNUNET_TIME_absolute_hton (struct GNUNET_TIME_Absolute a)
456{ 456{
457 struct GNUNET_TIME_AbsoluteNBO ret; 457 struct GNUNET_TIME_AbsoluteNBO ret;
458 ret.value__ = GNUNET_htonll (a.value); 458 ret.value__ = GNUNET_htonll (a.abs_value);
459 return ret; 459 return ret;
460} 460}
461 461
@@ -469,7 +469,7 @@ struct GNUNET_TIME_Absolute
469GNUNET_TIME_absolute_ntoh (struct GNUNET_TIME_AbsoluteNBO a) 469GNUNET_TIME_absolute_ntoh (struct GNUNET_TIME_AbsoluteNBO a)
470{ 470{
471 struct GNUNET_TIME_Absolute ret; 471 struct GNUNET_TIME_Absolute ret;
472 ret.value = GNUNET_ntohll (a.value__); 472 ret.abs_value = GNUNET_ntohll (a.value__);
473 return ret; 473 return ret;
474 474
475} 475}