Blame view
fs/xfs/xfs_attr_sf.h
2.76 KB
1da177e4c
|
1 |
/* |
7b7187698
|
2 3 |
* Copyright (c) 2000,2002,2005 Silicon Graphics, Inc. * All Rights Reserved. |
1da177e4c
|
4 |
* |
7b7187698
|
5 6 |
* This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as |
1da177e4c
|
7 8 |
* published by the Free Software Foundation. * |
7b7187698
|
9 10 11 12 |
* 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. |
1da177e4c
|
13 |
* |
7b7187698
|
14 15 16 |
* 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 |
1da177e4c
|
17 18 19 20 21 22 23 24 25 26 |
*/ #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. */ |
1da177e4c
|
27 28 29 30 31 |
/* * Entries are packed toward the top as tight as possible. */ typedef struct xfs_attr_shortform { struct xfs_attr_sf_hdr { /* constant-structure header block */ |
3b244aa81
|
32 33 |
__be16 totsize; /* total bytes in shortform list */ __u8 count; /* count of active entries */ |
1da177e4c
|
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
} 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 */ |
a9273ca5c
|
54 |
unsigned char *name; /* name value, pointer into buffer */ |
1da177e4c
|
55 |
} xfs_attr_sf_sort_t; |
1da177e4c
|
56 |
#define XFS_ATTR_SF_ENTSIZE_BYNAME(nlen,vlen) /* space name/value uses */ \ |
a844f4510
|
57 |
(((int)sizeof(xfs_attr_sf_entry_t)-1 + (nlen)+(vlen))) |
1da177e4c
|
58 59 |
#define XFS_ATTR_SF_ENTSIZE_MAX /* max space for name&value */ \ ((1 << (NBBY*(int)sizeof(__uint8_t))) - 1) |
1da177e4c
|
60 61 |
#define XFS_ATTR_SF_ENTSIZE(sfep) /* space an entry uses */ \ ((int)sizeof(xfs_attr_sf_entry_t)-1 + (sfep)->namelen+(sfep)->valuelen) |
1da177e4c
|
62 |
#define XFS_ATTR_SF_NEXTENTRY(sfep) /* next entry in struct */ \ |
a844f4510
|
63 |
((xfs_attr_sf_entry_t *)((char *)(sfep) + XFS_ATTR_SF_ENTSIZE(sfep))) |
1da177e4c
|
64 |
#define XFS_ATTR_SF_TOTSIZE(dp) /* total space in use */ \ |
3b244aa81
|
65 66 |
(be16_to_cpu(((xfs_attr_shortform_t *) \ ((dp)->i_afp->if_u1.if_data))->hdr.totsize)) |
1da177e4c
|
67 |
|
1da177e4c
|
68 |
#endif /* __XFS_ATTR_SF_H__ */ |