Re: [PATCH 1/2] Make cramfs little endian only

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On Wed, 5 Dec 2007, Andi Drebes wrote:
>
> +#ifdef __BIG_ENDIAN
> +
> +/* Converts a cramfs_inode's offset field
> +   from little endianto cpu endian */
> +static u32 cramfs_offset_to_cpu(struct cramfs_inode *inode)
> +{
> +	u8 *inode_bytes = (u8 *)inode;
> +	return ((inode_bytes[8] & 0xc0) >> 6) | (inode_bytes[9] << 2) |
> +		(inode_bytes[10] << 10) | (inode_bytes[11] << 18);
> +}
...
> +#elif defined(__LITTLE_ENDIAN)
> +
> +/* Converts a cramfs_inode's offset field
> +   from little endian to cpu endian */
> +static u32 cramfs_offset_to_cpu(struct cramfs_inode *inode)
> +{
> +	return inode->offset;
> +}

No, no, what I meant about not having any #ifdef __LITTLE_ENDIAN was to do 
the code do the same thing *regardless* of endianness. In other words, a 
simple:

	struct cramfs_inode {
		__le32 mode_uid;	/* CRAMFS_MODE_WIDTH:CRAMFS_UID_WIDTH */
		__le32 size_gid;	/* CRAMFS_SIZE_WIDTH:CRAMFS_GID_WIDTH */
		__le32 namelen_offset;	/* CRAMFS_NAMELEN_WIDTH:CRAMFS_OFFSET_WIDTH */
	};

	#define CRAMFS_UID_MASK ((1ul << CRAMFS_UID_WIDTH)-1)
	#define CRAMFS_GID_MASK ((1ul << CRAMFS_GID_WIDTH)-1)
	#define CRAMFS_NAMELEN_MASK ((1ul << CRAMFS_NAMELEN_WIDTH)-1)

	static inline u32 cramfs_mode(struct cramfs_inode *inode)
	{
		return le32_to_cpu(node->mode_uid) >> CRAMFS_UID_WIDTH;
	}

	static inline u32 cramfs_uid(struct cramfs_inode *inode)
	{
		return le32_to_cpu(node->mode_uid) & CRAMFS_UID_MASK;
	}

	static inline u32 cramfs_size(struct cramfs_inode *inode)
	{
		return le32_to_cpu(node->size_gid) >> CRAMFS_GID_WIDTH;
	}

	static inline u32 cramfs_gid(struct cramfs_inode *inode)
	{
		return le32_to_cpu(node->size_gid) & CRAMFS_GID_MASK;
	}

	static inline u32 cramfs_offset(struct cramfs_inode *inode)
	{
		return le32_to_cpu(node->namelen_offset) >> CRAMFS_NAMELEN_WIDTH;
	}

	static inline u32 cramfs_namelen(struct cramfs_inode *inode)
	{
		return le32_to_cpu(node->namelen_offset) & CRAMFS_NAMELEN_MASK;
	}

See? No #ifdef's required, no different code-paths, and the code generated 
will be pretty much optimal too.

(No, the above is not tested in any way, shape, or form, and no, I didn't 
double-check that I actually extracted the right bits, but you get the 
idea).

			Linus
-
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]
  Powered by Linux