NTP 3.4.1.6 porting problems +FIX
Steven M. Schultz
sms at wlv.imsd.contel.com
Wed Jul 26 13:57:04 AEST 1989
In porting NTPD and friends I uncovered a number of
problems, all related to being on a machine where
sizeof (int) != sizeof (long). Using %X to print
the value of ntohs(), assigning longs to ints, and
inconsistent usage of the typedef u_long (for compilers
w/o 'unsigned long'.
With the changes below, 'ntpd', 'ntp', and 'ntpdc' work
quite nicely on a PDP-11 running 2.10.1BSD
Version 3.4.1.6 of NTP
diff -r ntp/Makefile ntp.new/Makefile
62c62
< LDFLAGS=
---
> LDFLAGS= -i
94c94
< FEATURES= -DSETTICKADJ -DDEBUG -DREFCLOCK -DLOG_NTP=LOG_LOCAL3
---
> FEATURES= -DDEBUG -DLOG_NTP=LOG_LOCAL3
96a97,99
> # for 2.10.1BSD
> DEFINES= -DGENERIC_UNS_BUG -DSUN_FLT_BUG
>
98c101
< DEFINES=
---
> #DEFINES=
diff -r ntp/ntp.c ntp.new/ntp.c
269c269
< printf("Synch Distance is %04X.%04x %f\n",
---
> printf("Synch Distance is %04x.%04x %f\n",
274c274
< printf("Synch Dispersion is %04X.%04x %f\n",
---
> printf("Synch Dispersion is %04x.%04x %f\n",
diff -r ntp/ntp.h ntp.new/ntp.h
249c249
< int precision:8;
---
> char precision;
382c382
< int precision:8;
---
> char precision;
413c413,426
<
---
> #ifdef pdp11
> #define double_to_s_fixed Adouble_to_s_fixed
> #define adjtime2 Aadjtime2
> #define kern_tickadj Akern_tickadj
> #define refclock Brefclock
> #define read_clock Aread_clock
> #define drift_comp Adrift_comp
> #define init_clock Ainit_clock
> #define stratums Astratums
> #define peer_switches Apeer_switches
> #define refclock_input Arefclock_input
> #define read_clock_local Bread_clock_local
> #define init_clock_local Binit_clock_local
> #endif
diff -r ntp/ntp_proto.c ntp.new/ntp_proto.c
141c141
< extern unsigned long clock_watchdog;
---
> extern u_long clock_watchdog;
601c601
< delay += 1.0/(unsigned long)(1L << -sys.precision)
---
> delay += 1.0/(u_long)(1L << -sys.precision)
608c608
< delay += 1.0/(unsigned long)(1L << -peer->precision);
---
> delay += 1.0/(u_long)(1L << -peer->precision);
626c626
< printf("host: %s : %f : %f : %f : %f : %f : %o\n",
---
> printf("host: %s : %f : %f : %f : %f : %f : %lo\n",
841c841
< ((double)rand()/(double)((unsigned long)(1L<<31) - 1));
---
> ((double)rand()/(double)((u_long)(1L<<31) - 1));
diff -r ntp/ntpd.c ntp.new/ntpd.c
151c151
< unsigned long clock_watchdog;
---
> u_long clock_watchdog;
158d157
< extern double s_fixed_to_double(), ul_fixed_to_double();
485c484
< printf("Synch Dist is %04X.%04X Synch Dispersion is %04X.%04X\n",
---
> printf("Synch Dist is %04x.%04x Synch Dispersion is %04x.%04x\n",
1273c1272
< cip->reach = htons(peer->reach & NTP_WINDOW_SHIFT_MASK);
---
> cip->reach = htons((u_short)peer->reach & NTP_WINDOW_SHIFT_MASK);
1359c1358
< "%+12.10f %+12.10f %+12.10f %+12.10f %+12.10f %4d\n",
---
> "%12.10f %12.10f %12.10f %12.10f %12.10f %4d\n",
diff -r ntp/ntpdc.c ntp.new/ntpdc.c
115a116,118
> #ifdef pdp11
> int on = 4*1024;
> #else
116a120
> #endif
diff -r ntp/ntpsubs.c ntp.new/ntpsubs.c
72c72
< register int i;
---
> long i;
86c86
< a = (unsigned long) ntohl(t->fraction);
---
> a = (u_long) ntohl(t->fraction);
91c91
< b = (unsigned long) ntohl(t->int_part);
---
> b = (u_long) ntohl(t->int_part);
219c219
< int tt;
---
> long tt;
diff -r ntp/test.c ntp.new/test.c
100c100
< printf(" x%#8X.%#8X ", sample.int_part, sample.fraction);
---
> printf(" x%8X.%8X ", sample.int_part, sample.fraction);
106c106
< printf(" x%#4X.%#4X ", s_sample.int_part, s_sample.fraction);
---
> printf(" x%4x.%4x ", s_sample.int_part, s_sample.fraction);
131c131
< unsigned long ul = 0x80000001;
---
> u_long ul = 0x80000001;
167c167
< int l = 1.5 * dbl;
---
> long l = 1.5 * dbl;
173c173
< printf("test4: 3.0*1024.0*1024.0*1024.0 = 0x%08x\n", ul);
---
> printf("test4: 3.0*1024.0*1024.0*1024.0 = 0x%08lx\n", ul);
More information about the Comp.bugs.2bsd
mailing list