2005-04-16 15:20:36 -07:00
/*
2005-11-02 14:58:39 +11:00
* Copyright ( c ) 2000 - 2001 , 2005 Silicon Graphics , Inc .
* All Rights Reserved .
2005-04-16 15:20:36 -07:00
*
2005-11-02 14:58:39 +11:00
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License as
2005-04-16 15:20:36 -07:00
* published by the Free Software Foundation .
*
2005-11-02 14:58:39 +11:00
* 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 .
2005-04-16 15:20:36 -07:00
*
2005-11-02 14:58:39 +11:00
* 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
2005-04-16 15:20:36 -07:00
*/
# ifndef __XFS_DIR2_H__
# define __XFS_DIR2_H__
struct uio ;
struct xfs_dabuf ;
struct xfs_da_args ;
struct xfs_dir2_put_args ;
struct xfs_inode ;
struct xfs_trans ;
/*
* Directory version 2.
* There are 4 possible formats :
* shortform
* single block - data with embedded leaf at the end
* multiple data blocks , single leaf + freeindex block
* data blocks , node & leaf blocks ( btree ) , freeindex blocks
*
* The shortform format is in xfs_dir2_sf . h .
* The single block format is in xfs_dir2_block . h .
* The data block format is in xfs_dir2_data . h .
* The leaf and freeindex block formats are in xfs_dir2_leaf . h .
* Node blocks are the same as the other version , in xfs_da_btree . h .
*/
/*
* Byte offset in data block and shortform entry .
*/
typedef __uint16_t xfs_dir2_data_off_t ;
# define NULLDATAOFF 0xffffU
typedef uint xfs_dir2_data_aoff_t ; /* argument form */
/*
* Directory block number ( logical dirblk in file )
*/
typedef __uint32_t xfs_dir2_db_t ;
/*
* Byte offset in a directory .
*/
2006-03-14 13:20:33 +11:00
typedef xfs_off_t xfs_dir2_off_t ;
2005-04-16 15:20:36 -07:00
/*
* For getdents , argument struct for put routines .
*/
typedef int ( * xfs_dir2_put_t ) ( struct xfs_dir2_put_args * pa ) ;
typedef struct xfs_dir2_put_args {
2006-03-14 13:20:33 +11:00
xfs_off_t cook ; /* cookie of (next) entry */
2005-04-16 15:20:36 -07:00
xfs_intino_t ino ; /* inode number */
2006-03-14 13:20:33 +11:00
xfs_dirent_t * dbp ; /* buffer pointer */
2005-04-16 15:20:36 -07:00
char * name ; /* directory entry name */
int namelen ; /* length of name */
int done ; /* output: set if value was stored */
xfs_dir2_put_t put ; /* put function ptr (i/o) */
struct uio * uio ; /* uio control structure */
} xfs_dir2_put_args_t ;
/*
* Other interfaces used by the rest of the dir v2 code .
*/
2006-03-14 13:20:33 +11:00
extern int xfs_dir2_grow_inode ( struct xfs_da_args * args , int space ,
xfs_dir2_db_t * dbp ) ;
extern int xfs_dir2_isblock ( struct xfs_trans * tp , struct xfs_inode * dp ,
int * vp ) ;
extern int xfs_dir2_isleaf ( struct xfs_trans * tp , struct xfs_inode * dp ,
int * vp ) ;
extern int xfs_dir2_shrink_inode ( struct xfs_da_args * args , xfs_dir2_db_t db ,
struct xfs_dabuf * bp ) ;
2005-04-16 15:20:36 -07:00
# endif /* __XFS_DIR2_H__ */