-#define FMAXINT (4294967296.0) /* floating point rep. of MAXINT */
-
-static void
-p_ntp_time(netdissect_options *ndo,
- const struct l_fixedpt *lfp)
-{
- uint32_t i;
- uint32_t uf;
- uint32_t f;
- double ff;
-
- i = EXTRACT_BE_U_4(&lfp->int_part);
- uf = EXTRACT_BE_U_4(&lfp->fraction);
- ff = uf;
- if (ff < 0.0) /* some compilers are buggy */
- ff += FMAXINT;
- ff = ff / FMAXINT; /* shift radix point by 32 bits */
- f = (uint32_t)(ff * 1000000000.0); /* treat fraction as parts per billion */
- ND_PRINT("%u.%09d", i, f);
-
-#ifdef HAVE_STRFTIME
- /*
- * print the UTC time in human-readable format.
- */
- if (i) {
- int64_t seconds_64bit = (int64_t)i - JAN_1970;
- time_t seconds;
- struct tm *tm;
- char time_buf[128];
-
- seconds = (time_t)seconds_64bit;
- if (seconds != seconds_64bit) {
- /*
- * It doesn't fit into a time_t, so we can't hand it
- * to gmtime.
- */
- ND_PRINT(" (unrepresentable)");
- } else {
- tm = gmtime(&seconds);
- if (tm == NULL) {
- /*
- * gmtime() can't handle it.
- * (Yes, that might happen with some version of
- * Microsoft's C library.)
- */
- ND_PRINT(" (unrepresentable)");
- } else {
- /* use ISO 8601 (RFC3339) format */
- strftime(time_buf, sizeof (time_buf), "%Y-%m-%dT%H:%M:%S", tm);
- ND_PRINT(" (%s)", time_buf);
- }
- }
- }
-#endif
-}
-