1 /*- 2 * Copyright (c) 2001 FreeBSD Inc. 3 * All rights reserved. 4 * 5 * These routines are for converting time_t to fixed-bit representations 6 * for use in protocols or storage. When converting time to a larger 7 * representation of time_t these routines are expected to assume temporal 8 * locality and use the 50-year rule to properly set the msb bits. XXX 9 * 10 * Redistribution and use under the terms of the COPYRIGHT file at the 11 * base of the source tree. 12 */ 13 14 #include <sys/cdefs.h> 15 __FBSDID("$FreeBSD$"); 16 17 #include <sys/types.h> 18 #include <timeconv.h> 19 20 /* 21 * Convert a 32 bit representation of time_t into time_t. XXX needs to 22 * implement the 50-year rule to handle post-2038 conversions. 23 */ 24 time_t 25 _time32_to_time(__int32_t t32) 26 { 27 return((time_t)t32); 28 } 29 30 /* 31 * Convert time_t to a 32 bit representation. If time_t is 64 bits we can 32 * simply chop it down. The resulting 32 bit representation can be 33 * converted back to a temporally local 64 bit time_t using time32_to_time. 34 */ 35 __int32_t 36 _time_to_time32(time_t t) 37 { 38 return((__int32_t)t); 39 } 40 41 /* 42 * Convert a 64 bit representation of time_t into time_t. If time_t is 43 * represented as 32 bits we can simply chop it and not support times 44 * past 2038. 45 */ 46 time_t 47 _time64_to_time(__int64_t t64) 48 { 49 return((time_t)t64); 50 } 51 52 /* 53 * Convert time_t to a 64 bit representation. If time_t is represented 54 * as 32 bits we simply sign-extend and do not support times past 2038. 55 */ 56 __int64_t 57 _time_to_time64(time_t t) 58 { 59 return((__int64_t)t); 60 } 61 62 /* 63 * Convert to/from 'long'. Depending on the sizeof(long) this may or 64 * may not require using the 50-year rule. 65 */ 66 long 67 _time_to_long(time_t t) 68 { 69 if (sizeof(long) == sizeof(__int64_t)) 70 return(_time_to_time64(t)); 71 return((long)t); 72 } 73 74 time_t 75 _long_to_time(long tlong) 76 { 77 if (sizeof(long) == sizeof(__int32_t)) 78 return(_time32_to_time(tlong)); 79 return((time_t)tlong); 80 } 81 82 /* 83 * Convert to/from 'int'. Depending on the sizeof(int) this may or 84 * may not require using the 50-year rule. 85 */ 86 int 87 _time_to_int(time_t t) 88 { 89 if (sizeof(int) == sizeof(__int64_t)) 90 return(_time_to_time64(t)); 91 return((int)t); 92 } 93 94 time_t 95 _int_to_time(int tint) 96 { 97 if (sizeof(int) == sizeof(__int32_t)) 98 return(_time32_to_time(tint)); 99 return((time_t)tint); 100 } 101