xref: /aosp_15_r20/external/musl/compat/time32/ftime32.c (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
1*c9945492SAndroid Build Coastguard Worker #include "time32.h"
2*c9945492SAndroid Build Coastguard Worker #include <sys/timeb.h>
3*c9945492SAndroid Build Coastguard Worker #include <errno.h>
4*c9945492SAndroid Build Coastguard Worker #include <stdint.h>
5*c9945492SAndroid Build Coastguard Worker 
6*c9945492SAndroid Build Coastguard Worker struct timeb32 {
7*c9945492SAndroid Build Coastguard Worker 	int32_t time;
8*c9945492SAndroid Build Coastguard Worker 	unsigned short millitm;
9*c9945492SAndroid Build Coastguard Worker 	short timezone, dstflag;
10*c9945492SAndroid Build Coastguard Worker };
11*c9945492SAndroid Build Coastguard Worker 
__ftime32(struct timeb32 * tp)12*c9945492SAndroid Build Coastguard Worker int __ftime32(struct timeb32 *tp)
13*c9945492SAndroid Build Coastguard Worker {
14*c9945492SAndroid Build Coastguard Worker 	struct timeb tb;
15*c9945492SAndroid Build Coastguard Worker 	if (ftime(&tb) < 0) return -1;
16*c9945492SAndroid Build Coastguard Worker 	if (tb.time < INT32_MIN || tb.time > INT32_MAX) {
17*c9945492SAndroid Build Coastguard Worker 		errno = EOVERFLOW;
18*c9945492SAndroid Build Coastguard Worker 		return -1;
19*c9945492SAndroid Build Coastguard Worker 	}
20*c9945492SAndroid Build Coastguard Worker 	tp->time = tb.time;
21*c9945492SAndroid Build Coastguard Worker 	tp->millitm = tb.millitm;
22*c9945492SAndroid Build Coastguard Worker 	tp->timezone = tb.timezone;
23*c9945492SAndroid Build Coastguard Worker 	tp->dstflag = tb.dstflag;
24*c9945492SAndroid Build Coastguard Worker 	return 0;
25*c9945492SAndroid Build Coastguard Worker }
26