mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-18 09:44:18 +08:00
a9273ca5c6
To be consistent with the directory code, the attr code should use unsigned names. Convert the names from the vfs at the highest level to unsigned, and ænsure they are consistenly used as unsigned down to disk. Signed-off-by: Dave Chinner <david@fromorbit.com> Reviewed-by: Christoph Hellwig <hch@lst.de>
71 lines
2.8 KiB
C
71 lines
2.8 KiB
C
/*
|
|
* Copyright (c) 2000,2002,2005 Silicon Graphics, Inc.
|
|
* All Rights Reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it would be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write the Free Software Foundation,
|
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
#ifndef __XFS_ATTR_SF_H__
|
|
#define __XFS_ATTR_SF_H__
|
|
|
|
/*
|
|
* Attribute storage when stored inside the inode.
|
|
*
|
|
* Small attribute lists are packed as tightly as possible so as
|
|
* to fit into the literal area of the inode.
|
|
*/
|
|
|
|
/*
|
|
* Entries are packed toward the top as tight as possible.
|
|
*/
|
|
typedef struct xfs_attr_shortform {
|
|
struct xfs_attr_sf_hdr { /* constant-structure header block */
|
|
__be16 totsize; /* total bytes in shortform list */
|
|
__u8 count; /* count of active entries */
|
|
} hdr;
|
|
struct xfs_attr_sf_entry {
|
|
__uint8_t namelen; /* actual length of name (no NULL) */
|
|
__uint8_t valuelen; /* actual length of value (no NULL) */
|
|
__uint8_t flags; /* flags bits (see xfs_attr_leaf.h) */
|
|
__uint8_t nameval[1]; /* name & value bytes concatenated */
|
|
} list[1]; /* variable sized array */
|
|
} xfs_attr_shortform_t;
|
|
typedef struct xfs_attr_sf_hdr xfs_attr_sf_hdr_t;
|
|
typedef struct xfs_attr_sf_entry xfs_attr_sf_entry_t;
|
|
|
|
/*
|
|
* We generate this then sort it, attr_list() must return things in hash-order.
|
|
*/
|
|
typedef struct xfs_attr_sf_sort {
|
|
__uint8_t entno; /* entry number in original list */
|
|
__uint8_t namelen; /* length of name value (no null) */
|
|
__uint8_t valuelen; /* length of value */
|
|
__uint8_t flags; /* flags bits (see xfs_attr_leaf.h) */
|
|
xfs_dahash_t hash; /* this entry's hash value */
|
|
unsigned char *name; /* name value, pointer into buffer */
|
|
} xfs_attr_sf_sort_t;
|
|
|
|
#define XFS_ATTR_SF_ENTSIZE_BYNAME(nlen,vlen) /* space name/value uses */ \
|
|
(((int)sizeof(xfs_attr_sf_entry_t)-1 + (nlen)+(vlen)))
|
|
#define XFS_ATTR_SF_ENTSIZE_MAX /* max space for name&value */ \
|
|
((1 << (NBBY*(int)sizeof(__uint8_t))) - 1)
|
|
#define XFS_ATTR_SF_ENTSIZE(sfep) /* space an entry uses */ \
|
|
((int)sizeof(xfs_attr_sf_entry_t)-1 + (sfep)->namelen+(sfep)->valuelen)
|
|
#define XFS_ATTR_SF_NEXTENTRY(sfep) /* next entry in struct */ \
|
|
((xfs_attr_sf_entry_t *)((char *)(sfep) + XFS_ATTR_SF_ENTSIZE(sfep)))
|
|
#define XFS_ATTR_SF_TOTSIZE(dp) /* total space in use */ \
|
|
(be16_to_cpu(((xfs_attr_shortform_t *) \
|
|
((dp)->i_afp->if_u1.if_data))->hdr.totsize))
|
|
|
|
#endif /* __XFS_ATTR_SF_H__ */
|