xref: /freebsd-src/contrib/ntp/libntp/buftvtots.c (revision 416ba5c74546f32a993436a99516d35008e9f384)
1c0b746e5SOllivier Robert /*
2c0b746e5SOllivier Robert  * buftvtots - pull a Unix-format (struct timeval) time stamp out of
3c0b746e5SOllivier Robert  *	       an octet stream and convert it to a l_fp time stamp.
4c0b746e5SOllivier Robert  *	       This is useful when using the clock line discipline.
5c0b746e5SOllivier Robert  */
6c0b746e5SOllivier Robert 
7c0b746e5SOllivier Robert #ifdef HAVE_CONFIG_H
8c0b746e5SOllivier Robert #include "config.h"
9c0b746e5SOllivier Robert #endif
10c0b746e5SOllivier Robert #include "ntp_fp.h"
11ea906c41SOllivier Robert #include "ntp_string.h"
12*2b15cb3dSCy Schubert #include "timevalops.h"
13c0b746e5SOllivier Robert 
14*2b15cb3dSCy Schubert #ifndef SYS_WINNT
15c0b746e5SOllivier Robert int
buftvtots(const char * bufp,l_fp * ts)16c0b746e5SOllivier Robert buftvtots(
17c0b746e5SOllivier Robert 	const char *bufp,
18c0b746e5SOllivier Robert 	l_fp *ts
19c0b746e5SOllivier Robert 	)
20c0b746e5SOllivier Robert {
21224ba2bdSOllivier Robert 	struct timeval tv;
22c0b746e5SOllivier Robert 
23ea906c41SOllivier Robert 	/*
24ea906c41SOllivier Robert 	 * copy to adhere to alignment restrictions
25ea906c41SOllivier Robert 	 */
26ea906c41SOllivier Robert 	memcpy(&tv, bufp, sizeof(tv));
27c0b746e5SOllivier Robert 
28ea906c41SOllivier Robert 	/*
29ea906c41SOllivier Robert 	 * and use it
30ea906c41SOllivier Robert 	 */
31*2b15cb3dSCy Schubert 	if (tv.tv_usec > MICROSECONDS - 1)
32*2b15cb3dSCy Schubert 		return FALSE;
33*2b15cb3dSCy Schubert 
34*2b15cb3dSCy Schubert 	*ts = tval_stamp_to_lfp(tv);
35*2b15cb3dSCy Schubert 
36*2b15cb3dSCy Schubert 	return TRUE;
37c0b746e5SOllivier Robert }
38*2b15cb3dSCy Schubert #endif	/* !SYS_WINNT */
39