NTSTATUS trick for NTTIME?

Christoph Hellwig hch at infradead.org
Fri Mar 11 02:32:33 MST 2011


On Fri, Mar 11, 2011 at 10:56:42AM +1100, tridge at samba.org wrote:
> Hi Christoph,
> 
>  > Did you guys ever look into the sparse address space annotations?
> 
> can sparse be used to warn about mixing of different integer types? 

Yes.

> I so, that could be _really_ useful! We could get rid of the NTSTATUS
> structure in that case as well.
> 
> looking at the sparse manpage, I think we'd need to declare NTTIME and
> NTSTATUS as being __attribute__((bitwise)), then use -Wbitwise with
> sparse. Does that sound right?

Exactly.  E.g. from the Linux kernel code for the little/big-endian
types (it requires -D__CHECK_ENDIAN__ to actually check endianess even
with sparse for historic reasons):

include/linux/types.h:

#ifdef __CHECKER__
#define __bitwise__ __attribute__((bitwise))
#else
#define __bitwise__
#endif
#ifdef __CHECK_ENDIAN__
#define __bitwise __bitwise__
#else
#define __bitwise
#endif

typedef __u16 __bitwise __le16;
typedef __u16 __bitwise __be16;
typedef __u32 __bitwise __le32;
typedef __u32 __bitwise __be32;
typedef __u64 __bitwise __le64;
typedef __u64 __bitwise __be64;


and then the (be|le)*_to_cpu/cpu_to_(be|le)* require casts in their
actual bit-swap operations.

Note that bitwise also disallows arithmetic operations on these types.
I'm not sure how much of an issue that is for your NTTIME use case -
arithmetics on time values makes sense in theory, but I'm not sure how
common it is.



More information about the samba-technical mailing list