- ND_PRINT((ndo, "%d.%06d", i, f));
-}
-
-#define FMAXINT (4294967296.0) /* floating point rep. of MAXINT */
-
-static void
-p_ntp_time(netdissect_options *ndo,
- register const struct l_fixedpt *lfp)
-{
- register uint32_t i;
- register uint32_t uf;
- register uint32_t f;
- register double ff;
-
- i = EXTRACT_BE_32BITS(&lfp->int_part);
- uf = EXTRACT_BE_32BITS(&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((ndo, "%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((ndo, " (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((ndo, " (unrepresentable)"));
- } else {
- /* use ISO 8601 (RFC3339) format */
- strftime(time_buf, sizeof (time_buf), "%Y-%m-%dT%H:%M:%S", tm);
- ND_PRINT((ndo, " (%s)", time_buf));
- }
- }
- }
-#endif