Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 30 Apr 2005 11:29:16 -0400
From:      Brian Fundakowski Feldman <green@FreeBSD.org>
To:        Robert Watson <rwatson@FreeBSD.org>
Cc:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   Re: PERFORCE change 76270 for review
Message-ID:  <20050430152916.GG39270@green.homeunix.org>
In-Reply-To: <200504301312.j3UDCRxB061197@repoman.freebsd.org>
References:  <200504301312.j3UDCRxB061197@repoman.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, Apr 30, 2005 at 01:12:28PM +0000, Robert Watson wrote:
> http://perforce.freebsd.org/chv.cgi?CH=76270
> 
> Change 76270 by rwatson@rwatson_paprika on 2005/04/30 13:11:27
> 
> 	Darwin 8.0 has 64-bit file ID's, so improve support for that.
> 
> Affected files ...
> 
> .. //depot/projects/trustedbsd/openbsm/libbsm/bsm_token.c#9 edit
> 
> Differences ...
> 
> ==== //depot/projects/trustedbsd/openbsm/libbsm/bsm_token.c#9 (text+ko) ====
> 
> @@ -181,12 +181,20 @@
>  	ADD_U_INT32(dptr, attr->va_gid);
>  	ADD_U_INT32(dptr, attr->va_fsid);
>  
> -	/* 
> -	 * Darwin defines the size for fileid 
> -	 * as 4 bytes; BSM defines 8 so pad with 0
> -	 */    
> -	ADD_U_INT32(dptr, pad0_32);
> -	ADD_U_INT32(dptr, attr->va_fileid);
> +	/*
> +	 * Some systems use 32-bit file ID's, other's use 64-bit file IDs.
> +	 * Attempt to handle both, and let the compiler sort it out.  If we
> +	 * could pick this out at compile-time, it would be better, so as to
> +	 * avoid the else case below.
> +	 */
> +	if (sizeof(attr->va_fileid) == sizeof(uint32_t)) {
> +		ADD_U_INT32(dptr, pad0_32);
> +		ADD_U_INT32(dptr, attr->va_fileid);
> +	} else if (sizeof(attr->va_fileid) == sizeof(uint64_t)) {
> +		ADD_U_INT64(dptr, attr->va_fileid);
> +	} else {
> +		ADD_U_INT64(dptr, 0LL);
> +	}
>  
>  	ADD_U_INT32(dptr, attr->va_rdev);
>  	
> 

How about (after adding CTASSERT() if it hasn't already been merged to
Darwin):

+ CTASSERT(sizeof(((struct vattr *)NULL)->va_fileid) == sizeof(uint32_t) ||
+     sizeof(((struct vattr *)NULL)->va_fileid) == sizeof(uint64_t));
...
> +	/*
> +	 * Some systems use 32-bit file ID's, other's use 64-bit file IDs.
> +	 */
> +	if (sizeof(attr->va_fileid) == sizeof(uint32_t)) {
> +		ADD_U_INT32(dptr, pad0_32);
> +		ADD_U_INT32(dptr, attr->va_fileid);
> +	} else {
> +		ADD_U_INT64(dptr, attr->va_fileid);
> +	}

-- 
Brian Fundakowski Feldman                           \'[ FreeBSD ]''''''''''\
  <> green@FreeBSD.org                               \  The Power to Serve! \
 Opinions expressed are my own.                       \,,,,,,,,,,,,,,,,,,,,,,\



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050430152916.GG39270>