🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

2 total messages Started by Steven M. Schultz Wed, 26 Jul 1989 03:57
NTP 3.4.1.6 porting problems +FIX
#13
Author: Steven M. Schultz
Date: Wed, 26 Jul 1989 03:57
164 lines
4437 bytes
	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);
%x vs. %X vs %lx (was: NTP 3.4.1.6 porting problems +FIX)
#15
Author: Steve Summit
Date: Sat, 29 Jul 1989 06:08
16 lines
1289 bytes
In article <34005@wlbr.IMSD.CONTEL.COM> sms@wlv.imsd.contel.com (Steven M. Schultz) writes:
>	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()...

The old code was doubly wrong; %X shouldn't be used to print a
long.  %X, %D, %U, and %O no longer imply a long argument; long
arguments are uniquely indicated with the 'l' modifier: %lx,
%ld, %lu, and %lo.  %X now means "hexadecimal, but use ABCDEF
instead of abcdef."  The other three are undefined.  (The code
presumably worked to print the long result of ntohs() on a
machine with sizeof(int) == sizeof(long).)

                                            Steve Summit
                                            scs@adam.pika.mit.edu
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads