Fix for r281680 -- broke i386 world

Konstantin Belousov kostikbel at gmail.com
Sat Apr 18 15:35:17 UTC 2015


On Sat, Apr 18, 2015 at 08:17:02AM -0700, David Wolfskill wrote:
> Head/amd64 @ r281689 built OK, but my i386 build failed:
> 
> ...
> --- usr.sbin.all__D ---
> --- all_subdir_bluetooth ---
> /usr/src/usr.sbin/bluetooth/hccontrol/le.c:236:4: error: format specifies type 'unsigned long' but the argument has type 'u_int64_t' (aka 'unsigned long long') [-Werror,-Wformat]
>                         rp.le_features);
>                         ^~~~~~~~~~~~~~
> /usr/src/usr.sbin/bluetooth/hccontrol/le.c:253:49: error: format specifies type 'unsigned long' but the argument has type 'u_int64_t' (aka 'unsigned long long') [-Werror,-Wformat]
>         printf("LE_STATUS: %d %d %lx\n", e, rp.status, rp.le_status);
>                                  ~~~                   ^~~~~~~~~~~~
>                                  %llx
> 2 errors generated.
> ....
> 
> 
> The attached patch allows i386 to build, and I then tested to verify
> that amd64 still built.  (I don't have Bluetooth devices, so I
> cannot test its operation.)
> 
> Peace,
> david
> -- 
> David H. Wolfskill				david at catwhisker.org
> Those who murder in the name of God or prophet are blasphemous cowards.
> 
> See http://www.catwhisker.org/~david/publickey.gpg for my public key.

> Index: usr.sbin/bluetooth/hccontrol/le.c
> ===================================================================
> --- usr.sbin/bluetooth/hccontrol/le.c	(revision 281689)
> +++ usr.sbin/bluetooth/hccontrol/le.c	(working copy)
> @@ -232,7 +232,7 @@
>  			NG_HCI_OCF_LE_READ_LOCAL_SUPPORTED_FEATURES), 
>  			(void *)&rp, &n);
>  
> -	printf("LOCAL SUPPORTED: %d %d %lu\n", e, rp.status,
> +	printf("LOCAL SUPPORTED: %d %d %ju\n", e, rp.status,
>  			rp.le_features);
>  
>  	return 0;
> @@ -250,7 +250,7 @@
>  					NG_HCI_OCF_LE_READ_SUPPORTED_STATUS),
>  			       		(void *)&rp, &n);
>  
> -	printf("LE_STATUS: %d %d %lx\n", e, rp.status, rp.le_status);
> +	printf("LE_STATUS: %d %d %jx\n", e, rp.status, rp.le_status);
>  
>  	return 0;
>  }

The j modificator specifies that the type of the argument is (u)intmax_t.
It is only a coincidense that uint64_t is max integer type, the arg should
be casted to uintmax_t.

Could you, please, update and test ?




More information about the freebsd-current mailing list