Subject: Build failure in ntpq.c
To: None <kardel@netbsd.org>
From: Julio M. Merino Vidal <jmmv84@gmail.com>
List: current-users
Date: 06/12/2006 12:23:48
Hi,

[ CC'ing kardel@, who imported the latest ntp code ]

I just got these build failures in current with sources as of a couple
of hours ago:

/usr/src/dist/ntp/ntpq/ntpq.c: In function `decodeint':
/usr/src/dist/ntp/ntpq/ntpq.c:1935: warning: dereferencing type-punned
pointer will break strict-aliasing rules
/usr/src/dist/ntp/ntpq/ntpq.c:1936: warning: dereferencing type-punned
pointer will break strict-aliasing rules

/usr/src/dist/ntp/ntpq/ntpq_ops.c: In function `dogetassoc':
/usr/src/dist/ntp/ntpq/ntpq_ops.c:880: warning: dereferencing
type-punned pointer will break strict-aliasing rules

The following fixed the problem.  Is it correct?

Index: ntpq.c
===================================================================
RCS file: /cvsroot/src/dist/ntp/ntpq/ntpq.c,v
retrieving revision 1.8
diff -u -p -r1.8 ntpq.c
--- ntpq.c	11 Jun 2006 19:34:21 -0000	1.8
+++ ntpq.c	12 Jun 2006 09:59:51 -0000
@@ -1932,8 +1932,8 @@ decodeint(
 {
 	if (*str == '0') {
 		if (*(str+1) == 'x' || *(str+1) == 'X')
-		    return hextoint(str+2, (u_long *)&val);
-		return octtoint(str, (u_long *)&val);
+		    return hextoint(str+2, (u_long *)val);
+		return octtoint(str, (u_long *)val);
 	}
 	return atoint(str, val);
 }

Index: ntpq_ops.c
===================================================================
RCS file: /cvsroot/src/dist/ntp/ntpq/ntpq_ops.c,v
retrieving revision 1.4
diff -u -p -r1.4 ntpq_ops.c
--- ntpq_ops.c	11 Jun 2006 19:34:21 -0000	1.4
+++ ntpq_ops.c	12 Jun 2006 10:21:18 -0000
@@ -871,13 +871,13 @@ dogetassoc(
 	FILE *fp
 	)
 {
-	u_short *datap;
+	char *datap;
 	int res;
 	int dsize;
 	u_short rstatus;

 	res = doquery(CTL_OP_READSTAT, 0, 0, 0, (char *)0, &rstatus,
-			  &dsize, (char **)&datap);
+			  &dsize, &datap);

 	if (res != 0)
 		return 0;
@@ -900,9 +900,9 @@ dogetassoc(

 	numassoc = 0;
 	while (dsize > 0) {
-		assoc_cache[numassoc].assid = ntohs(*datap);
+		assoc_cache[numassoc].assid = ntohs(*((u_short *)datap));
 		datap++;
-		assoc_cache[numassoc].status = ntohs(*datap);
+		assoc_cache[numassoc].status = ntohs(*((u_short *)datap));
 		datap++;
 		if (++numassoc >= MAXASSOC)
 			break;

Thanks.

-- 
Julio M. Merino Vidal <jmmv84@gmail.com>
The Julipedia - http://julipedia.blogspot.com/