ulib Time utilities, expose time() syscall
This commit is contained in:
@ -16,6 +16,7 @@ SRCFILES := $(call GRABSRC, \
|
|||||||
ubsan \
|
ubsan \
|
||||||
umalloc \
|
umalloc \
|
||||||
fs \
|
fs \
|
||||||
|
time \
|
||||||
)
|
)
|
||||||
|
|
||||||
CFLAGS += -isystem $(ROOT)/share -isystem $(ROOT)/ulib -isystem $(ROOT)/std/include \
|
CFLAGS += -isystem $(ROOT)/share -isystem $(ROOT)/ulib -isystem $(ROOT)/std/include \
|
||||||
|
|||||||
@ -138,3 +138,7 @@ int32_t dev_stat(DevStat *devstatbuf, size_t idx) {
|
|||||||
int32_t dev_cmd(Dev_t *dev, uint64_t cmd, void *buf, size_t len, void *extra) {
|
int32_t dev_cmd(Dev_t *dev, uint64_t cmd, void *buf, size_t len, void *extra) {
|
||||||
return syscall(SYS_DEV_CMD, (uint64_t)dev, (uint64_t)cmd, (uint64_t)buf, (uint64_t)len, (uint64_t)extra, 0);
|
return syscall(SYS_DEV_CMD, (uint64_t)dev, (uint64_t)cmd, (uint64_t)buf, (uint64_t)len, (uint64_t)extra, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t time(Time *time) {
|
||||||
|
return syscall(SYS_TIME, (uint64_t)time, 0, 0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
|||||||
@ -7,6 +7,7 @@
|
|||||||
#include <sysdefs/dev.h>
|
#include <sysdefs/dev.h>
|
||||||
#include <sysdefs/proc.h>
|
#include <sysdefs/proc.h>
|
||||||
#include <sysdefs/fs.h>
|
#include <sysdefs/fs.h>
|
||||||
|
#include <sysdefs/time.h>
|
||||||
|
|
||||||
void debugprint(const char *string);
|
void debugprint(const char *string);
|
||||||
int32_t mman_map(uint8_t *addr, size_t size, uint64_t prot, uint64_t flags, uint8_t **out);
|
int32_t mman_map(uint8_t *addr, size_t size, uint64_t prot, uint64_t flags, uint8_t **out);
|
||||||
@ -41,5 +42,6 @@ int32_t dev_gethandle(Dev_t *dev, char *name);
|
|||||||
int32_t dev_listsize(void);
|
int32_t dev_listsize(void);
|
||||||
int32_t dev_stat(DevStat *devstatbuf, size_t idx);
|
int32_t dev_stat(DevStat *devstatbuf, size_t idx);
|
||||||
int32_t dev_cmd(Dev_t *dev, uint64_t cmd, void *buf, size_t len, void *extra);
|
int32_t dev_cmd(Dev_t *dev, uint64_t cmd, void *buf, size_t len, void *extra);
|
||||||
|
int32_t time(Time *time);
|
||||||
|
|
||||||
#endif // ULIB_SYSTEM_SYSTEM_H_
|
#endif // ULIB_SYSTEM_SYSTEM_H_
|
||||||
|
|||||||
31
ulib/time/time.c
Normal file
31
ulib/time/time.c
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <sysdefs/time.h>
|
||||||
|
|
||||||
|
bool time_isleap(uint32_t y) {
|
||||||
|
return ((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
const uint16_t days_before_month[12] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };
|
||||||
|
|
||||||
|
timeunix_t time_tounix(Time *time) {
|
||||||
|
uint64_t days = 0;
|
||||||
|
for (uint32_t y = 1970; y < time->year; y++) {
|
||||||
|
days += time_isleap(y) ? 366 : 365;
|
||||||
|
}
|
||||||
|
|
||||||
|
days += days_before_month[time->month - 1];
|
||||||
|
|
||||||
|
if (time->month > 2 && time_isleap(time->year)) {
|
||||||
|
days += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
days += time->day - 1;
|
||||||
|
|
||||||
|
uint64_t secs = days * 86400;
|
||||||
|
secs += time->hour * 3600;
|
||||||
|
secs += time->minute * 60;
|
||||||
|
secs += time->second;
|
||||||
|
return secs;
|
||||||
|
}
|
||||||
8
ulib/time/time.h
Normal file
8
ulib/time/time.h
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#ifndef ULIB_TIME_TIME_H_
|
||||||
|
#define ULIB_TIME_TIME_H_
|
||||||
|
|
||||||
|
#include <sysdefs/time.h>
|
||||||
|
|
||||||
|
timeunix_t time_tounix(Time *time);
|
||||||
|
|
||||||
|
#endif // ULIB_TIME_TIME_H_
|
||||||
@ -11,12 +11,13 @@
|
|||||||
#include <syscall/syscall.h>
|
#include <syscall/syscall.h>
|
||||||
#include <system/system.h>
|
#include <system/system.h>
|
||||||
#include <util/util.h>
|
#include <util/util.h>
|
||||||
|
#include <umalloc/umalloc.h>
|
||||||
|
#include <fs/path.h>
|
||||||
|
#include <time/time.h>
|
||||||
#include <uprintf.h>
|
#include <uprintf.h>
|
||||||
#include <linklist.h>
|
#include <linklist.h>
|
||||||
#include <log.h>
|
#include <log.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <umalloc/umalloc.h>
|
|
||||||
#include <fs/path.h>
|
|
||||||
#include <dlinklist.h>
|
#include <dlinklist.h>
|
||||||
|
|
||||||
#include <errors.h>
|
#include <errors.h>
|
||||||
@ -25,6 +26,7 @@
|
|||||||
#include <sysdefs/mman.h>
|
#include <sysdefs/mman.h>
|
||||||
#include <sysdefs/proc.h>
|
#include <sysdefs/proc.h>
|
||||||
#include <sysdefs/sched.h>
|
#include <sysdefs/sched.h>
|
||||||
|
#include <sysdefs/time.h>
|
||||||
#include <sysdefs/syscall.h>
|
#include <sysdefs/syscall.h>
|
||||||
|
|
||||||
#endif // ULIB_ULIB_H_
|
#endif // ULIB_ULIB_H_
|
||||||
|
|||||||
Reference in New Issue
Block a user