mirror of https://github.com/ipxe/ipxe.git
[time] Allow system clock to be adjusted at runtime
Provide a mechanism to allow an arbitrary adjustment to be applied to all subsequent calls to time(). Note that the underlying clock source (e.g. the RTC clock) will not be changed; only the time as reported within iPXE will be affected. Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/56/head
parent
02d5cfff22
commit
e6111c1517
|
@ -43,6 +43,9 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
|
||||||
* 400.
|
* 400.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/** Current system clock offset */
|
||||||
|
signed long time_offset;
|
||||||
|
|
||||||
/** Days of week (for debugging) */
|
/** Days of week (for debugging) */
|
||||||
static const char *weekdays[] = {
|
static const char *weekdays[] = {
|
||||||
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
|
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
|
||||||
|
|
|
@ -50,11 +50,24 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
|
||||||
/* Include all architecture-dependent time API headers */
|
/* Include all architecture-dependent time API headers */
|
||||||
#include <bits/time.h>
|
#include <bits/time.h>
|
||||||
|
|
||||||
|
extern signed long time_offset;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get current time in seconds
|
* Get current time in seconds (ignoring system clock offset)
|
||||||
*
|
*
|
||||||
* @ret time Time, in seconds
|
* @ret time Time, in seconds
|
||||||
*/
|
*/
|
||||||
time_t time_now ( void );
|
time_t time_now ( void );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adjust system clock
|
||||||
|
*
|
||||||
|
* @v delta Clock adjustment, in seconds
|
||||||
|
*/
|
||||||
|
static inline __attribute__ (( always_inline )) void
|
||||||
|
time_adjust ( signed long delta ) {
|
||||||
|
|
||||||
|
time_offset += delta;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* _IPXE_TIME_H */
|
#endif /* _IPXE_TIME_H */
|
||||||
|
|
|
@ -39,10 +39,10 @@ struct tm {
|
||||||
* @v t Time to fill in, or NULL
|
* @v t Time to fill in, or NULL
|
||||||
* @ret time Current time
|
* @ret time Current time
|
||||||
*/
|
*/
|
||||||
static inline time_t time ( time_t *t ) {
|
static inline __attribute__ (( always_inline )) time_t time ( time_t *t ) {
|
||||||
time_t now;
|
time_t now;
|
||||||
|
|
||||||
now = time_now();
|
now = ( time_now() + time_offset );
|
||||||
if ( t )
|
if ( t )
|
||||||
*t = now;
|
*t = now;
|
||||||
return now;
|
return now;
|
||||||
|
|
Loading…
Reference in New Issue