david/ipxe
david
/
ipxe
Archived
1
0
Fork 0

[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>
This commit is contained in:
Michael Brown 2016-06-13 15:29:05 +01:00
parent 02d5cfff22
commit e6111c1517
3 changed files with 19 additions and 3 deletions

View File

@ -43,6 +43,9 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
* 400.
*/
/** Current system clock offset */
signed long time_offset;
/** Days of week (for debugging) */
static const char *weekdays[] = {
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"

View File

@ -50,11 +50,24 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
/* Include all architecture-dependent time API headers */
#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
*/
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 */

View File

@ -39,10 +39,10 @@ struct tm {
* @v t Time to fill in, or NULL
* @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;
now = time_now();
now = ( time_now() + time_offset );
if ( t )
*t = now;
return now;